From bc55cfae41a8075f6fd778ab27ceb34cd3e81efe Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 17:44:49 -0400 Subject: [PATCH 01/21] =?UTF-8?q?feat(go):=20backend=20config=20=E2=80=94?= =?UTF-8?q?=20GoBackend=20union=20+=20"go"=20cache=20key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the Go arm to the backend-selection layer so a Go facade can dispatch on config type and cache per-language artifacts without colliding in a polyglot repo: - GoBackend = Union[CodeAnalyzerConfig, Neo4jConnectionConfig] — the same shape as JavaBackend. cango has no backend-only knob today, so Go reuses the base CodeAnalyzerConfig rather than a GoCodeAnalyzerConfig subclass. - "go": "go" in _CACHE_KEYS so cache_subdir(..., "go") resolves to /go. Part of #1 (GoAnalysisBackend frontend rung). Co-Authored-By: Claude Opus 4.8 --- cldk/analysis/commons/backend_config.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cldk/analysis/commons/backend_config.py b/cldk/analysis/commons/backend_config.py index 911b3582..f2a3b83b 100644 --- a/cldk/analysis/commons/backend_config.py +++ b/cldk/analysis/commons/backend_config.py @@ -41,7 +41,7 @@ # The canonical sub-directory name each language's artifacts live under inside the shared cache # root. Keyed so that a polyglot repository analyzed under more than one language does not have its # backends overwrite a single shared ``analysis.json``. -_CACHE_KEYS = {"java": "java", "python": "python", "typescript": "typescript"} +_CACHE_KEYS = {"java": "java", "python": "python", "typescript": "typescript", "go": "go"} @dataclass @@ -118,6 +118,10 @@ class Neo4jConnectionConfig: JavaBackend = Union[CodeAnalyzerConfig, Neo4jConnectionConfig] PyBackend = Union[PyCodeAnalyzerConfig, Neo4jConnectionConfig] TSBackend = Union[TSCodeAnalyzerConfig, CodeAnalyzerConfig, Neo4jConnectionConfig] +# Go's cango has no backend-only knob today, so it reuses the base CodeAnalyzerConfig rather than a +# GoCodeAnalyzerConfig subclass -- the same shape as JavaBackend. Add a subclass only if cango later +# grows a knob. +GoBackend = Union[CodeAnalyzerConfig, Neo4jConnectionConfig] def cache_subdir(cache_dir: Union[str, Path, None], project_dir: Union[str, Path, None], language: str) -> Path | None: @@ -127,7 +131,7 @@ def cache_subdir(cache_dir: Union[str, Path, None], project_dir: Union[str, Path cache_dir: The cache root from the backend config. When ``None``, defaults to ``/.codeanalyzer``. project_dir: The project directory, used to derive the default root. - language: The canonical language key (``"java"``, ``"python"``, ``"typescript"``). + language: The canonical language key (``"java"``, ``"python"``, ``"typescript"``, ``"go"``). Returns: ``/`` as an absolute path, or ``None`` if no root can be determined From 1daebc0552221ee5b9968fb9b5e9fd15d6120d13 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 17:45:01 -0400 Subject: [PATCH 02/21] feat(go): Pydantic models mirroring cango analysis.json (v2, L1/L2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hand-written mirror of the codeanalyzer-go (cango) analysis.json, the way the Java/TS model packages mirror their analyzers (cango is a compiled Go binary, so there is no package to re-export from like Python does). - models.py: GoAnalysis envelope → GoApplication → GoModule → GoType → GoCallable, plus GoField/GoParam/GoImport/GoBodyNode/GoCallGraphEdge/ GoSpan/GoMetrics/GoAnalyzer. Validates all 14 real Eval/new-apps samples (schema_version 2.0.0, max_level 2). - GoType is one model with kind ∈ {struct, interface}, not a discriminated union of per-kind subclasses like TSType: the two Go kinds carry the same wire shape, so a union would be ceremony. Go is the SDK's first class-less, type-centric facade — functions kept distinct from methods, no class. - Go-native fields carried first-class the way TS carries is_async/is_tsx: GoParam.is_variadic (...T), GoBodyNode.is_goroutine (go f()), GoCallable.error_channel ((T, error) idiom), GoCallable.source_file. - extra="ignore" (matching TS #386) so an additive cango release parses without an SDK edit; _NullSafeBase coerces a JSON null collection to its empty default before validation (Go's nil-slice idiom), honoring both the = [] field style and default_factory. - No projections.py yet: the overview models are out of this train's SDK3 scope and add purely additively later. Part of #1 (GoAnalysisBackend frontend rung). Co-Authored-By: Claude Opus 4.8 --- cldk/models/go/__init__.py | 56 ++++++++ cldk/models/go/models.py | 262 +++++++++++++++++++++++++++++++++++++ 2 files changed, 318 insertions(+) create mode 100644 cldk/models/go/__init__.py create mode 100644 cldk/models/go/models.py diff --git a/cldk/models/go/__init__.py b/cldk/models/go/__init__.py new file mode 100644 index 00000000..c989e80d --- /dev/null +++ b/cldk/models/go/__init__.py @@ -0,0 +1,56 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Go model package — a pydantic mirror of the ``codeanalyzer-go`` (``cango``) ``analysis.json`` +(schema v2, L1/L2). + +Go is the SDK's first class-less, type-centric facade: :class:`GoType` is one model discriminated +by a ``kind`` field (``struct`` | ``interface``), never a class; package-level ``functions`` are +kept distinct from receiver ``methods``. No ``projections.py`` yet — the overview models the +Java/TS siblings ship are out of this train's SDK3 scope and add purely additively later. +""" + +from .models import ( + GoAnalysis, + GoAnalyzer, + GoApplication, + GoBodyNode, + GoCallable, + GoCallGraphEdge, + GoField, + GoImport, + GoMetrics, + GoModule, + GoParam, + GoSpan, + GoType, +) + +__all__ = [ + "GoAnalysis", + "GoAnalyzer", + "GoApplication", + "GoBodyNode", + "GoCallable", + "GoCallGraphEdge", + "GoField", + "GoImport", + "GoMetrics", + "GoModule", + "GoParam", + "GoSpan", + "GoType", +] diff --git a/cldk/models/go/models.py b/cldk/models/go/models.py new file mode 100644 index 00000000..c0f3d80a --- /dev/null +++ b/cldk/models/go/models.py @@ -0,0 +1,262 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Go schema models — a pydantic mirror of the ``codeanalyzer-go`` (``cango``) ``analysis.json``, +schema v2, at full-depth L1/L2 (the scope the analyzer emits today). + +The wire is one additive containment tree: ``GoAnalysis{analyzer, application}`` → +``GoApplication{symbol_table{module → types{}/functions{}}, call_graph}`` → +``GoType{callables{}/fields{}}`` → ``GoCallable{body{}}``. Every node above the callable leaf +carries a ``can://`` ``id`` and a :class:`GoSpan`; a module carries its full ``source`` once and +every node's text is a slice of it (``module.source[span.bytes]``). + +Go is the SDK's first **class-less, type-centric** facade: a ``type`` is a ``struct`` or an +``interface`` (never a class), and package-level ``functions`` are kept distinct from receiver +``methods``. :class:`GoType` is therefore a **single model with a ``kind`` field**, not a +discriminated ``Union`` of per-kind subclasses like :class:`~cldk.models.typescript.TSType` — the +two Go kinds carry the same wire shape, so the union would be ceremony (CLDK design note, issue +python-sdk#1 / spec §4 SDK1). + +**Go-native fields** carried as first-class typed fields the way TypeScript carries ``is_async`` / +``is_tsx`` (schema v2 "typed field" additions, recorded per-language): ``GoParam.is_variadic`` +(``...T``), ``GoBodyNode.is_goroutine`` (a ``go f()`` spawn), ``GoCallable.error_channel`` (the +generalized ``(T, error)`` return idiom), ``GoCallable.source_file``. + +``extra="ignore"`` (matching where TypeScript landed in #386): an additive ``cango`` release is +consumable without an SDK edit, at the cost of the drift detector — an unmodelled field is dropped +rather than failing loudly. :class:`_NullSafeBase` coerces a JSON ``null`` collection to its empty +default **before** validation: Go's zero-value idiom marshals a ``nil`` slice/map to ``null``, and +although ``cango`` emits ``[]``/``{}`` today, this keeps the SDK robust to a future emitter that +does not. +""" + +from __future__ import annotations + +from typing import Dict, List, Optional, Tuple + +from pydantic import BaseModel, ConfigDict, model_validator +from typing_extensions import Literal + + +class _Base(BaseModel): + #: ``ignore``, not ``forbid`` (per TypeScript #386): an additive analyzer release is consumable + #: without an SDK edit. The cost is the drift detector — a field the SDK does not model is + #: dropped silently rather than refusing to parse; a declared field is the only way a value is + #: reachable. + model_config = ConfigDict(extra="ignore") + + +class _NullSafeBase(_Base): + """Coerce a JSON ``null`` into the field's empty collection default before validation. + + Go marshals a ``nil`` slice/map to JSON ``null``, which Pydantic v2 ``List[T]`` / ``Dict[K, V]`` + rejects. ``cango`` emits ``[]`` / ``{}`` on every sample measured, but a future emitter default + could regress; this makes that invisible to the SDK rather than a hard parse error. + """ + + @model_validator(mode="before") + @classmethod + def _coerce_null_collections(cls, data): + if not isinstance(data, dict): + return data + for name, info in cls.model_fields.items(): + if data.get(name) is not None: + continue + # A collection default reaches us either as ``info.default`` (the ergonomic + # ``= []`` / ``= {}`` field style) or as ``info.default_factory`` (``Field( + # default_factory=list)``). Honor both so ``null`` coerces to the empty default + # regardless of how the field was declared. + if info.default_factory is not None: + sentinel = info.default_factory() + else: + sentinel = info.default + if isinstance(sentinel, (list, dict)): + data[name] = sentinel + return data + + +# ---------------------------------------------------------------------------------------------- +# Span — the one universal attribute +# ---------------------------------------------------------------------------------------------- + + +class GoSpan(_Base): + """``start``/``end`` are ``[line, column]`` (1-based); ``bytes`` are ``[from, to]`` offsets into + the owning module's ``source``.""" + + start: Tuple[int, int] + end: Tuple[int, int] + bytes: Tuple[int, int] + + +# ---------------------------------------------------------------------------------------------- +# Leaf models +# ---------------------------------------------------------------------------------------------- + + +class GoImport(_Base): + """One import binding on a module.""" + + name: str + path: str + alias: Optional[str] = None + span: Optional[GoSpan] = None + + +class GoParam(_Base): + """A function / method parameter. ``is_variadic`` is Go's ``...T``.""" + + name: str + type: Optional[str] = None + span: Optional[GoSpan] = None + is_variadic: bool = False + + +class GoField(_Base): + """A struct field (its map key is the field name).""" + + id: str + kind: Literal["field"] = "field" + span: Optional[GoSpan] = None + type: Optional[str] = None + + +class GoMetrics(_Base): + """Per-callable metrics. Only ``cyclomatic`` is emitted today; extensible map in spirit.""" + + cyclomatic: int = 0 + + +class GoBodyNode(_NullSafeBase): + """One entry of a callable's ``body{}`` map, keyed by local id (``L:C`` or ``@tag``). + + At L1/L2 the only ``kind`` is ``call`` (a call site). ``callee`` is the one sanctioned ``null`` + on the wire — unresolved at L1, refined to a ``can://`` id at L2. ``is_goroutine`` marks a + ``go f()`` spawn. + """ + + kind: str + span: Optional[GoSpan] = None + callee: Optional[str] = None + is_goroutine: bool = False + + +class GoCallGraphEdge(_Base): + """A wire call-graph edge: ``can://`` endpoints, open provenance tokens (``go/types``, …).""" + + src: str + dst: str + prov: List[str] = [] + weight: int = 1 + + +# ---------------------------------------------------------------------------------------------- +# Callable +# ---------------------------------------------------------------------------------------------- + + +class GoCallable(_NullSafeBase): + """A package-level ``function`` or a receiver ``method`` (kept distinct — no module-as-class + hack). ``error_channel`` generalizes the ``(T, error)`` return idiom; ``callables`` holds + nested func literals / closures when non-empty.""" + + id: str + kind: str = "function" # function | method + span: Optional[GoSpan] = None + signature: str + parameters: List[GoParam] = [] + return_type: Optional[str] = None + error_channel: List[str] = [] + metrics: Optional[GoMetrics] = None + source_file: Optional[str] = None + body: Dict[str, GoBodyNode] = {} + callables: Dict[str, "GoCallable"] = {} + + def __hash__(self) -> int: + return hash(self.signature) + + +# ---------------------------------------------------------------------------------------------- +# Type — one model with a ``kind`` field (struct | interface); never a class. +# ---------------------------------------------------------------------------------------------- + + +class GoType(_NullSafeBase): + """A Go ``struct`` or ``interface``. The two kinds carry the same wire shape, so this is one + model discriminated by ``kind`` rather than a ``Union`` of subclasses. ``base_types`` are + embedded types; ``fields`` are the struct's data fields (empty for an interface).""" + + id: str + kind: Literal["struct", "interface"] + span: Optional[GoSpan] = None + base_types: List[str] = [] + callables: Dict[str, GoCallable] = {} + fields: Dict[str, GoField] = {} + + +# ---------------------------------------------------------------------------------------------- +# Module +# ---------------------------------------------------------------------------------------------- + + +class GoModule(_NullSafeBase): + """A compilation unit (one ``.go`` file). The symbol-table key is its repo-relative path; + ``source`` is the whole file's text, carried once, that every node's text slices from.""" + + id: str + kind: Literal["module"] = "module" + span: Optional[GoSpan] = None + package: str + source: str + imports: List[GoImport] = [] + types: Dict[str, GoType] = {} + functions: Dict[str, GoCallable] = {} + content_hash: Optional[str] = None + + +# ---------------------------------------------------------------------------------------------- +# Application + envelope +# ---------------------------------------------------------------------------------------------- + + +class GoApplication(_NullSafeBase): + """The application root: the containment tree (``symbol_table``) plus the one app-scope overlay + the analyzer emits at L2 (``call_graph``).""" + + id: str + kind: Literal["application"] = "application" + symbol_table: Dict[str, GoModule] + call_graph: List[GoCallGraphEdge] = [] + + +class GoAnalyzer(_Base): + name: str + version: str + + +class GoAnalysis(_Base): + """The envelope ``analysis.json`` IS.""" + + schema_version: str + language: str + max_level: int + k_limit: Optional[int] = None # L3+ (absent at L1/L2) + analyzer: GoAnalyzer + application: GoApplication + + +# Resolve the forward reference in the self-recursive callable. +GoCallable.model_rebuild() From 418f51750c0b96303b3315b9d77fb0e75dc31919 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 17:55:42 -0400 Subject: [PATCH 03/21] feat(go): GoAnalysisBackend ABC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The abstract base both Go backends implement, parameterising the shared AnalysisBackend with Go's models and setting the graph vocabulary prefixes N="Go" / P="GO_". - GoAnalysisBackend(AnalysisBackend[GoApplication, GoModule, GoType, GoCallable, GoField, GoParam]) — 14 lifecycle/artifact slots inherited, 5 Go-specific accessors added: get_functions (package-level funcs, no base slot), get_callers/get_callees (keyed on callable id, returning full GoCallGraphEdge — lossless prov/weight), get_source, get_call_graph_json. - Class-less, type-centric: the facade users see is get_types/get_functions/ get_methods_of, never "class". The inherited class-named slots (get_all_classes etc.) are filled only to instantiate and map TypeT=GoType (struct + interface); never user-facing. - ARTIFACT_LAYER_UNAVAILABLE: the artifact/dependency/config layer is absent from a local L1/L2 analysis.json, so the local backend raises it (Java precedent — [] is reserved for "pass ran, found nothing") while the Neo4j backend answers for real from its Artifact/Package/ConfigKey nodes. - __init__.py is a package marker for now; GoAnalysis is exported once the facade lands. Pure contract — no bodies; first behavioral test is test_go_backend_contract asserting both concrete backends implement all 19 abstractmethods. Part of #1 (GoAnalysisBackend frontend rung). Co-Authored-By: Claude Opus 4.8 --- cldk/analysis/go/__init__.py | 21 +++++++ cldk/analysis/go/backend.py | 116 +++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 cldk/analysis/go/__init__.py create mode 100644 cldk/analysis/go/backend.py diff --git a/cldk/analysis/go/__init__.py b/cldk/analysis/go/__init__.py new file mode 100644 index 00000000..3562cd5f --- /dev/null +++ b/cldk/analysis/go/__init__.py @@ -0,0 +1,21 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Go analysis package. + +``GoAnalysis`` (the public facade) is exported here once it lands; for now this package carries +:class:`~cldk.analysis.go.backend.GoAnalysisBackend` and its concrete backends. +""" diff --git a/cldk/analysis/go/backend.py b/cldk/analysis/go/backend.py new file mode 100644 index 00000000..476ed680 --- /dev/null +++ b/cldk/analysis/go/backend.py @@ -0,0 +1,116 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""The abstract base every Go analysis backend implements. + +:class:`GoAnalysisBackend` parameterises the shared, cross-language +:class:`~cldk.analysis.commons.backend.AnalysisBackend` with Go's pydantic models and sets the +Go graph vocabulary prefixes (``N="Go"`` / ``P="GO_"``). The local +:class:`~cldk.analysis.go.codeanalyzer.codeanalyzer.GoCodeanalyzer` and the read-only +``GoNeo4jBackend`` both subclass it, which is what guarantees the two backends answer the facade +identically — a ``test_go_backend_contract`` asserts every abstract method is implemented on both. + +**Go is the SDK's first class-less, type-centric facade.** The *facade* vocabulary the user sees +is ``get_types`` / ``get_functions`` / ``get_methods_of`` — never ``class``. The class-named slots +on this backend (``get_all_classes`` / ``get_class`` / ``get_all_methods_in_class`` / ``get_method``) +are **inherited from the generic base ABC** and filled only so the backend can instantiate (Python +refuses an abstract class with an unimplemented ``@abstractmethod``); they map ``TypeT=GoType`` +(structs + interfaces) and are never user-facing. The base has no package-level-function slot, so +:meth:`get_functions` is the one type-centric accessor added here. + +**The artifact/dependency/config layer** (the inherited ``get_artifacts`` / ``get_dependencies`` / +``get_config_keys`` / ``get_config_uses`` / ``get_unresolved_config_reads``) is not emitted by a +local L1/L2 ``cango`` run: those app-scope keys are absent from ``analysis.json``. Following the +Java precedent — ``[]`` is reserved for "the pass ran and found nothing" — the local backend +**raises** :data:`ARTIFACT_LAYER_UNAVAILABLE` rather than returning an ambiguous empty; the Neo4j +backend answers them for real from its ``Artifact`` / ``Package`` / ``ConfigKey`` nodes. +""" + +from __future__ import annotations + +from abc import abstractmethod +from typing import ClassVar, Dict, List + +from cldk.analysis.commons.backend import AnalysisBackend +from cldk.models.go import ( + GoApplication, + GoCallable, + GoCallGraphEdge, + GoField, + GoModule, + GoParam, + GoType, +) + +#: Raised by the local backend for the artifact/dependency/config accessors: a local L1/L2 cango +#: analysis does not emit that layer, so an empty result would be indistinguishable from a proved +#: absence. Both the message and the raise mirror codeanalyzer-java's unavailable-overlay pattern. +#: ``{app}`` is the application anchor name, never a can:// id. +ARTIFACT_LAYER_UNAVAILABLE = ( + "the artifact/dependency/config layer is not emitted by a local codeanalyzer-go L1/L2 analysis " + "of {app!r}; query the Neo4j backend, which carries it" +) + + +class GoAnalysisBackend(AnalysisBackend[GoApplication, GoModule, GoType, GoCallable, GoField, GoParam]): + """Abstract base every Go analysis backend implements (see the module docstring). + + Inherited abstract (from :class:`~cldk.analysis.commons.backend.AnalysisBackend`): + ``get_application_view``, ``get_symbol_table``, ``get_call_graph``, ``get_all_classes``, + ``get_class``, ``get_all_methods_in_class``, ``get_method``, ``get_all_fields``, + ``get_method_parameters``, ``get_artifacts``, ``get_dependencies``, ``get_config_keys``, + ``get_config_uses``, ``get_unresolved_config_reads``. + """ + + P: ClassVar[str] = "GO_" + N: ClassVar[str] = "Go" + + # -----[ type-centric leaf accessors the base ABC does not cover ]----- + @abstractmethod + def get_functions(self) -> Dict[str, GoCallable]: + """Every package-level function, keyed by signature. + + Go keeps package-level functions distinct from receiver methods (no module-as-class hack), + and the generic base ABC has no slot for them — ``get_all_methods_in_class`` covers only a + type's methods. This is the facade's ``get_functions``. + """ + + # -----[ call graph (keyed on the callable id, SDK2) ]----- + @abstractmethod + def get_callers(self, callable_id: str) -> List[GoCallGraphEdge]: + """Every call-graph edge whose ``dst`` is ``callable_id`` — the callables that call it. + + Returns the full :class:`~cldk.models.go.GoCallGraphEdge` (``src``/``dst``/``prov``/ + ``weight``), losslessly: the caller ids are ``[e.src for e in result]``, and ``prov``/ + ``weight`` stay available. Both backends supply the same shape (the Neo4j ``GO_CALLS`` + relationship carries ``weight``/``prov`` as properties). + """ + + @abstractmethod + def get_callees(self, callable_id: str) -> List[GoCallGraphEdge]: + """Every call-graph edge whose ``src`` is ``callable_id`` — the callables it calls. + + Full edges, as :meth:`get_callers`; the callee ids are ``[e.dst for e in result]``. + """ + + # -----[ source + whole-program ]----- + @abstractmethod + def get_source(self, node_id: str) -> str: + """The source text of the node ``node_id`` — ``module.source[node.span.bytes]``.""" + + @abstractmethod + def get_call_graph_json(self) -> str: + """The application's call graph as a JSON string (Tier A).""" From 720f5cabce12d2a94085d51b9eaa910b433b9f6b Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 18:22:54 -0400 Subject: [PATCH 04/21] feat(go): local codeanalyzer backend (run cango, parse analysis.json) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GoCodeanalyzer(GoAnalysisBackend): run cango as a subprocess, read the v2 analysis.json, validate into GoAnalysis, and answer all 19 abstractmethods from the in-memory tree. Verified end-to-end on a real Go module and against the 573-callable echo sample (47 modules, 110 types, 195 funcs, 473 edges). - Binary discovery: $CODEANALYZER_GO_BIN -> codeanalyzer_go wheel bin_path() -> CodeanalyzerExecutionException with install hint (wheel arm lights up at pin time; build now, pin last). - CLI: -i/--app-name/-a <1|2>/--analysis-schema 2/--skip-tests/--eager/-t. --analysis-schema 2 is mandatory — cango defaults to the legacy v1 shape the v2 models reject. Level capped at 2 (no L3/L4). - Output: stdout pipe when no cache dir; else persist to /go and reuse unless eager/target_files force a re-run. - Indexing: types keyed by durable can:// id (a Go type carries no signature, and the types{} short-name key isn't unique across packages); callables by signature. No id->key indirection — Go's call-graph endpoints already ARE callable ids. - get_callers/get_callees filter the flat call_graph by dst/src == id, returning full GoCallGraphEdge (prov/weight preserved). - get_source slices module.source by span.bytes, which are UTF-8 BYTE offsets: a non-ASCII module is sliced on its encoded bytes (cached once) and decoded, the way TS _Spanned.code does. Character-index slicing drifted by one on the first multibyte sample. - Artifact/dependency/config six raise ARTIFACT_LAYER_UNAVAILABLE: that layer is not emitted by a local L1/L2 run (Java precedent — [] means proved-empty). Part of #1 (GoAnalysisBackend frontend rung). Co-Authored-By: Claude Opus 4.8 --- cldk/analysis/go/codeanalyzer/__init__.py | 21 ++ cldk/analysis/go/codeanalyzer/codeanalyzer.py | 312 ++++++++++++++++++ 2 files changed, 333 insertions(+) create mode 100644 cldk/analysis/go/codeanalyzer/__init__.py create mode 100644 cldk/analysis/go/codeanalyzer/codeanalyzer.py diff --git a/cldk/analysis/go/codeanalyzer/__init__.py b/cldk/analysis/go/codeanalyzer/__init__.py new file mode 100644 index 00000000..e47c0248 --- /dev/null +++ b/cldk/analysis/go/codeanalyzer/__init__.py @@ -0,0 +1,21 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""The local (in-process subprocess) Go analysis backend.""" + +from cldk.analysis.go.codeanalyzer.codeanalyzer import GoCodeanalyzer + +__all__ = ["GoCodeanalyzer"] diff --git a/cldk/analysis/go/codeanalyzer/codeanalyzer.py b/cldk/analysis/go/codeanalyzer/codeanalyzer.py new file mode 100644 index 00000000..30fe67ac --- /dev/null +++ b/cldk/analysis/go/codeanalyzer/codeanalyzer.py @@ -0,0 +1,312 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""The local Go analysis backend: run ``cango`` as a subprocess, read the ``analysis.json`` v2 +envelope, validate it into :class:`~cldk.models.go.GoAnalysis`, and answer every +:class:`~cldk.analysis.go.backend.GoAnalysisBackend` method from the in-memory tree. + +The binary ships (post-release) with the ``codeanalyzer-go`` PyPI dependency; ``$CODEANALYZER_GO_BIN`` +is the out-of-band override used today, before the wheel is pinned. ``--analysis-schema 2`` is +**mandatory** — ``cango`` defaults to the legacy v1 shape, which the v2 models reject. +""" + +from __future__ import annotations + +import os +import shlex +import subprocess +from pathlib import Path +from subprocess import CompletedProcess +from typing import Dict, List, Union + +import networkx as nx + +from cldk.analysis.commons.backend_config import cache_subdir +from cldk.analysis.go.backend import ARTIFACT_LAYER_UNAVAILABLE, GoAnalysisBackend +from cldk.models.go import ( + GoAnalysis, + GoApplication, + GoCallable, + GoCallGraphEdge, + GoField, + GoModule, + GoParam, + GoType, +) +from cldk.models.python import PyArtifact, PyConfigKey, PyConfigRead, PyConfigUseEdge, PyDependency +from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException + +#: cango caps at level 2 (symbol table + resolver call graph); it has no L3/L4. The SDK's +#: AnalysisLevel enum carries string values, so map to the integer -a flag explicitly. +_LEVEL_FLAG = {"symbol_table": 1, "call_graph": 2} + + +class GoCodeanalyzer(GoAnalysisBackend): + """Run ``cango`` and answer queries over the parsed ``analysis.json``. + + Attributes: + analysis: The whole ``analysis.json`` v2 envelope (``schema_version``, ``max_level``, + ``analyzer``, ``application``). + application: The application root — symbol table + call graph. + application_name: The ``--app-name`` anchor the analyzer stamped into every id, read back + off the ``can://`` root id. Spelled the same as the Neo4j backend's + ``application_name`` so a raised message names the application identically whichever + backend raised it. + """ + + def __init__( + self, + project_dir: Union[str, Path], + cache_dir: Union[str, Path, None], + analysis_level: str, + eager_analysis: bool, + target_files: List[str] | None, + ) -> None: + self.project_dir = project_dir + self.cache_dir = cache_dir + self.analysis_level = analysis_level + self.eager_analysis = eager_analysis + self.target_files = target_files + self.analysis: GoAnalysis = self._init_codeanalyzer(_LEVEL_FLAG.get(analysis_level, 1)) + self.application: GoApplication = self.analysis.application + self.application_name: str = self.application.id.removeprefix("can://") + self._call_graph: nx.DiGraph | None = None + self._index() + + # -----[ binary resolution ]----- + def _get_codeanalyzer_exec(self) -> List[str]: + """Resolve the ``cango`` executable command. + + ``$CODEANALYZER_GO_BIN`` is the out-of-band override (a locally built binary); otherwise the + binary ships inside the ``codeanalyzer-go`` PyPI package (platform wheel), mirroring the TS + backend. The wheel arm lights up once the analyzer release is pinned. + """ + env_bin = os.environ.get("CODEANALYZER_GO_BIN") + if env_bin: + return shlex.split(env_bin) + try: + import codeanalyzer_go # type: ignore[import-not-found] + + return [str(codeanalyzer_go.bin_path())] + except (ModuleNotFoundError, FileNotFoundError, AttributeError) as e: + raise CodeanalyzerExecutionException( + "codeanalyzer-go binary not found: $CODEANALYZER_GO_BIN is unset and the " + f"`codeanalyzer-go` wheel is not importable or carries no binary for this platform ({e}). " + "Install it with `pip install codeanalyzer-go`, or set $CODEANALYZER_GO_BIN." + ) from e + + def _argv(self, analysis_level: int, output_dir: Path | None) -> List[str]: + """The cango command line: ``-i --app-name -a <1|2> + --analysis-schema 2 [-o --cache-dir ] --skip-tests [--eager] [-t ]...``. + + ``--analysis-schema 2`` is mandatory: cango defaults to the legacy v1 shape, which the v2 + models reject. The level is capped at 2 — cango produces no L3/L4. + """ + project = Path(self.project_dir) + args = self._get_codeanalyzer_exec() + [ + "-i", + str(project), + "--app-name", + project.name, + "-a", + str(min(analysis_level, 2)), + "--analysis-schema", + "2", + ] + if output_dir is not None: + args += ["-o", str(output_dir), "--cache-dir", str(output_dir)] + args += ["--skip-tests"] + if self.eager_analysis: + args += ["--eager"] + for tf in self.target_files or []: + args += ["-t", str(tf).strip()] + return args + + def _init_codeanalyzer(self, analysis_level: int) -> GoAnalysis: + """Run cango and return the validated v2 envelope. + + With no cache directory the output is read from the subprocess stdout pipe; with one, the + analysis.json is persisted under ``/go`` and reused unless ``eager_analysis`` or + ``target_files`` force a re-run. + """ + output_dir = cache_subdir(self.cache_dir, self.project_dir, "go") + if output_dir is None: + args = self._argv(analysis_level, None) + try: + proc: CompletedProcess[str] = subprocess.run(args, capture_output=True, text=True, check=True) + except subprocess.CalledProcessError as e: + raise CodeanalyzerExecutionException(f"cango failed: {e.stderr or e}") from e + return GoAnalysis.model_validate_json(proc.stdout) + + output_dir.mkdir(parents=True, exist_ok=True) + analysis_json_file = output_dir / "analysis.json" + needs_run = self.eager_analysis or not analysis_json_file.exists() or bool(self.target_files) + if needs_run: + args = self._argv(analysis_level, output_dir) + try: + subprocess.run(args, capture_output=True, text=True, check=True) + except subprocess.CalledProcessError as e: + raise CodeanalyzerExecutionException(f"cango failed: {e.stderr or e}") from e + if not analysis_json_file.exists(): + raise CodeanalyzerExecutionException("cango did not generate analysis.json.") + return GoAnalysis.model_validate_json(analysis_json_file.read_text(encoding="utf-8")) + + # -----[ indexing ]----- + def _index(self) -> None: + """Flatten the symbol table into lookups and an id → (module, node) index for source + slicing. Types are keyed by their durable ``id`` (a Go ``type`` carries no ``signature``, + and its ``types{}`` map key is a bare short name that is not unique across packages); + callables by their ``signature``. Go's call-graph endpoints are full ``can://`` ids that + are themselves the callable ids, so no id → key indirection is needed (unlike TS).""" + self._types: Dict[str, GoType] = {} # type id -> type + self._functions: Dict[str, GoCallable] = {} # signature -> function + self._methods_by_type: Dict[str, Dict[str, GoCallable]] = {} # type id -> {method sig -> method} + self._callables: Dict[str, GoCallable] = {} # id -> callable + self._file_of: Dict[str, str] = {} # type id / callable signature -> module file path + #: durable node id -> (owning module, node) for get_source slicing. + self._source_of: Dict[str, tuple] = {} + #: owning module id -> its source encoded UTF-8 once, for a non-ASCII module (byte-offset + #: slicing); ASCII modules are absent and indexed directly. Encoded lazily in get_source. + self._module_bytes: Dict[str, bytes] = {} + + for fp, mod in self.application.symbol_table.items(): + for fn in mod.functions.values(): + self._functions[fn.signature] = fn + self._add_callable(fn, mod, fp) + for ty in mod.types.values(): + self._types[ty.id] = ty + self._file_of[ty.id] = fp + self._source_of[ty.id] = (mod, ty) + methods: Dict[str, GoCallable] = {} + for m in ty.callables.values(): + self._add_callable(m, mod, fp) + methods[m.signature] = m + self._methods_by_type[ty.id] = methods + for fld in ty.fields.values(): + self._source_of[fld.id] = (mod, fld) + + def _add_callable(self, c: GoCallable, mod: GoModule, fp: str) -> None: + self._callables[c.id] = c + self._file_of[c.signature] = fp + self._source_of[c.id] = (mod, c) + for inner in c.callables.values(): + self._add_callable(inner, mod, fp) + + # -----[ application / whole-program ]----- + def get_application_view(self) -> GoApplication: + return self.application + + def get_symbol_table(self) -> Dict[str, GoModule]: + return self.application.symbol_table + + # -----[ call graph ]----- + def get_call_graph(self) -> nx.DiGraph: + """The application's call graph as a NetworkX DiGraph: nodes keyed by ``can://`` callable + id, edges carrying ``weight`` and ``provenance`` (as the sibling backends do).""" + if self._call_graph is not None: + return self._call_graph + graph = nx.DiGraph() + for edge in self.application.call_graph: + graph.add_node(edge.src, id=edge.src) + graph.add_node(edge.dst, id=edge.dst) + graph.add_edge(edge.src, edge.dst, type="CALL_DEP", weight=edge.weight, provenance=tuple(edge.prov)) + self._call_graph = graph + return graph + + def get_call_graph_json(self) -> str: + return self.application.model_dump_json() + + def get_callers(self, callable_id: str) -> List[GoCallGraphEdge]: + """Every call-graph edge whose ``dst`` is ``callable_id`` — the callables that call it.""" + return [e for e in self.application.call_graph if e.dst == callable_id] + + def get_callees(self, callable_id: str) -> List[GoCallGraphEdge]: + """Every call-graph edge whose ``src`` is ``callable_id`` — the callables it calls.""" + return [e for e in self.application.call_graph if e.src == callable_id] + + # -----[ types (class-named base slots; Go has no class — see backend module docstring) ]----- + def get_all_classes(self) -> Dict[str, GoType]: + """Every Go type (struct + interface), keyed by its durable ``can://`` id. The base ABC's + class-named slot; the facade exposes this as ``get_types``.""" + return self._types + + def get_class(self, qualified_class_name: str) -> GoType | None: + return self._types.get(qualified_class_name) + + def get_all_methods_in_class(self, qualified_class_name: str) -> Dict[str, GoCallable]: + """The receiver methods of a type, keyed by signature. The facade exposes this as + ``get_methods_of``.""" + return self._methods_by_type.get(qualified_class_name, {}) + + def get_method(self, qualified_class_name: str, qualified_method_name: str) -> GoCallable | None: + return self._methods_by_type.get(qualified_class_name, {}).get(qualified_method_name) + + def get_all_fields(self, qualified_class_name: str) -> List[GoField]: + ty = self._types.get(qualified_class_name) + return list(ty.fields.values()) if ty else [] + + def get_method_parameters(self, qualified_class_name: str, qualified_method_name: str) -> List[GoParam]: + m = self.get_method(qualified_class_name, qualified_method_name) + return list(m.parameters) if m else [] + + # -----[ functions + source ]----- + def get_functions(self) -> Dict[str, GoCallable]: + return self._functions + + def get_source(self, node_id: str) -> str: + """The source text of ``node_id`` — ``module.source`` sliced by ``node.span.bytes`` — for a + durable-id node (type, callable, field). + + ``span.bytes`` are **UTF-8 byte** offsets, so a non-ASCII module is sliced on the encoded + bytes and decoded back (an ASCII module is indexed directly, paying nothing), the same way + the TS ``_Spanned.code`` property does. Slicing the ``str`` by character index would drift + on any file with a multibyte character before the span. + """ + entry = self._source_of.get(node_id) + if entry is None: + raise CodeanalyzerExecutionException( + f"no source for {node_id!r}: not a type, callable or field of application " + f"{self.application_name!r}" + ) + mod, node = entry + if node.span is None: + raise CodeanalyzerExecutionException(f"node {node_id!r} carries no span, so it has no source text") + b0, b1 = node.span.bytes + if mod.source.isascii(): + return mod.source[b0:b1] + encoded = self._module_bytes.get(mod.id) + if encoded is None: + encoded = mod.source.encode("utf-8") + self._module_bytes[mod.id] = encoded + return encoded[b0:b1].decode("utf-8") + + # -----[ artifact / dependency / config layer — not emitted by a local L1/L2 analysis ]----- + def get_artifacts(self) -> Dict[str, PyArtifact]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_dependencies( + self, *, direct_only: bool = False, ecosystem: str | None = None, declared_in: str | None = None + ) -> List[PyDependency]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_config_keys(self) -> Dict[str, PyConfigKey]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_config_uses(self, key: str | None = None) -> List[PyConfigUseEdge]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_unresolved_config_reads(self) -> List[PyConfigRead]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) From 42b66c139b7013e337624a7f0ec204ad12efa0bb Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 19:16:33 -0400 Subject: [PATCH 05/21] feat(go): read-only Neo4j backend (lazy Cypher over the GO_ graph) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GoNeo4jBackend(GoAnalysisBackend): a drop-in alternative to GoCodeanalyzer answering the same 19-method surface over a GO_-prefixed graph a `cango --emit neo4j` run populated out of band. Verified for PARITY against the local backend on the live cobra graph (17 types, 106 funcs, 458 edges, 18 modules — identical type-id/signature sets, matching callers/callees incl. prov/weight, matching get_source). - Lazy per-subtree fetch, NOT an eager GoApplication rebuild: Go graphs reach enterprise scale (a 525k-node / 156k-edge app was measured), so each accessor issues one indexed Cypher query touching only what it needs. get_callers(id) is a single GO_CALLS lookup; nothing materialises the whole tree. Parity is therefore proven by test, not guaranteed by construction. - config.py re-exports Neo4jConnectionConfig; reconstruct.py has the pure props-map -> model builders (span_json / metrics_json are JSON strings on the wire, parsed here); neo4j_backend.py holds the lazy accessors. - Every query scoped to can:/// + the :GoCanNode marker, so a shared graph with several apps or a sibling-language subgraph is never scanned in. - get_source slices :GoModule.source (which the projection carries) by the node's span_json byte offsets, UTF-8-aware, matching the local backend. - neo4j driver is a lazy import (optional extra cldk[neo4j]); the module imports fine without it and raises a clear install message on construction. - Artifact/dependency/config six RAISE here too, same as the local backend: the Go projector declares :Artifact/:Package/:ConfigKey but does not yet emit them (0 such nodes in cobra), so the layer is reserved-but-empty on both projections. Flip to querying for real when the projector emits it. Part of #1 (GoAnalysisBackend frontend rung). Co-Authored-By: Claude Opus 4.8 --- cldk/analysis/go/neo4j/__init__.py | 21 ++ cldk/analysis/go/neo4j/config.py | 27 ++ cldk/analysis/go/neo4j/neo4j_backend.py | 343 ++++++++++++++++++++++++ cldk/analysis/go/neo4j/reconstruct.py | 102 +++++++ 4 files changed, 493 insertions(+) create mode 100644 cldk/analysis/go/neo4j/__init__.py create mode 100644 cldk/analysis/go/neo4j/config.py create mode 100644 cldk/analysis/go/neo4j/neo4j_backend.py create mode 100644 cldk/analysis/go/neo4j/reconstruct.py diff --git a/cldk/analysis/go/neo4j/__init__.py b/cldk/analysis/go/neo4j/__init__.py new file mode 100644 index 00000000..d3b58164 --- /dev/null +++ b/cldk/analysis/go/neo4j/__init__.py @@ -0,0 +1,21 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""The read-only Neo4j Go analysis backend.""" + +from cldk.analysis.go.neo4j.neo4j_backend import GoNeo4jBackend + +__all__ = ["GoNeo4jBackend"] diff --git a/cldk/analysis/go/neo4j/config.py b/cldk/analysis/go/neo4j/config.py new file mode 100644 index 00000000..a4fda92b --- /dev/null +++ b/cldk/analysis/go/neo4j/config.py @@ -0,0 +1,27 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Connection settings for the read-only Neo4j-backed Go analysis backend. + +The definition lives in :mod:`cldk.analysis.commons.backend_config`; it is re-exported here for +symmetry with the sibling language backends. +""" + +from __future__ import annotations + +from cldk.analysis.commons.backend_config import Neo4jConnectionConfig + +__all__ = ["Neo4jConnectionConfig"] diff --git a/cldk/analysis/go/neo4j/neo4j_backend.py b/cldk/analysis/go/neo4j/neo4j_backend.py new file mode 100644 index 00000000..4a5068f3 --- /dev/null +++ b/cldk/analysis/go/neo4j/neo4j_backend.py @@ -0,0 +1,343 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""The read-only Neo4j Go analysis backend. + +A drop-in alternative to :class:`~cldk.analysis.go.codeanalyzer.codeanalyzer.GoCodeanalyzer`: the +same :class:`~cldk.analysis.go.backend.GoAnalysisBackend` query surface, answered over the +``GO_``-prefixed graph a ``cango --emit neo4j`` run populated out of band. + +**Lazy per-subtree fetch, not an eager rebuild.** Go graphs reach enterprise scale (a 525k-node, +156k-edge graph was measured on a real app), so this backend never materialises the whole +application: each accessor issues one *indexed* Cypher query touching only what it needs +(``get_callers(id)`` is a single ``GO_CALLS`` lookup, ``get_class(id)`` one node). Parity with the +local backend is therefore proven by test (the two answer the same question by different paths), +not guaranteed by sharing a rebuilt ``GoApplication``. + +Every query is scoped to one application by the id prefix ``can:///`` (and the ``:GoCanNode`` +marker label the projector stamps), so a shared graph holding several applications or a +sibling-language subgraph is never scanned into an answer. + +The artifact/dependency/config six **raise** here, exactly as on the local backend: the Go neo4j +projector declares ``:Artifact`` / ``:Package`` / ``:ConfigKey`` in its schema but does not yet +emit them, so the layer is reserved-but-empty on this projection too. When the projector starts +emitting it, those six flip to querying the graph for real. +""" + +from __future__ import annotations + +import json +from functools import cached_property +from typing import Any, Dict, List + +import networkx as nx + +from cldk.analysis.go.backend import ARTIFACT_LAYER_UNAVAILABLE, GoAnalysisBackend +from cldk.analysis.go.neo4j import reconstruct as R +from cldk.models.go import GoApplication, GoCallable, GoCallGraphEdge, GoField, GoModule, GoParam, GoType +from cldk.models.python import PyArtifact, PyConfigKey, PyConfigRead, PyConfigUseEdge, PyDependency +from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException + +#: Relationship types a Go graph must carry to be a codeanalyzer-go projection at all. +_REQUIRED_RELS = {"GO_HAS_MODULE", "GO_DECLARES", "GO_HAS_METHOD", "GO_CALLS"} + + +class GoNeo4jBackend(GoAnalysisBackend): + """Answer the Go query surface over a ``GO_``-prefixed Neo4j graph (see the module docstring).""" + + def __init__( + self, + neo4j_uri: str, + neo4j_username: str, + neo4j_password: str, + neo4j_database: str | None = None, + application_name: str | None = None, + ) -> None: + try: + from neo4j import GraphDatabase + except ModuleNotFoundError as e: # pragma: no cover - import guard + raise CodeanalyzerExecutionException( + "The Neo4j backend requires the 'neo4j' driver. Install it with `pip install neo4j` " + "(or `pip install cldk[neo4j]`)." + ) from e + self._init_with_driver( + GraphDatabase.driver(neo4j_uri, auth=(neo4j_username, neo4j_password)), + application_name=application_name, + neo4j_database=neo4j_database, + ) + + @classmethod + def _from_driver(cls, driver: Any, *, application_name: str | None = None, neo4j_database: str | None = None) -> "GoNeo4jBackend": + """Construct from an already-built driver — the seam tests inject a fake/real driver here.""" + self = cls.__new__(cls) + self._init_with_driver(driver, application_name=application_name, neo4j_database=neo4j_database) + return self + + def _init_with_driver(self, driver: Any, *, application_name: str | None, neo4j_database: str | None) -> None: + if not application_name: + raise CodeanalyzerExecutionException("application_name is required to scope queries to an application.") + self.application_name = application_name + self._database = neo4j_database + self._driver = driver + self._session_obj: Any | None = None + self._call_graph: nx.DiGraph | None = None + self._probe_schema() + + # -----[ scope + execution ]----- + @property + def _app_id(self) -> str: + """``can://`` — the ``:GoApplication`` anchor id and the root of every id below it.""" + return f"can://{self.application_name}" + + @property + def _scope_prefix(self) -> str: + """``can:///`` — the trailing slash keeps ``app`` from matching ``app-b``.""" + return f"{self._app_id}/" + + def _run(self, query: str, **params: Any) -> List[Dict[str, Any]]: + """Run one read statement over a reused session; drop the session on failure.""" + if self._session_obj is None: + self._session_obj = self._driver.session(database=self._database) + try: + return [record.data() for record in self._session_obj.run(query, **params)] + except Exception: + self._session_obj = None + raise + + def close(self) -> None: + if self._session_obj is not None: + self._session_obj = None + self._driver.close() + + def __enter__(self) -> "GoNeo4jBackend": + return self + + def __exit__(self, *exc: Any) -> None: + self.close() + + def _probe_schema(self) -> None: + """Refuse a graph that is not a codeanalyzer-go projection or holds no node for this app.""" + found = {r["relationshipType"] for r in self._run("CALL db.relationshipTypes()")} + missing = _REQUIRED_RELS - found + if missing: + raise CodeanalyzerExecutionException( + f"the graph is not a codeanalyzer-go projection: missing relationship types {sorted(missing)}" + ) + rows = self._run("OPTIONAL MATCH (a:GoApplication {id: $app_id}) RETURN count(a) AS n", app_id=self._app_id) + if not (rows and rows[0].get("n")): + raise CodeanalyzerExecutionException( + f"the graph holds no :GoApplication node for {self.application_name!r} (id {self._app_id!r})" + ) + + # -----[ application / whole-program ]----- + def get_application_view(self) -> GoApplication: + """The whole application view. Whole-program accessors touch everything by nature; this + builds the symbol table from the containment relationships and the call graph from + ``GO_CALLS``, cached.""" + return self._application + + @cached_property + def _application(self) -> GoApplication: + return GoApplication(id=self._app_id, symbol_table=self._build_symbol_table(), call_graph=self._call_edges()) + + def get_symbol_table(self) -> Dict[str, GoModule]: + return self.get_application_view().symbol_table + + def _module_file_key(self, module_id: str) -> str: + """``can:///`` → ```` (the symbol-table key the local backend uses).""" + return module_id[len(self._scope_prefix):] + + def _build_symbol_table(self) -> Dict[str, GoModule]: + """Rebuild every module with its types, functions, methods and fields from the containment + relationships. This is the expensive whole-program path; point accessors below never call + it.""" + modules: Dict[str, GoModule] = {} + mod_rows = self._run( + "MATCH (:GoApplication {id: $app_id})-[:GO_HAS_MODULE]->(m:GoModule) RETURN properties(m) AS p ORDER BY m.id", + app_id=self._app_id, + ) + for mr in mod_rows: + mod = R.module(mr["p"]) + # package-level functions + for fr in self._run( + "MATCH (m:GoModule {id: $mid})-[:GO_DECLARES]->(c:GoCallable) RETURN properties(c) AS p ORDER BY c.signature", + mid=mod.id, + ): + fn = R.callable_(fr["p"]) + mod.functions[fn.signature] = fn + # types + their methods and fields + for tr in self._run( + "MATCH (m:GoModule {id: $mid})-[:GO_DECLARES]->(t:GoType) RETURN properties(t) AS p ORDER BY t.id", + mid=mod.id, + ): + ty = R.go_type(tr["p"]) + for mrow in self._run( + "MATCH (t:GoType {id: $tid})-[:GO_HAS_METHOD]->(c:GoCallable) RETURN properties(c) AS p ORDER BY c.signature", + tid=ty.id, + ): + m = R.callable_(mrow["p"]) + ty.callables[m.signature] = m + for frow in self._run( + "MATCH (t:GoType {id: $tid})-[:GO_HAS_FIELD]->(f:GoField) RETURN properties(f) AS p ORDER BY f.id", + tid=ty.id, + ): + fld = R.field(frow["p"]) + ty.fields[fld.id.split("/")[-1]] = fld + # keyed by the short name, as in the JSON types{} map + mod.types[ty.id.split("/")[-1]] = ty + modules[self._module_file_key(mod.id)] = mod + return modules + + # -----[ call graph ]----- + def _call_edges(self) -> List[GoCallGraphEdge]: + rows = self._run( + "MATCH (a:GoCallable)-[r:GO_CALLS]->(b) WHERE a.id STARTS WITH $pre " + "RETURN a.id AS src, b.id AS dst, properties(r) AS p ORDER BY a.id, b.id", + pre=self._scope_prefix, + ) + return [ + GoCallGraphEdge(src=r["src"], dst=r["dst"], prov=list(r["p"].get("prov") or []), weight=r["p"].get("weight", 1)) + for r in rows + ] + + def get_call_graph(self) -> nx.DiGraph: + if self._call_graph is not None: + return self._call_graph + graph = nx.DiGraph() + for e in self._call_edges(): + graph.add_node(e.src, id=e.src) + graph.add_node(e.dst, id=e.dst) + graph.add_edge(e.src, e.dst, type="CALL_DEP", weight=e.weight, provenance=tuple(e.prov)) + self._call_graph = graph + return graph + + def get_call_graph_json(self) -> str: + return self.get_application_view().model_dump_json() + + def get_callers(self, callable_id: str) -> List[GoCallGraphEdge]: + """Indexed point query: ``(a)-[:GO_CALLS]->(callable_id)``. No whole-graph materialisation.""" + rows = self._run( + "MATCH (a:GoCallable)-[r:GO_CALLS]->(b:GoCallable {id: $id}) RETURN a.id AS src, properties(r) AS p ORDER BY a.id", + id=callable_id, + ) + return [GoCallGraphEdge(src=r["src"], dst=callable_id, prov=list(r["p"].get("prov") or []), weight=r["p"].get("weight", 1)) for r in rows] + + def get_callees(self, callable_id: str) -> List[GoCallGraphEdge]: + rows = self._run( + "MATCH (a:GoCallable {id: $id})-[r:GO_CALLS]->(b) RETURN b.id AS dst, properties(r) AS p ORDER BY b.id", + id=callable_id, + ) + return [GoCallGraphEdge(src=callable_id, dst=r["dst"], prov=list(r["p"].get("prov") or []), weight=r["p"].get("weight", 1)) for r in rows] + + # -----[ types (class-named base slots; Go has no class) ]----- + def get_all_classes(self) -> Dict[str, GoType]: + """Every Go type (struct + interface), keyed by its durable ``can://`` id. One indexed scan + of ``:GoType`` nodes under the app prefix; methods/fields are not attached here (that is the + whole-program rebuild) — use :meth:`get_all_methods_in_class` / :meth:`get_all_fields`.""" + rows = self._run( + "MATCH (t:GoType) WHERE t.id STARTS WITH $pre RETURN properties(t) AS p ORDER BY t.id", + pre=self._scope_prefix, + ) + return {r["p"]["id"]: R.go_type(r["p"]) for r in rows} + + def get_class(self, qualified_class_name: str) -> GoType | None: + rows = self._run("MATCH (t:GoType {id: $id}) RETURN properties(t) AS p", id=qualified_class_name) + return R.go_type(rows[0]["p"]) if rows else None + + def get_all_methods_in_class(self, qualified_class_name: str) -> Dict[str, GoCallable]: + rows = self._run( + "MATCH (t:GoType {id: $id})-[:GO_HAS_METHOD]->(c:GoCallable) RETURN properties(c) AS p ORDER BY c.signature", + id=qualified_class_name, + ) + return {r["p"]["signature"]: R.callable_(r["p"]) for r in rows} + + def get_method(self, qualified_class_name: str, qualified_method_name: str) -> GoCallable | None: + rows = self._run( + "MATCH (t:GoType {id: $id})-[:GO_HAS_METHOD]->(c:GoCallable {signature: $sig}) RETURN properties(c) AS p", + id=qualified_class_name, + sig=qualified_method_name, + ) + return R.callable_(rows[0]["p"]) if rows else None + + def get_all_fields(self, qualified_class_name: str) -> List[GoField]: + rows = self._run( + "MATCH (t:GoType {id: $id})-[:GO_HAS_FIELD]->(f:GoField) RETURN properties(f) AS p ORDER BY f.id", + id=qualified_class_name, + ) + return [R.field(r["p"]) for r in rows] + + def get_method_parameters(self, qualified_class_name: str, qualified_method_name: str) -> List[GoParam]: + # :GoCallable does not project parameters; a reconstructed method carries none. Returning + # [] keeps parity with "the graph does not carry this", not an invented answer. + m = self.get_method(qualified_class_name, qualified_method_name) + return list(m.parameters) if m else [] + + # -----[ functions + source ]----- + def get_functions(self) -> Dict[str, GoCallable]: + """Every package-level function (``:GoModule``-[:GO_DECLARES]->(:GoCallable)``), keyed by + signature.""" + rows = self._run( + "MATCH (m:GoModule)-[:GO_DECLARES]->(c:GoCallable) WHERE m.id STARTS WITH $pre " + "RETURN properties(c) AS p ORDER BY c.signature", + pre=self._scope_prefix, + ) + return {r["p"]["signature"]: R.callable_(r["p"]) for r in rows} + + def get_source(self, node_id: str) -> str: + """The source text of ``node_id`` — ``module.source`` sliced by the node's ``span_json`` + byte offsets. The owning ``:GoModule`` carries ``source``; the node's module is the longest + ``:GoModule.id`` the node id starts with. Byte offsets are UTF-8, as in the local backend.""" + node_rows = self._run( + "MATCH (n:GoCanNode {id: $id}) RETURN n.span_json AS span", + id=node_id, + ) + if not node_rows: + raise CodeanalyzerExecutionException( + f"no node {node_id!r} in the graph for application {self.application_name!r}" + ) + span_json = node_rows[0]["span"] + if not span_json: + raise CodeanalyzerExecutionException(f"node {node_id!r} carries no span, so it has no source text") + # the owning module: the :GoModule whose id is a prefix of this node's id + mod_rows = self._run( + "MATCH (m:GoModule) WHERE $id STARTS WITH m.id + '/' RETURN m.id AS id, m.source AS source ORDER BY size(m.id) DESC LIMIT 1", + id=node_id, + ) + if not mod_rows: + raise CodeanalyzerExecutionException(f"no owning module for {node_id!r}") + source = mod_rows[0]["source"] or "" + b0, b1 = json.loads(span_json)["bytes"] + if source.isascii(): + return source[b0:b1] + return source.encode("utf-8")[b0:b1].decode("utf-8") + + # -----[ artifact / dependency / config layer — reserved-but-unemitted on this projection ]----- + def get_artifacts(self) -> Dict[str, PyArtifact]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_dependencies( + self, *, direct_only: bool = False, ecosystem: str | None = None, declared_in: str | None = None + ) -> List[PyDependency]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_config_keys(self) -> Dict[str, PyConfigKey]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_config_uses(self, key: str | None = None) -> List[PyConfigUseEdge]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) + + def get_unresolved_config_reads(self) -> List[PyConfigRead]: + raise CodeanalyzerExecutionException(ARTIFACT_LAYER_UNAVAILABLE.format(app=self.application_name)) diff --git a/cldk/analysis/go/neo4j/reconstruct.py b/cldk/analysis/go/neo4j/reconstruct.py new file mode 100644 index 00000000..19e0c2fa --- /dev/null +++ b/cldk/analysis/go/neo4j/reconstruct.py @@ -0,0 +1,102 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Rebuild :mod:`cldk.models.go` objects from the ``codeanalyzer-go`` Neo4j node property maps. + +Pure functions: each takes the flat property dict the ``--emit neo4j`` projection wrote for one +node (``internal/neo4j/schema.go`` is the authority for what each label carries) and returns the +same pydantic object the local backend parses from ``analysis.json``. :class:`GoNeo4jBackend` +fetches the rows and these turn them back into models; the per-node shape lives here. + +Two props are **JSON strings** on the wire, not nested maps (the projector flattens them so a Bolt +property stays scalar): ``span_json`` (every spanned node) and ``metrics_json`` (callables). They +are parsed here. The graph does **not** carry ``base_types`` on a ``:GoType`` (embeds are the +``GO_EMBEDS`` relationship, not a node property) nor ``parameters`` on a ``:GoCallable`` (not +projected), so a reconstructed type/callable has those at their empty default — the lazy backend +answers the few accessors that need them from the relationships instead. +""" + +from __future__ import annotations + +import json +from typing import Any, Dict, Mapping, Optional + +from cldk.models.go import GoBodyNode, GoCallable, GoField, GoMetrics, GoModule, GoSpan, GoType + +Props = Mapping[str, Any] + + +def _span(props: Props) -> Optional[GoSpan]: + """Parse the ``span_json`` string into a :class:`GoSpan`; ``None`` when absent.""" + raw = props.get("span_json") + if not raw: + return None + d = json.loads(raw) + return GoSpan(start=tuple(d["start"]), end=tuple(d["end"]), bytes=tuple(d["bytes"])) + + +def _metrics(props: Props) -> Optional[GoMetrics]: + raw = props.get("metrics_json") + if not raw: + return None + return GoMetrics(**json.loads(raw)) + + +def module(props: Props) -> GoModule: + """A :class:`GoModule` from a ``:GoModule`` node (carries ``source``, so ``get_source`` works + on this backend). ``imports``/``types``/``functions`` are filled by the caller from the + containment relationships; a bare module reconstruct leaves them empty.""" + return GoModule( + id=props["id"], + span=_span(props), + package=props.get("package", ""), + source=props.get("source", ""), + content_hash=props.get("content_hash"), + ) + + +def go_type(props: Props) -> GoType: + """A :class:`GoType` from a ``:GoType`` node. ``callables``/``fields`` are filled by the caller + from ``GO_HAS_METHOD``/``GO_HAS_FIELD``; ``base_types`` from ``GO_EMBEDS``.""" + return GoType(id=props["id"], kind=props["kind"], span=_span(props)) + + +def callable_(props: Props) -> GoCallable: + """A :class:`GoCallable` from a ``:GoCallable`` node. ``parameters``/``body``/``callables`` are + not projected on the node; the caller fills ``body`` from ``GO_HAS_BODY_NODE`` where needed.""" + return GoCallable( + id=props["id"], + kind=props.get("kind", "function"), + signature=props["signature"], + return_type=props.get("return_type"), + error_channel=list(props.get("error_channel") or []), + metrics=_metrics(props), + source_file=props.get("source_file"), + span=_span(props), + ) + + +def field(props: Props) -> GoField: + return GoField(id=props["id"], type=props.get("type"), span=_span(props)) + + +def body_node(props: Props) -> GoBodyNode: + return GoBodyNode( + kind=props.get("kind", "call"), + callee=props.get("callee"), + is_goroutine=bool(props.get("is_goroutine", False)), + span=_span(props), + ) From 5a22310766faecc1405a73845d228dcecc06c967 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 19:25:55 -0400 Subject: [PATCH 06/21] feat(go): GoAnalysis facade (type-centric, class-less public surface) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The thin public query layer. Picks a backend by config type (Neo4jConnectionConfig -> GoNeo4jBackend, else CodeAnalyzerConfig -> GoCodeanalyzer) and forwards every query. Verified on BOTH backends: the local one on a real Go module, the Neo4j one on the live cobra graph. - SDK1 made real at the user layer: the public surface is get_types/get_type/ get_functions/get_methods_of/get_method/get_fields — NO class-named method anywhere a caller can see (verified: zero 'class' in the public API). These forward to the backend's inherited class-named slots, which exist only to satisfy the shared ABC. - Types, their methods and fields are addressed by the type's durable can:// id (a Go type has no unique short name across packages); get_callers/get_callees by the callable's can:// id, returning the full GoCallGraphEdge (SDK2). - Package-level functions kept distinct from receiver methods (no module-as-class hack). - __init__.py now exports GoAnalysis. Part of #1 (GoAnalysisBackend frontend rung). --- cldk/analysis/go/__init__.py | 9 +- cldk/analysis/go/go_analysis.py | 155 ++++++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 cldk/analysis/go/go_analysis.py diff --git a/cldk/analysis/go/__init__.py b/cldk/analysis/go/__init__.py index 3562cd5f..98989829 100644 --- a/cldk/analysis/go/__init__.py +++ b/cldk/analysis/go/__init__.py @@ -16,6 +16,11 @@ """Go analysis package. -``GoAnalysis`` (the public facade) is exported here once it lands; for now this package carries -:class:`~cldk.analysis.go.backend.GoAnalysisBackend` and its concrete backends. +Exports the public :class:`~cldk.analysis.go.go_analysis.GoAnalysis` facade; the +:class:`~cldk.analysis.go.backend.GoAnalysisBackend` ABC and its two concrete backends live +alongside it. """ + +from cldk.analysis.go.go_analysis import GoAnalysis + +__all__ = ["GoAnalysis"] diff --git a/cldk/analysis/go/go_analysis.py b/cldk/analysis/go/go_analysis.py new file mode 100644 index 00000000..5575be9c --- /dev/null +++ b/cldk/analysis/go/go_analysis.py @@ -0,0 +1,155 @@ +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Go analysis facade. + +Thin, read-only query layer over the canonical ``GoApplication`` a Go backend produces. Mirrors +the lifecycle vocabulary of the sibling facades (there is no shared base class — the facades match +by convention) and delegates all indexing and query work to its backend. + +**Go is the SDK's first class-less, type-centric facade.** The public surface speaks ``get_types`` +/ ``get_functions`` / ``get_methods_of`` — never ``class``. These forward to the backend's +inherited class-named slots (``get_all_classes`` / ``get_all_methods_in_class``), which exist only +to satisfy the shared ABC; the lie never reaches a caller. Package-level **functions** are kept +distinct from receiver **methods** (no module-as-class hack). Types, their methods and their fields +are addressed by the type's durable ``can://`` id (a Go type has no unique short name across +packages); callers/callees by the callable's ``can://`` id. +""" + +from __future__ import annotations + +from pathlib import Path +from typing import Dict, List + +import networkx as nx + +from cldk.analysis.commons.backend_config import CodeAnalyzerConfig, GoBackend, Neo4jConnectionConfig +from cldk.analysis.go.backend import GoAnalysisBackend +from cldk.analysis.go.codeanalyzer import GoCodeanalyzer +from cldk.analysis.go.neo4j import GoNeo4jBackend +from cldk.models.go import GoApplication, GoCallable, GoCallGraphEdge, GoField, GoModule, GoParam, GoType + + +class GoAnalysis: + """Analysis facade for Go projects. + + Delegates every query to a backend. Two interchangeable backends exist, both exposing the same + method surface: + + * :class:`~cldk.analysis.go.codeanalyzer.codeanalyzer.GoCodeanalyzer` (default) — runs ``cango`` + and walks the in-memory ``GoApplication`` parsed from ``analysis.json``; + * :class:`~cldk.analysis.go.neo4j.GoNeo4jBackend` — answers the *same* queries with lazy Cypher + over the ``GO_``-prefixed graph a ``cango --emit neo4j`` run populated. Selected by passing a + :class:`~cldk.analysis.commons.backend_config.Neo4jConnectionConfig`. + """ + + def __init__( + self, + project_dir: str | Path | None, + analysis_level: str, + target_files: List[str] | None, + eager_analysis: bool, + backend: GoBackend | None = None, + ) -> None: + self.project_dir = project_dir + self.analysis_level = analysis_level + self.target_files = target_files + self.eager_analysis = eager_analysis + # The backend is selected by the *type* of the config: Neo4jConnectionConfig picks the + # read-only Cypher backend, CodeAnalyzerConfig (the default) the in-process cango. + self.backend_config: GoBackend = backend if backend is not None else CodeAnalyzerConfig() + self.backend: GoAnalysisBackend + if isinstance(self.backend_config, Neo4jConnectionConfig): + cfg = self.backend_config + application_name = cfg.application_name or (Path(project_dir).name if project_dir else None) + self.backend = GoNeo4jBackend( + neo4j_uri=cfg.uri, + neo4j_username=cfg.username, + neo4j_password=cfg.password, + neo4j_database=cfg.database, + application_name=application_name, + ) + else: + self.backend = GoCodeanalyzer( + project_dir=project_dir, + cache_dir=self.backend_config.cache_dir, + analysis_level=analysis_level, + eager_analysis=eager_analysis, + target_files=target_files, + ) + self.application: GoApplication = self.backend.get_application_view() + + # -----[ Tier A: lifecycle / whole-program ]----- + def get_application_view(self) -> GoApplication: + """The whole application view (symbol table + call graph).""" + return self.backend.get_application_view() + + def get_symbol_table(self) -> Dict[str, GoModule]: + """The per-file symbol table, keyed by module file path.""" + return self.backend.get_symbol_table() + + def get_call_graph(self) -> nx.DiGraph: + """NetworkX DiGraph of the application's call edges, nodes keyed by ``can://`` callable id, + edges carrying ``weight`` and ``provenance``.""" + return self.backend.get_call_graph() + + def get_call_graph_json(self) -> str: + """The application's call graph as a JSON string.""" + return self.backend.get_call_graph_json() + + def get_callers(self, callable_id: str) -> List[GoCallGraphEdge]: + """The call-graph edges whose ``dst`` is ``callable_id`` — the callables that call it. Full + edges (``src``/``dst``/``prov``/``weight``); caller ids are ``[e.src for e in result]``.""" + return self.backend.get_callers(callable_id) + + def get_callees(self, callable_id: str) -> List[GoCallGraphEdge]: + """The call-graph edges whose ``src`` is ``callable_id`` — the callables it calls.""" + return self.backend.get_callees(callable_id) + + # -----[ type-centric navigation (SDK1: structs + interfaces, never "class") ]----- + def get_types(self) -> Dict[str, GoType]: + """Every Go type (struct + interface), keyed by its durable ``can://`` id.""" + return self.backend.get_all_classes() + + def get_type(self, type_id: str) -> GoType | None: + """A single type by its ``can://`` id.""" + return self.backend.get_class(type_id) + + def get_functions(self) -> Dict[str, GoCallable]: + """Every package-level function, keyed by signature (kept distinct from receiver methods).""" + return self.backend.get_functions() + + def get_methods_of(self, type_id: str) -> Dict[str, GoCallable]: + """The receiver methods of the type ``type_id``, keyed by signature.""" + return self.backend.get_all_methods_in_class(type_id) + + def get_method(self, type_id: str, method_signature: str) -> GoCallable | None: + """A single receiver method of ``type_id`` by its signature.""" + return self.backend.get_method(type_id, method_signature) + + def get_fields(self, type_id: str) -> List[GoField]: + """The fields of the type ``type_id``.""" + return self.backend.get_all_fields(type_id) + + def get_method_parameters(self, type_id: str, method_signature: str) -> List[GoParam]: + """The parameters of a receiver method of ``type_id``.""" + return self.backend.get_method_parameters(type_id, method_signature) + + # -----[ source ]----- + def get_source(self, node_id: str) -> str: + """The source text of ``node_id`` (a type, callable or field) — its span sliced from the + owning module's source.""" + return self.backend.get_source(node_id) From ed74c102d360f4d1445faf9c258a389111223b86 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 19:33:08 -0400 Subject: [PATCH 07/21] feat(go): CLDK.go() factory + legacy shim + CLAUDE.md table row Wire the Go facade into the public entry point so the issue's acceptance gate passes: CLDK(language="go").analysis(project_path=...) returns a populated type table + call graph. Verified on both backends (local on a real module, Neo4j on the live cobra graph), and the legacy shim emits the expected DeprecationWarning. - CLDK.go(project_path, *, analysis_level, target_files, eager, backend) mirroring CLDK.java/python/typescript; backend selected by config type. - Legacy CLDK(language="go").analysis(...) shim routes to CLDK.go() with a CodeAnalyzerConfig (or the passed neo4j_config); source_code mode refused as for the other languages. Return type and deprecation message widened to include Go. - CLAUDE.md supported-languages table gets the Go row (required in the same change): cango -a 1..2 only, --analysis-schema 2 mandatory, version pin deferred (no release cut), lazy-Cypher Neo4j backend, no projections.py. Part of #1 (GoAnalysisBackend frontend rung). --- CLAUDE.md | 1 + cldk/core.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8a80c89c..ec431302 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,6 +13,7 @@ an optional read-only Neo4j backend — selected by the *type* of the `backend=` | Java | `CLDK.java(...)` (needs the `cldk[java]` extra) | `JCodeanalyzer` (the `codeanalyzer-java` 3.2.0 wheel's jar on its bundled JVM, subprocess, `-a 1..4` — no jar in this repo, no JDK download) | `JNeo4jBackend` (graphs emitted by ≥ 3.2.0, probed at attach) | `cldk/models/java/` (schema v2 mirror) + `projections.py` | | Python | `CLDK.python(...)` | `PyCodeanalyzer` (in-process `codeanalyzer-python`) | `PyNeo4jBackend` | re-exported from `codeanalyzer-python` | | TypeScript (+ JavaScript modules) | `CLDK.typescript(...)` | `TSCodeanalyzer` (`codeanalyzer-typescript` 1.6.0 binary from the wheel, subprocess; `-a 1..4`, but `--emit neo4j` takes no `-a` and is always full depth) | `TSNeo4jBackend` (graphs emitted by ≥ 1.5.2; older refused at attach) | `cldk/models/typescript/` (schema v2 mirror) | +| Go | `CLDK.go(...)` | `GoCodeanalyzer` (`cango` binary, subprocess, `-a 1..2` only — no L3/L4; `--analysis-schema 2` mandatory or it emits legacy v1; binary via `$CODEANALYZER_GO_BIN` or the `codeanalyzer-go` wheel — **no release cut yet, so the version pin is deferred**) | `GoNeo4jBackend` (lazy Cypher over the `GO_`-prefixed graph; **not** an eager rebuild — Go graphs reach enterprise scale) | `cldk/models/go/` (schema v2 mirror; **no `projections.py`** — out of SDK3 scope) | **Java, since leg 3a (#310):** the models are an `extra="forbid"` mirror of canonical schema v2, so a 1.x `analysis.json` (and a pre-3.0.1 Neo4j graph) is refused, not parsed; `get_call_graph()` keys diff --git a/cldk/core.py b/cldk/core.py index 01459f64..6d4534ee 100644 --- a/cldk/core.py +++ b/cldk/core.py @@ -47,6 +47,7 @@ from cldk.analysis.java import JavaAnalysis from cldk.analysis.commons.backend_config import ( CodeAnalyzerConfig, + GoBackend, JavaBackend, Neo4jConnectionConfig, PyBackend, @@ -55,6 +56,7 @@ TSCodeAnalyzerConfig, ) from cldk.analysis.commons.treesitter import TreesitterJava +from cldk.analysis.go import GoAnalysis from cldk.analysis.python.python_analysis import PythonAnalysis from cldk.analysis.typescript import TypeScriptAnalysis from cldk.utils.exceptions import CldkInitializationException @@ -220,6 +222,39 @@ def typescript( backend=backend, ) + @staticmethod + def go( + project_path: str | Path | None = None, + *, + analysis_level: str = AnalysisLevel.symbol_table, + target_files: List[str] | None = None, + eager: bool = False, + backend: GoBackend | None = None, + ) -> GoAnalysis: + """Create a Go analysis facade. + + Go is the SDK's first class-less, type-centric facade: the surface is + ``get_types`` / ``get_functions`` / ``get_methods_of``, never ``get_classes``. + + Args: + project_path: Path to the Go module directory (needs a ``go.mod``). Optional only when + ``backend`` is a :class:`Neo4jConnectionConfig` (the graph is populated out of band + over Bolt). When provided, the path is validated — it must exist and be a directory. + analysis_level: Analysis depth (see :class:`~cldk.analysis.AnalysisLevel`); ``cango`` + produces levels 1 (symbol table) and 2 (+ resolver call graph) only. + target_files: Restrict analysis to these files. + eager: Force regeneration of cached analysis. + backend: Backend configuration. Defaults to :class:`CodeAnalyzerConfig` (runs ``cango``); + pass a :class:`Neo4jConnectionConfig` to use the read-only Neo4j backend. + """ + return GoAnalysis( + project_dir=_normalize_project_path(project_path), + analysis_level=analysis_level, + target_files=target_files, + eager_analysis=eager, + backend=backend, + ) + def analysis( self, project_path: str | Path | None = None, @@ -232,11 +267,11 @@ def analysis( cache_dir: str | Path | None = None, use_ray: bool = False, neo4j_config: "Neo4jConnectionConfig | None" = None, - ) -> JavaAnalysis | PythonAnalysis | TypeScriptAnalysis: + ) -> JavaAnalysis | PythonAnalysis | TypeScriptAnalysis | GoAnalysis: """Deprecated entry point. Use the per-language factory methods instead. ``CLDK(language).analysis(...)`` is retained as a thin compatibility shim that forwards to - :meth:`java` / :meth:`python` / :meth:`typescript` with an appropriate + :meth:`java` / :meth:`python` / :meth:`typescript` / :meth:`go` with an appropriate ``backend=`` configuration object. The former ``analysis_json_path`` is folded into the unified ``cache_dir`` (it is used as @@ -249,7 +284,7 @@ def analysis( """ warnings.warn( "CLDK(language).analysis(...) is deprecated; use the per-language factory methods " - "CLDK.java()/CLDK.python()/CLDK.typescript() with a backend= object.", + "CLDK.java()/CLDK.python()/CLDK.typescript()/CLDK.go() with a backend= object.", DeprecationWarning, stacklevel=2, ) @@ -297,6 +332,17 @@ def analysis( eager=eager, backend=backend, ) + elif self.language == "go": + if source_code is not None: + raise CldkInitializationException("source_code mode is not supported for Go; please pass project_path.") + backend = neo4j_config if neo4j_config is not None else CodeAnalyzerConfig(cache_dir=cache_root) + return CLDK.go( + project_path=project_path, + analysis_level=analysis_level, + target_files=target_files, + eager=eager, + backend=backend, + ) else: raise NotImplementedError(f"Analysis support for {self.language} is not implemented yet.") From d396640087459c176f0b2f67cda8a7d377b1c775 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 19:37:32 -0400 Subject: [PATCH 08/21] test(go): mocked, backend-contract, E2E, and live Neo4j-parity tiers The four test tiers for the Go frontend. CI-safe tiers (contract, mocked, models) run with no external resources; the live tiers skip cleanly when the binary / Neo4j env are absent. Verified: 61 passed / 11 skipped with nothing available; 72 passed / 0 skipped with cango + the live cobra graph present. - test_go_backend_contract.py: both backends parameterise the generic ABC (N=Go, P=GO_), every generic + Go-specific abstractmethod is implemented on both, and signatures don't drift. This is the 'GoAnalysisBackend instantiates' gate at the class level. - test_go_models.py: the fixture validates; GoType is one model with a kind field; _NullSafeBase coerces null collections; the Go-native fields exist. - test_go_analysis.py: facade with the cango subprocess mocked (fixture analysis.json written into the cache dir). Asserts the public surface has NO class-named method (SDK1), functions distinct from methods, call graph dangling-free, callers/callees keyed on id, get_source slices, artifact six raise. - test_go_e2e.py: real cango on a throwaway go.mod module; skipif no binary. - test_go_neo4j_live.py: GoNeo4jBackend vs GoCodeanalyzer parity on the same application (type-id sets, function-sig sets, edge counts, module counts, callees incl. prov/weight); skipif no CLDK_TEST_GO_NEO4J_* env. The artifact six raise on the Neo4j backend too. - fixture_analysis.json: a 2 KB real cango v2 payload (one struct + method, one package func, one call edge). Part of #1 (GoAnalysisBackend frontend rung). --- tests/analysis/go/__init__.py | 0 tests/analysis/go/test_go_analysis.py | 114 ++++++++++++++++++ tests/analysis/go/test_go_backend_contract.py | 69 +++++++++++ tests/analysis/go/test_go_e2e.py | 86 +++++++++++++ tests/analysis/go/test_go_models.py | 43 +++++++ tests/analysis/go/test_go_neo4j_live.py | 93 ++++++++++++++ 6 files changed, 405 insertions(+) create mode 100644 tests/analysis/go/__init__.py create mode 100644 tests/analysis/go/test_go_analysis.py create mode 100644 tests/analysis/go/test_go_backend_contract.py create mode 100644 tests/analysis/go/test_go_e2e.py create mode 100644 tests/analysis/go/test_go_models.py create mode 100644 tests/analysis/go/test_go_neo4j_live.py diff --git a/tests/analysis/go/__init__.py b/tests/analysis/go/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py new file mode 100644 index 00000000..48d4965b --- /dev/null +++ b/tests/analysis/go/test_go_analysis.py @@ -0,0 +1,114 @@ +"""Tests for the Go analysis facade with the cango subprocess mocked — no binary, no Neo4j. + +The fixture ``fixture_analysis.json`` is a tiny real cango v2 payload (one module, one struct with +one method, one package-level function, one call edge); the mocked subprocess writes it into the +language-keyed cache directory, exactly as cango would at ``-o``. +""" + +from pathlib import Path +from unittest.mock import MagicMock + +import networkx as nx +import pytest + +from cldk import CLDK +from cldk.analysis import AnalysisLevel +from cldk.analysis.commons.backend_config import CodeAnalyzerConfig +from cldk.models.go import GoType +from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException + +FIXTURE = Path(__file__).parent / "fixture_analysis.json" + + +def _fake_run_writing_output(payload: str): + def _run(cmd, *args, **kwargs): + if "-o" in cmd: + out = Path(cmd[cmd.index("-o") + 1]) + out.mkdir(parents=True, exist_ok=True) + (out / "analysis.json").write_text(payload, encoding="utf-8") + return MagicMock(stdout=payload, returncode=0) + return _run + + +@pytest.fixture +def go_analysis(tmp_path, monkeypatch): + payload = FIXTURE.read_text(encoding="utf-8") + monkeypatch.setenv("CODEANALYZER_GO_BIN", "cango") + monkeypatch.setattr("subprocess.run", _fake_run_writing_output(payload)) + return CLDK.go( + project_path=str(tmp_path), + analysis_level=AnalysisLevel.call_graph, + eager=True, + backend=CodeAnalyzerConfig(cache_dir=str(tmp_path)), + ) + + +# -----[ the public surface is type-centric, never class ]----- +def test_public_surface_has_no_class_named_method(): + """SDK1: Go is class-less. No public facade method mentions 'class'.""" + public = [m for m in dir(CLDK.go) if not m.startswith("_")] # the facade methods on the type + from cldk.analysis.go import GoAnalysis + + public = [m for m in dir(GoAnalysis) if not m.startswith("_")] + assert not [m for m in public if "class" in m.lower()] + for expected in ("get_types", "get_type", "get_functions", "get_methods_of", "get_method", "get_fields"): + assert expected in public + + +# -----[ accessors over the fixture ]----- +def test_symbol_table_not_empty(go_analysis): + assert go_analysis.get_symbol_table() + + +def test_get_types_returns_the_struct(go_analysis): + types = go_analysis.get_types() + assert types, "no types" + assert all(isinstance(t, GoType) for t in types.values()) + assert any(t.kind == "struct" for t in types.values()) + + +def test_get_functions_distinct_from_methods(go_analysis): + funcs = go_analysis.get_functions() + assert funcs, "no package-level functions" + # the package function is not among any type's methods + method_ids = {m.id for tid in go_analysis.get_types() for m in go_analysis.get_methods_of(tid).values()} + assert all(f.id not in method_ids for f in funcs.values()) + + +def test_methods_and_get_method_and_params(go_analysis): + tid = next(iter(go_analysis.get_types())) + methods = go_analysis.get_methods_of(tid) + assert methods, "the struct has no methods" + sig = next(iter(methods)) + assert go_analysis.get_method(tid, sig).signature == sig + # params list is well-formed (may be empty) + assert isinstance(go_analysis.get_method_parameters(tid, sig), list) + + +def test_call_graph_is_dangling_free(go_analysis): + g = go_analysis.get_call_graph() + assert isinstance(g, nx.DiGraph) + for src, dst in g.edges(): + assert "id" in g.nodes[src] and "id" in g.nodes[dst] + + +def test_callers_callees_keyed_on_id(go_analysis): + # the one call edge: its src has a callee, its dst has a caller + edges = go_analysis.get_application_view().call_graph + assert edges + e = edges[0] + assert any(x.dst == e.dst for x in go_analysis.get_callees(e.src)) + assert any(x.src == e.src for x in go_analysis.get_callers(e.dst)) + + +def test_get_source_slices_the_method(go_analysis): + tid = next(iter(go_analysis.get_types())) + sig = next(iter(go_analysis.get_methods_of(tid))) + src = go_analysis.get_source(go_analysis.get_method(tid, sig).id) + assert "func" in src + + +def test_artifact_six_raise_on_local(go_analysis): + for name in ("get_artifacts", "get_dependencies", "get_config_keys", "get_config_uses", "get_unresolved_config_reads"): + with pytest.raises(CodeanalyzerExecutionException): + getattr(go_analysis.backend, name)() diff --git a/tests/analysis/go/test_go_backend_contract.py b/tests/analysis/go/test_go_backend_contract.py new file mode 100644 index 00000000..f3707d69 --- /dev/null +++ b/tests/analysis/go/test_go_backend_contract.py @@ -0,0 +1,69 @@ +"""The Go backend contract: both backends implement the same ABC, that ABC parameterises the +generic cross-language :class:`AnalysisBackend`, and the Go-specific accessors are present on +both. No binary and no live Neo4j needed.""" + +import inspect + +import pytest + +from cldk.analysis.commons.backend import AnalysisBackend +from cldk.analysis.go.backend import GoAnalysisBackend +from cldk.analysis.go.codeanalyzer.codeanalyzer import GoCodeanalyzer +from cldk.analysis.go.neo4j.neo4j_backend import GoNeo4jBackend + +BACKENDS = [GoCodeanalyzer, GoNeo4jBackend] +GENERIC_METHODS = sorted(AnalysisBackend.__abstractmethods__) +#: The accessors the Go contract adds on top of the generic ABC (SDK1/SDK2/SDK3 leaf surface). +GO_METHODS = ["get_functions", "get_callers", "get_callees", "get_source", "get_call_graph_json"] + + +def test_go_contract_parameterises_the_generic_abc(): + assert issubclass(GoAnalysisBackend, AnalysisBackend) + assert GoAnalysisBackend.N == "Go" + assert GoAnalysisBackend.P == "GO_" + + +def test_generic_methods_are_all_abstract_on_the_go_contract(): + """Inheriting the generic ABC must not quietly satisfy any of its methods with a stub.""" + assert set(GENERIC_METHODS) <= GoAnalysisBackend.__abstractmethods__ + + +def test_go_adds_its_own_abstract_methods(): + for name in GO_METHODS: + m = getattr(GoAnalysisBackend, name) + assert getattr(m, "__isabstractmethod__", False), f"{name} should be abstract on the contract" + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_backends_subclass_the_contract(backend): + assert issubclass(backend, GoAnalysisBackend) + + +def test_contract_is_abstract(): + with pytest.raises(TypeError): + GoAnalysisBackend() + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_backends_fully_implement_the_contract(backend): + """No abstract methods left unimplemented — generic and Go-specific alike. This is the gate + 'GoAnalysisBackend instantiates' reduced to the class level.""" + assert backend.__abstractmethods__ == frozenset() + + +@pytest.mark.parametrize("backend", BACKENDS) +@pytest.mark.parametrize("name", GENERIC_METHODS + GO_METHODS) +def test_backend_implements_every_method(backend, name): + impl = getattr(backend, name, None) + assert impl is not None and not getattr(impl, "__isabstractmethod__", False), f"{backend.__name__}.{name} is not implemented" + + +@pytest.mark.parametrize("backend", BACKENDS) +def test_signatures_match_the_contract(backend): + """Every abstract method's parameters and defaults are preserved by each backend. Return + annotations are not compared: the generic ABC's are type variables the Go backends narrow.""" + for name, base_method in inspect.getmembers(GoAnalysisBackend, predicate=inspect.isfunction): + if getattr(base_method, "__isabstractmethod__", False): + base_sig = inspect.signature(base_method).replace(return_annotation=inspect.Signature.empty) + impl_sig = inspect.signature(getattr(backend, name)).replace(return_annotation=inspect.Signature.empty) + assert impl_sig == base_sig, f"{backend.__name__}.{name} signature drifted: {impl_sig} != {base_sig}" diff --git a/tests/analysis/go/test_go_e2e.py b/tests/analysis/go/test_go_e2e.py new file mode 100644 index 00000000..c578da30 --- /dev/null +++ b/tests/analysis/go/test_go_e2e.py @@ -0,0 +1,86 @@ +"""End-to-end: run the real cango binary on a throwaway Go module. Skips cleanly when no binary is +resolvable (``$CODEANALYZER_GO_BIN`` or a ``codeanalyzer-go`` wheel), so CI without the analyzer is +unaffected.""" + +import os +import shlex +import shutil +from pathlib import Path + +import pytest + +from cldk import CLDK +from cldk.analysis import AnalysisLevel +from cldk.analysis.commons.backend_config import CodeAnalyzerConfig + + +def _binary() -> str | None: + env = os.environ.get("CODEANALYZER_GO_BIN") + if env: + exe = shlex.split(env)[0] + return env if Path(exe).exists() or shutil.which(exe) else None + try: + import codeanalyzer_go # type: ignore[import-not-found] + + p = Path(codeanalyzer_go.bin_path()) + return str(p) if p.exists() else None + except (ModuleNotFoundError, FileNotFoundError, AttributeError): + return None + + +pytestmark = pytest.mark.skipif(_binary() is None, reason="no codeanalyzer-go (cango) binary resolvable") + +_MAIN_GO = """package main + +import "fmt" + +type Greeter struct{ name string } + +func (g Greeter) Hello() string { return fmt.Sprintf("hi %s", g.name) } + +func main() { g := Greeter{"x"}; fmt.Println(g.Hello()) } +""" + + +@pytest.fixture(scope="module") +def go_module(tmp_path_factory): + """A minimal real Go module (needs a go.mod — cango uses go/packages).""" + d = tmp_path_factory.mktemp("go-e2e") + (d / "main.go").write_text(_MAIN_GO, encoding="utf-8") + (d / "go.mod").write_text("module goe2e\n\ngo 1.21\n", encoding="utf-8") + return d + + +@pytest.fixture(scope="module") +def analysis(go_module, tmp_path_factory): + cache = tmp_path_factory.mktemp("go-e2e-cache") + return CLDK.go( + project_path=str(go_module), + analysis_level=AnalysisLevel.call_graph, + eager=True, + backend=CodeAnalyzerConfig(cache_dir=str(cache)), + ) + + +def test_symbol_table_not_empty(analysis): + assert analysis.get_symbol_table() + + +def test_types_and_functions(analysis): + types = analysis.get_types() + assert any(t.kind == "struct" for t in types.values()), "expected the Greeter struct" + assert analysis.get_functions(), "expected the package-level main func" + + +def test_methods_and_source(analysis): + tid = next(t_id for t_id, t in analysis.get_types().items() if t.kind == "struct") + methods = analysis.get_methods_of(tid) + assert methods, "the struct has a method" + sig = next(iter(methods)) + assert "func" in analysis.get_source(analysis.get_method(tid, sig).id) + + +def test_call_graph_dangling_free(analysis): + g = analysis.get_call_graph() + for src, dst in g.edges(): + assert "id" in g.nodes[src] and "id" in g.nodes[dst] diff --git a/tests/analysis/go/test_go_models.py b/tests/analysis/go/test_go_models.py new file mode 100644 index 00000000..99b6f53a --- /dev/null +++ b/tests/analysis/go/test_go_models.py @@ -0,0 +1,43 @@ +"""Go model tests — the pydantic mirror parses a real cango v2 payload, and the null-safe base +coerces a JSON ``null`` collection to its empty default (Go's nil-slice idiom).""" + +import json +from pathlib import Path + +from cldk.models.go import GoAnalysis, GoModule, GoType + +FIXTURE = Path(__file__).parent / "fixture_analysis.json" + + +def test_fixture_validates(): + a = GoAnalysis(**json.loads(FIXTURE.read_text(encoding="utf-8"))) + assert a.schema_version == "2.0.0" + assert a.language == "go" + assert a.max_level == 2 + assert a.application.id.startswith("can://go/") + assert a.application.symbol_table + + +def test_gotype_is_a_single_model_with_a_kind_field(): + t = GoType(id="can://go/x/f.go/T", kind="struct") + assert t.kind == "struct" + assert t.base_types == [] and t.callables == {} and t.fields == {} + + +def test_null_safe_base_coerces_null_collections(): + """A JSON ``null`` list/map (Go marshals a nil slice this way) becomes the empty default rather + than raising, honoring the ``= []`` field style via the broadened validator.""" + t = GoType(id="x", kind="interface", base_types=None, callables=None, fields=None) + assert t.base_types == [] and t.callables == {} and t.fields == {} + m = GoModule(id="m", package="p", source="", imports=None, types=None, functions=None) + assert m.imports == [] and m.types == {} and m.functions == {} + + +def test_go_native_fields_present(): + """The Go-specific first-class fields exist with their defaults.""" + from cldk.models.go import GoBodyNode, GoCallable, GoParam + + assert GoParam(name="x").is_variadic is False + assert GoBodyNode(kind="call").is_goroutine is False + c = GoCallable(id="c", signature="s") + assert c.error_channel == [] and c.source_file is None diff --git a/tests/analysis/go/test_go_neo4j_live.py b/tests/analysis/go/test_go_neo4j_live.py new file mode 100644 index 00000000..71bceb4b --- /dev/null +++ b/tests/analysis/go/test_go_neo4j_live.py @@ -0,0 +1,93 @@ +"""Live Neo4j parity: GoNeo4jBackend must answer identically to GoCodeanalyzer on the same +application. Skips unless a Go graph is reachable AND its matching analysis.json is given. + +Set, pointing at a read-only graph a ``cango --emit neo4j`` run populated: + + CLDK_TEST_GO_NEO4J_URI (e.g. bolt://localhost:7687) + CLDK_TEST_GO_NEO4J_USER (default: neo4j) + CLDK_TEST_GO_NEO4J_PASSWORD + CLDK_TEST_GO_NEO4J_APP (the --app-name the graph was loaded with, e.g. go/cobra) + CLDK_TEST_GO_ANALYSIS_JSON (path to the SAME application's analysis.json, for the diff) + +With the first four set but no analysis.json, only the standalone (non-parity) checks run. +""" + +import json +import os +import shutil +from pathlib import Path + +import pytest + +from cldk.analysis.commons.backend_config import Neo4jConnectionConfig +from cldk.analysis.go.codeanalyzer import GoCodeanalyzer +from cldk.analysis.go.neo4j import GoNeo4jBackend + +URI = os.environ.get("CLDK_TEST_GO_NEO4J_URI") +USER = os.environ.get("CLDK_TEST_GO_NEO4J_USER", "neo4j") +PASSWORD = os.environ.get("CLDK_TEST_GO_NEO4J_PASSWORD") +APP = os.environ.get("CLDK_TEST_GO_NEO4J_APP") +ANALYSIS_JSON = os.environ.get("CLDK_TEST_GO_ANALYSIS_JSON") + +pytestmark = pytest.mark.skipif( + not (URI and PASSWORD and APP), + reason="set CLDK_TEST_GO_NEO4J_URI / _PASSWORD / _APP to a read-only codeanalyzer-go graph", +) + + +@pytest.fixture(scope="module") +def neo4j_backend(): + b = GoNeo4jBackend(neo4j_uri=URI, neo4j_username=USER, neo4j_password=PASSWORD, application_name=APP) + yield b + b.close() + + +@pytest.fixture(scope="module") +def local_backend(tmp_path_factory): + if not (ANALYSIS_JSON and Path(ANALYSIS_JSON).exists()): + pytest.skip("set CLDK_TEST_GO_ANALYSIS_JSON to the same application's analysis.json for the parity diff") + cache = tmp_path_factory.mktemp("go-parity") + (cache / "go").mkdir() + shutil.copy(ANALYSIS_JSON, cache / "go" / "analysis.json") + return GoCodeanalyzer(project_dir="/unused", cache_dir=str(cache), analysis_level="call_graph", eager_analysis=False, target_files=None) + + +# -----[ standalone: the graph answers at all ]----- +def test_neo4j_backend_populated(neo4j_backend): + assert neo4j_backend.get_all_classes() or neo4j_backend.get_functions() + assert neo4j_backend.get_call_graph().number_of_edges() >= 0 + + +def test_artifact_six_raise_on_neo4j_too(neo4j_backend): + from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException + + for name in ("get_artifacts", "get_dependencies", "get_config_keys", "get_config_uses", "get_unresolved_config_reads"): + with pytest.raises(CodeanalyzerExecutionException): + getattr(neo4j_backend, name)() + + +# -----[ parity: the two backends agree on the same application ]----- +def test_type_id_sets_match(local_backend, neo4j_backend): + assert set(local_backend.get_all_classes()) == set(neo4j_backend.get_all_classes()) + + +def test_function_signature_sets_match(local_backend, neo4j_backend): + assert set(local_backend.get_functions()) == set(neo4j_backend.get_functions()) + + +def test_call_graph_edge_counts_match(local_backend, neo4j_backend): + assert local_backend.get_call_graph().number_of_edges() == neo4j_backend.get_call_graph().number_of_edges() + + +def test_symbol_table_module_counts_match(local_backend, neo4j_backend): + assert len(local_backend.get_symbol_table()) == len(neo4j_backend.get_symbol_table()) + + +def test_callees_match_on_a_real_callable(local_backend, neo4j_backend): + edges = local_backend.get_application_view().call_graph + if not edges: + pytest.skip("no call edges in this application") + cid = edges[0].src + lo = sorted((e.src, e.dst, tuple(e.prov), e.weight) for e in local_backend.get_callees(cid)) + ne = sorted((e.src, e.dst, tuple(e.prov), e.weight) for e in neo4j_backend.get_callees(cid)) + assert lo == ne From 5382d6c40ccb26c8fbafff9308f6abf189a09fd1 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 20:04:21 -0400 Subject: [PATCH 09/21] docs(go): README Go Quick Start + runnable example A standalone Go Quick Start in the README and a runnable example script, both showing the type-centric, class-less facade (get_types / get_functions / get_methods_of, never get_classes) on both backends. Every snippet verified against real cango output. - README: a "### Go Quick Start" subsection (full type-centric walk: types + receiver methods, package-level functions, get_source, call graph with prov/weight; the read-only Neo4j backend; a cango/$CODEANALYZER_GO_BIN note). Also adds Go to the language picker, the Supported Languages table, and the deprecation note. - examples/go_quickstart.py: a parametrized runner over a given Go module. Local (cango) backend plus an optional read-only Neo4j backend (runs when CLDK_GO_NEO4J_* are set, skips cleanly otherwise). An -a/--level {1,2} option (default 2 = symbol table + call graph; 1 = symbol table only, where it says the call graph is not computed rather than printing a misleading empty one). cango has no L3/L4, so only levels 1 and 2 are offered. Part of #1 (GoAnalysisBackend frontend rung). --- README.md | 63 +++++++++++++- examples/go_quickstart.py | 175 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 236 insertions(+), 2 deletions(-) create mode 100644 examples/go_quickstart.py diff --git a/README.md b/README.md index 44f672c3..8485e87d 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ from cldk import CLDK analysis = CLDK.java(project_path="/path/to/java/project") # analysis = CLDK.python(project_path="/path/to/python/project") # analysis = CLDK.typescript(project_path="/path/to/ts/project") +# analysis = CLDK.go(project_path="/path/to/go/module") # see the Go Quick Start below ``` Walk the symbol table and pull method bodies: @@ -119,17 +120,75 @@ classes = analysis.get_all_classes() > **`project_path` with the Neo4j backend:** it's **optional** — the graph is read over Bolt, so you can omit it as shown above. CLDK validates `project_path` only when you actually pass one (it must exist and be a directory, on every backend); passing `None` skips that check. Supply a real path only if you also need on-disk source access (e.g. file content/snippets) alongside the graph. -> **Deprecation:** the old `CLDK(language="java").analysis(...)` entry point still works as a thin compatibility shim (it emits a `DeprecationWarning`). Prefer the `CLDK.java()` / `CLDK.python()` / `CLDK.typescript()` factory methods. +### Go Quick Start + +Go is CLDK's first **type-centric, class-less** facade. A Go `type` is a `struct` or an +`interface` (never a class), and package-level **functions** are kept distinct from receiver +**methods** — so the Go facade is `get_types` / `get_functions` / `get_methods_of`, not +`get_classes`. Point the facade at a Go **module** (a directory with a `go.mod`): + +```python +from cldk import CLDK +from cldk.analysis import AnalysisLevel + +analysis = CLDK.go( + project_path="/path/to/go/module", + analysis_level=AnalysisLevel.call_graph, # level 1 (symbols) or 2 (+ call graph); Go has no L3/L4 +) + +# Walk the types (structs + interfaces) and their receiver methods. Types, methods and fields are +# addressed by the type's durable `can://` id (a Go type has no unique short name across packages). +for type_id, go_type in analysis.get_types().items(): + print(f"{go_type.kind} {type_id}") + for sig, method in analysis.get_methods_of(type_id).items(): + print(f" method {sig}") + print(analysis.get_source(method.id)) # the method's source, sliced from its module + +# Package-level functions are separate from methods — no "module-as-class" hack: +for sig, fn in analysis.get_functions().items(): + print(f"func {sig}") + +# Who calls whom (full edges with provenance and weight), keyed on the callable id: +call_graph = analysis.get_call_graph() # a networkx.DiGraph +for func_id in analysis.get_functions(): + for edge in analysis.get_callees(func_id): + print(f"{edge.src} -> {edge.dst} ({', '.join(edge.prov)}, weight={edge.weight})") +``` + +Query a pre-populated Go graph **read-only** over Neo4j the same way as the other languages — the +backend is chosen by the config type, and the queries lazily hit the `GO_`-prefixed graph (so it +scales to large enterprise modules without materializing the whole program): + +```python +from cldk import CLDK +from cldk.analysis.commons.backend_config import Neo4jConnectionConfig + +analysis = CLDK.go( + backend=Neo4jConnectionConfig( + uri="bolt://localhost:7687", + application_name="my-go-app", # the --app-name the graph was emitted with + ), +) +types = analysis.get_types() +``` + +> **Go analyzer:** Go is analyzed by the `cango` binary (`codeanalyzer-go`). It emits analysis +> levels 1–2 only; slicing/CFG/CDG/DDG are not produced, so those accessors are absent rather than +> present-and-erroring. Until the analyzer's first release is published, resolve the binary with +> `$CODEANALYZER_GO_BIN` pointing at a local build. + +> **Deprecation:** the old `CLDK(language="java").analysis(...)` entry point still works as a thin compatibility shim (it emits a `DeprecationWarning`). Prefer the `CLDK.java()` / `CLDK.python()` / `CLDK.typescript()` / `CLDK.go()` factory methods. ## Supported Languages & Backends -Each language is analyzed by a dedicated `codeanalyzer-*` engine; CLDK normalizes the result into typed models exposed through the same API. All three also support an optional **read-only Neo4j backend** — pass a `Neo4jConnectionConfig` and the SDK answers the same queries with Cypher over a graph the analyzer populates out of band (`--emit neo4j`). +Each language is analyzed by a dedicated `codeanalyzer-*` engine; CLDK normalizes the result into typed models exposed through the same API. All of them also support an optional **read-only Neo4j backend** — pass a `Neo4jConnectionConfig` and the SDK answers the same queries with Cypher over a graph the analyzer populates out of band (`--emit neo4j`). | Language | Analysis engine | What it provides | | --- | --- | --- | | **Java** | [`codeanalyzer-java`](https://github.com/codellm-devkit/codeanalyzer-java) | WALA + JavaParser. Bytecode-level call graphs, type hierarchies, symbol resolution, CRUD-operation and entry-point detection. Optional read-only **Neo4j** graph backend. | | **Python** | [`codeanalyzer-python`](https://github.com/codellm-devkit/codeanalyzer-python) | Jedi with PyCG-based call graphs. Symbol tables, call graphs, and class/method resolution. Optional read-only **Neo4j** graph backend. | | **TypeScript / JavaScript** | [`codeanalyzer-typescript`](https://github.com/codellm-devkit/codeanalyzer-typescript) | ts-morph with Jelly-based call graphs. Symbols, call graph, types, decorators, and call sites. Optional read-only **Neo4j** graph backend. | +| **Go** | [`codeanalyzer-go`](https://github.com/codellm-devkit/codeanalyzer-go) | `go/packages` + `go/types` resolver call graphs. A **type-centric, class-less** facade: structs/interfaces, package-level functions kept distinct from receiver methods, fields, call graph (levels 1–2). Optional read-only **Neo4j** graph backend. | The backend is selected by the **type** of the `backend=` config you pass to a factory: the in-process analyzer (default) or a `Neo4jConnectionConfig` for the read-only graph backend. diff --git a/examples/go_quickstart.py b/examples/go_quickstart.py new file mode 100644 index 00000000..e87a8079 --- /dev/null +++ b/examples/go_quickstart.py @@ -0,0 +1,175 @@ +#!/usr/bin/env python3 +################################################################################ +# Copyright IBM Corporation 2026 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +"""Runnable Go Quick Start — the README's Go snippet against a real Go module. + +Go is CLDK's first type-centric, class-less facade: a type is a struct or interface, and +package-level functions are kept distinct from receiver methods, so the surface is +``get_types`` / ``get_functions`` / ``get_methods_of`` — never ``get_classes``. + +Usage: + + # local (cango) backend — point at a Go MODULE (a directory with a go.mod): + export CODEANALYZER_GO_BIN=/path/to/cango # until the codeanalyzer-go wheel ships + python examples/go_quickstart.py /path/to/go/module + + # also run the read-only Neo4j backend against a graph a `cango --emit neo4j` run populated: + export CLDK_GO_NEO4J_URI=bolt://localhost:7687 + export CLDK_GO_NEO4J_USER=neo4j # optional, defaults to neo4j + export CLDK_GO_NEO4J_PASSWORD=... + export CLDK_GO_NEO4J_APP=go/my-app # the --app-name the graph was emitted with + python examples/go_quickstart.py /path/to/go/module + +The Neo4j section is skipped (with a note) when those env vars are not set. +""" + +from __future__ import annotations + +import argparse +import os + +from cldk import CLDK +from cldk.analysis import AnalysisLevel +from cldk.analysis.commons.backend_config import Neo4jConnectionConfig + +LIMIT = 10 # keep the console output readable on a large module + +#: The analysis levels cango produces — 1 (symbol table) and 2 (symbol table + call graph) only. +#: Go has no L3/L4 (no CFG/CDG/DDG), so the other two AnalysisLevel members are intentionally not +#: offered here. Mapped from the CLI's integer choice to the enum. +_LEVELS = {1: AnalysisLevel.symbol_table, 2: AnalysisLevel.call_graph} + + +def _short(node_id: str) -> str: + """The last path segment of a can:// id, for readable printing.""" + return node_id.rstrip("/").split("/")[-1] + + +def run_local(project_path: str, level: AnalysisLevel) -> None: + """The in-process backend: run cango over the module and query the parsed analysis.json.""" + print("=" * 72) + print(f"LOCAL backend (cango) — {project_path} [level: {level.value}]") + print("=" * 72) + + analysis = CLDK.go(project_path=project_path, analysis_level=level) + + types = analysis.get_types() + functions = analysis.get_functions() + print(f"\n{len(types)} type(s), {len(functions)} package-level function(s)\n") + + # Walk the types (structs + interfaces) and their receiver methods, addressed by the type id. + for type_id, go_type in list(types.items())[:LIMIT]: + print(f"{go_type.kind} {_short(type_id)}") + for sig, method in analysis.get_methods_of(type_id).items(): + params = ", ".join(f"{p.name} {p.type}" for p in method.parameters) + print(f" method {_short(sig)}({params}) -> {method.return_type or ''}") + if len(types) > LIMIT: + print(f" ... and {len(types) - LIMIT} more type(s)") + + # Package-level functions are separate from methods — no "module-as-class" hack. + print() + for sig in list(functions)[:LIMIT]: + print(f"func {_short(sig)}") + if len(functions) > LIMIT: + print(f"... and {len(functions) - LIMIT} more function(s)") + + # Source of one callable, sliced from its module's source by the node's span. + a_callable = next(iter(functions.values()), None) or next( + (m for tid in types for m in analysis.get_methods_of(tid).values()), None + ) + if a_callable is not None: + print(f"\n--- source of {_short(a_callable.signature)} ---") + print(analysis.get_source(a_callable.id)) + + # Call graph: who calls whom, with provenance and weight, keyed on the callable id. Only + # populated at level 2 — at level 1 cango emits the symbol table alone, so the graph is empty + # by construction, not because the project has no calls. + if level is AnalysisLevel.symbol_table: + print("\ncall graph: not computed at level 1 (symbol_table); re-run with --level 2") + return + cg = analysis.get_call_graph() + print(f"\ncall graph: {cg.number_of_nodes()} node(s), {cg.number_of_edges()} edge(s)") + shown = 0 + for func_id in functions: + for edge in analysis.get_callees(func_id): + print(f" {_short(edge.src)} -> {_short(edge.dst)} ({', '.join(edge.prov)}, weight={edge.weight})") + shown += 1 + if shown >= LIMIT: + break + if shown >= LIMIT: + break + + +def run_neo4j() -> bool: + """The read-only Neo4j backend, if the env is set. Returns True when it ran.""" + uri = os.environ.get("CLDK_GO_NEO4J_URI") + password = os.environ.get("CLDK_GO_NEO4J_PASSWORD") + app = os.environ.get("CLDK_GO_NEO4J_APP") + if not (uri and password and app): + print("\n(Neo4j backend skipped — set CLDK_GO_NEO4J_URI / _PASSWORD / _APP to run it.)") + return False + + print("\n" + "=" * 72) + print(f"NEO4J backend (read-only) — {uri}, app {app}") + print("=" * 72) + + analysis = CLDK.go( + backend=Neo4jConnectionConfig( + uri=uri, + username=os.environ.get("CLDK_GO_NEO4J_USER", "neo4j"), + password=password, + application_name=app, # the graph is populated out of band by `cango --emit neo4j` + ), + ) + types = analysis.get_types() + functions = analysis.get_functions() + cg = analysis.get_call_graph() + print(f"\n{len(types)} type(s), {len(functions)} function(s), {cg.number_of_edges()} call edge(s)") + for type_id in list(types)[:LIMIT]: + print(f" type {_short(type_id)}: {len(analysis.get_methods_of(type_id))} method(s)") + # The backend owns a driver; close it when done. + close = getattr(analysis.backend, "close", None) + if close: + close() + return True + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Run the Go Quick Start against a Go module.", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("project_path", help="path to a Go module (a directory containing go.mod)") + parser.add_argument( + "-a", + "--level", + type=int, + choices=(1, 2), + default=2, + help="analysis level for the local backend: 1 = symbol table, 2 = symbol table + call graph " + "(default). cango produces only 1 and 2; Go has no L3/L4. The Neo4j graph is always " + "full-depth, so this flag affects the local run only.", + ) + args = parser.parse_args() + + run_local(args.project_path, _LEVELS[args.level]) + run_neo4j() + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 069bf72bc99022e61e35737e0321af2ad05f242b Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 20:15:59 -0400 Subject: [PATCH 10/21] fix(go): map analysis level via analyzer_level (was silently defaulting to 1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GoCodeanalyzer mapped the level with a hand-rolled dict keyed on the string "call_graph", but the facade passes the AnalysisLevel.call_graph ENUM, whose value is "call graph" (a space, not an underscore). The lookup missed and fell back to the default 1, so `-a 1` always reached cango regardless of the requested level — every project came back with no call graph (0 edges), even at analysis_level=call_graph. Replace the dict with the SDK's shared analyzer_level() helper (the same one the TS backend uses), which accepts the enum / name / value and RAISES on an unknown level instead of defaulting to 1 — its docstring exists precisely to close "the level that silently becomes 1" defect. _argv still caps at 2 (cango has no L3/L4). The bug hid because the test fixture has no cross-function calls (0 edges at any level looked correct); a real app (dae: 3241 edges) exposed it. Add a regression test asserting the requested level reaches cango as the right `-a` integer. Part of #1 (GoAnalysisBackend frontend rung). --- cldk/analysis/go/codeanalyzer/codeanalyzer.py | 11 ++++---- tests/analysis/go/test_go_analysis.py | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/cldk/analysis/go/codeanalyzer/codeanalyzer.py b/cldk/analysis/go/codeanalyzer/codeanalyzer.py index 30fe67ac..f3cd916a 100644 --- a/cldk/analysis/go/codeanalyzer/codeanalyzer.py +++ b/cldk/analysis/go/codeanalyzer/codeanalyzer.py @@ -35,6 +35,7 @@ import networkx as nx from cldk.analysis.commons.backend_config import cache_subdir +from cldk.analysis.commons.levels import analyzer_level from cldk.analysis.go.backend import ARTIFACT_LAYER_UNAVAILABLE, GoAnalysisBackend from cldk.models.go import ( GoAnalysis, @@ -49,11 +50,6 @@ from cldk.models.python import PyArtifact, PyConfigKey, PyConfigRead, PyConfigUseEdge, PyDependency from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException -#: cango caps at level 2 (symbol table + resolver call graph); it has no L3/L4. The SDK's -#: AnalysisLevel enum carries string values, so map to the integer -a flag explicitly. -_LEVEL_FLAG = {"symbol_table": 1, "call_graph": 2} - - class GoCodeanalyzer(GoAnalysisBackend): """Run ``cango`` and answer queries over the parsed ``analysis.json``. @@ -80,7 +76,10 @@ def __init__( self.analysis_level = analysis_level self.eager_analysis = eager_analysis self.target_files = target_files - self.analysis: GoAnalysis = self._init_codeanalyzer(_LEVEL_FLAG.get(analysis_level, 1)) + # analyzer_level maps the AnalysisLevel enum/name/value to its integer, raising on an + # unknown level rather than silently defaulting to 1 (the bug a hand-rolled dict caused). + # cango has no L3/L4, so _argv caps the result at 2. + self.analysis: GoAnalysis = self._init_codeanalyzer(analyzer_level(analysis_level)) self.application: GoApplication = self.analysis.application self.application_name: str = self.application.id.removeprefix("can://") self._call_graph: nx.DiGraph | None = None diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 48d4965b..7c27bfd7 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -43,6 +43,32 @@ def go_analysis(tmp_path, monkeypatch): ) +# -----[ regression: the requested analysis level actually reaches cango ]----- +@pytest.mark.parametrize( + "level, expected_a", + [(AnalysisLevel.symbol_table, "1"), (AnalysisLevel.call_graph, "2")], +) +def test_requested_level_is_passed_to_cango(level, expected_a, tmp_path, monkeypatch): + """A hand-rolled name->int dict silently defaulted every level to 1 (the enum's value is + 'call graph', not 'call_graph'), so `-a 2` never reached cango and no project ever got a call + graph. Assert the integer `-a` flag matches the requested level.""" + captured = {} + + def _capture(cmd, *args, **kwargs): + if "-a" in cmd: + captured["a"] = cmd[cmd.index("-a") + 1] + out = Path(cmd[cmd.index("-o") + 1]) if "-o" in cmd else None + if out: + out.mkdir(parents=True, exist_ok=True) + (out / "analysis.json").write_text(FIXTURE.read_text(encoding="utf-8"), encoding="utf-8") + return MagicMock(stdout=FIXTURE.read_text(encoding="utf-8"), returncode=0) + + monkeypatch.setenv("CODEANALYZER_GO_BIN", "cango") + monkeypatch.setattr("subprocess.run", _capture) + CLDK.go(project_path=str(tmp_path), analysis_level=level, eager=True, backend=CodeAnalyzerConfig(cache_dir=str(tmp_path))) + assert captured.get("a") == expected_a + + # -----[ the public surface is type-centric, never class ]----- def test_public_surface_has_no_class_named_method(): """SDK1: Go is class-less. No public facade method mentions 'class'.""" From dd0b552a7b2dde8f661d5874ddd6d47b035e6fb9 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 20:34:52 -0400 Subject: [PATCH 11/21] docs(go): add --eager to the quickstart example Give go_quickstart.py an -e/--eager flag that forces a fresh cango run, ignoring any cached analysis.json under /.codeanalyzer/go. Needed because the local backend reuses a cached analysis by existence, not by level: a cache written by an earlier shallower run (e.g. `-a 1`) is served for a deeper request (`-a 2`), so the call graph comes back empty. --eager is the escape hatch; the underlying level-blind cache reuse in GoCodeanalyzer (and the TS backend it mirrors) is a separate, still-open issue. Part of #1 (GoAnalysisBackend frontend rung). --- examples/go_quickstart.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/go_quickstart.py b/examples/go_quickstart.py index e87a8079..c40606c0 100644 --- a/examples/go_quickstart.py +++ b/examples/go_quickstart.py @@ -59,13 +59,13 @@ def _short(node_id: str) -> str: return node_id.rstrip("/").split("/")[-1] -def run_local(project_path: str, level: AnalysisLevel) -> None: +def run_local(project_path: str, level: AnalysisLevel, eager: bool) -> None: """The in-process backend: run cango over the module and query the parsed analysis.json.""" print("=" * 72) - print(f"LOCAL backend (cango) — {project_path} [level: {level.value}]") + print(f"LOCAL backend (cango) — {project_path} [level: {level.value}{', eager' if eager else ''}]") print("=" * 72) - analysis = CLDK.go(project_path=project_path, analysis_level=level) + analysis = CLDK.go(project_path=project_path, analysis_level=level, eager=eager) types = analysis.get_types() functions = analysis.get_functions() @@ -164,9 +164,18 @@ def main() -> int: "(default). cango produces only 1 and 2; Go has no L3/L4. The Neo4j graph is always " "full-depth, so this flag affects the local run only.", ) + parser.add_argument( + "-e", + "--eager", + action="store_true", + help="force a fresh cango run, ignoring any cached analysis.json under " + "/.codeanalyzer/go. Use this if a cache from an earlier, shallower level (e.g. a " + "prior -a 1 run) is being reused for a deeper request — the cache is reused by existence, " + "not by level.", + ) args = parser.parse_args() - run_local(args.project_path, _LEVELS[args.level]) + run_local(args.project_path, _LEVELS[args.level], args.eager) run_neo4j() return 0 From 8e9c19904e8914d30bdb17f4b947d63fc80612db Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 4 Oct 2026 20:38:14 -0400 Subject: [PATCH 12/21] fix(go): re-run cango when the cached analysis is shallower than requested MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GoCodeanalyzer decided whether to reuse a cached analysis.json by whether the file EXISTED, never by its level. So a cache written by an earlier shallower run (e.g. `-a 1`) was served for a deeper request (`-a 2`), and the call graph came back empty — the 0-edges symptom seen on a real app (dae) whenever a level-1 cache was present. - needs_run now also re-runs when the cached max_level is below the requested level. A cache at or above the request is reused as-is: the schema is additive (L1 subset of L2), so a deeper cache already contains everything a shallower request needs (and re-running would waste work). A missing/unreadable/malformed cache re-runs rather than trusting it. The request is compared capped at 2 (cango's ceiling), so a request above 2 never re-runs against a level-2 cache. - Regression tests: a shallow cache is NOT reused for a deeper request (re-runs), and a deeper cache IS reused for a shallower one (no re-run). Both count cango invocations via a level-aware mock — no binary needed. Distinct from the earlier level->-a mapping fix (069bf72); this is cache reuse. The TS backend shares the same existence-only check and is still affected. Part of #1 (GoAnalysisBackend frontend rung). --- cldk/analysis/go/codeanalyzer/codeanalyzer.py | 25 +++++++-- tests/analysis/go/test_go_analysis.py | 54 +++++++++++++++++++ 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/cldk/analysis/go/codeanalyzer/codeanalyzer.py b/cldk/analysis/go/codeanalyzer/codeanalyzer.py index f3cd916a..fd1b330b 100644 --- a/cldk/analysis/go/codeanalyzer/codeanalyzer.py +++ b/cldk/analysis/go/codeanalyzer/codeanalyzer.py @@ -25,6 +25,7 @@ from __future__ import annotations +import json import os import shlex import subprocess @@ -134,12 +135,25 @@ def _argv(self, analysis_level: int, output_dir: Path | None) -> List[str]: args += ["-t", str(tf).strip()] return args + @staticmethod + def _cached_level(analysis_json_file: Path) -> int | None: + """The ``max_level`` of a cached ``analysis.json``, or ``None`` if it is absent, unreadable, + or malformed — in which case the caller re-runs rather than trusting it.""" + try: + data = json.loads(analysis_json_file.read_text(encoding="utf-8")) + level = data.get("max_level") + return int(level) if isinstance(level, int) else None + except (OSError, ValueError, json.JSONDecodeError): + return None + def _init_codeanalyzer(self, analysis_level: int) -> GoAnalysis: """Run cango and return the validated v2 envelope. With no cache directory the output is read from the subprocess stdout pipe; with one, the - analysis.json is persisted under ``/go`` and reused unless ``eager_analysis`` or - ``target_files`` force a re-run. + analysis.json is persisted under ``/go`` and reused unless ``eager_analysis``, + ``target_files``, or a cache **shallower than the requested level** force a re-run. A cache + at or above the requested level is reused as-is: the schema is additive (``L1 ⊆ L2``), so a + deeper cache already contains everything a shallower request needs. """ output_dir = cache_subdir(self.cache_dir, self.project_dir, "go") if output_dir is None: @@ -152,7 +166,12 @@ def _init_codeanalyzer(self, analysis_level: int) -> GoAnalysis: output_dir.mkdir(parents=True, exist_ok=True) analysis_json_file = output_dir / "analysis.json" - needs_run = self.eager_analysis or not analysis_json_file.exists() or bool(self.target_files) + # cango caps at 2, so a request above 2 is satisfied by a level-2 cache (never re-runs for a + # level it cannot produce). Compare the requested level, capped, against the cached level. + requested = min(analysis_level, 2) + cached_level = self._cached_level(analysis_json_file) if analysis_json_file.exists() else None + stale = cached_level is None or cached_level < requested + needs_run = self.eager_analysis or bool(self.target_files) or stale if needs_run: args = self._argv(analysis_level, output_dir) try: diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 7c27bfd7..4deb22c3 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -5,6 +5,7 @@ language-keyed cache directory, exactly as cango would at ``-o``. """ +import json from pathlib import Path from unittest.mock import MagicMock @@ -43,6 +44,59 @@ def go_analysis(tmp_path, monkeypatch): ) +# -----[ regression: a cache shallower than the request is not reused ]----- +def _level_aware_run(call_count): + """A subprocess.run mock that writes an analysis.json whose max_level matches the `-a` flag it + was given, and counts how many times cango was invoked.""" + base = json.loads(FIXTURE.read_text(encoding="utf-8")) + + def _run(cmd, *args, **kwargs): + call_count.append(1) + a = int(cmd[cmd.index("-a") + 1]) if "-a" in cmd else 2 + payload = dict(base) + payload["max_level"] = a + if a < 2: # a level-1 payload carries no call graph + payload["application"] = {**base["application"], "call_graph": []} + text = json.dumps(payload) + if "-o" in cmd: + out = Path(cmd[cmd.index("-o") + 1]) + out.mkdir(parents=True, exist_ok=True) + (out / "analysis.json").write_text(text, encoding="utf-8") + return MagicMock(stdout=text, returncode=0) + + return _run + + +def test_shallow_cache_is_not_reused_for_a_deeper_request(tmp_path, monkeypatch): + """A level-1 cache must NOT satisfy a level-2 request: the backend re-runs cango. (The reuse + check used to test only file existence, serving the stale shallower result.)""" + calls = [] + monkeypatch.setenv("CODEANALYZER_GO_BIN", "cango") + monkeypatch.setattr("subprocess.run", _level_aware_run(calls)) + + # First: a level-1 run writes a level-1 cache. + CLDK.go(project_path=str(tmp_path), analysis_level=AnalysisLevel.symbol_table, backend=CodeAnalyzerConfig(cache_dir=str(tmp_path))) + assert len(calls) == 1 + + # Then: a level-2 request over that level-1 cache must re-run (not reuse). + a2 = CLDK.go(project_path=str(tmp_path), analysis_level=AnalysisLevel.call_graph, backend=CodeAnalyzerConfig(cache_dir=str(tmp_path))) + assert len(calls) == 2, "level-2 request should have re-run cango over the stale level-1 cache" + assert a2.backend.analysis.max_level == 2 + + +def test_deeper_cache_is_reused_for_a_shallower_request(tmp_path, monkeypatch): + """A level-2 cache satisfies a level-1 request without re-running — the schema is additive + (L1 subset of L2), so the deeper cache already contains everything.""" + calls = [] + monkeypatch.setenv("CODEANALYZER_GO_BIN", "cango") + monkeypatch.setattr("subprocess.run", _level_aware_run(calls)) + + CLDK.go(project_path=str(tmp_path), analysis_level=AnalysisLevel.call_graph, backend=CodeAnalyzerConfig(cache_dir=str(tmp_path))) + assert len(calls) == 1 + CLDK.go(project_path=str(tmp_path), analysis_level=AnalysisLevel.symbol_table, backend=CodeAnalyzerConfig(cache_dir=str(tmp_path))) + assert len(calls) == 1, "level-1 request should reuse the deeper level-2 cache, not re-run" + + # -----[ regression: the requested analysis level actually reaches cango ]----- @pytest.mark.parametrize( "level, expected_a", From 4acdf29eee788c5166102efd773696caaa35c0bd Mon Sep 17 00:00:00 2001 From: lambertpw Date: Fri, 23 Oct 2026 23:57:25 -0400 Subject: [PATCH 13/21] Removed --analysis-schema option --- cldk/analysis/go/codeanalyzer/codeanalyzer.py | 10 +-- examples/go_quickstart.py | 73 +++++++++++++++++-- pyproject.toml | 2 + 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/cldk/analysis/go/codeanalyzer/codeanalyzer.py b/cldk/analysis/go/codeanalyzer/codeanalyzer.py index fd1b330b..fd14e975 100644 --- a/cldk/analysis/go/codeanalyzer/codeanalyzer.py +++ b/cldk/analysis/go/codeanalyzer/codeanalyzer.py @@ -19,8 +19,7 @@ :class:`~cldk.analysis.go.backend.GoAnalysisBackend` method from the in-memory tree. The binary ships (post-release) with the ``codeanalyzer-go`` PyPI dependency; ``$CODEANALYZER_GO_BIN`` -is the out-of-band override used today, before the wheel is pinned. ``--analysis-schema 2`` is -**mandatory** — ``cango`` defaults to the legacy v1 shape, which the v2 models reject. +is the out-of-band override used today, before the wheel is pinned. """ from __future__ import annotations @@ -110,10 +109,9 @@ def _get_codeanalyzer_exec(self) -> List[str]: def _argv(self, analysis_level: int, output_dir: Path | None) -> List[str]: """The cango command line: ``-i --app-name -a <1|2> - --analysis-schema 2 [-o --cache-dir ] --skip-tests [--eager] [-t ]...``. + [-o --cache-dir ] --skip-tests [--eager] [-t ]...``. - ``--analysis-schema 2`` is mandatory: cango defaults to the legacy v1 shape, which the v2 - models reject. The level is capped at 2 — cango produces no L3/L4. + . The level is capped at 2 — cango produces no L3/L4. """ project = Path(self.project_dir) args = self._get_codeanalyzer_exec() + [ @@ -123,8 +121,6 @@ def _argv(self, analysis_level: int, output_dir: Path | None) -> List[str]: project.name, "-a", str(min(analysis_level, 2)), - "--analysis-schema", - "2", ] if output_dir is not None: args += ["-o", str(output_dir), "--cache-dir", str(output_dir)] diff --git a/examples/go_quickstart.py b/examples/go_quickstart.py index c40606c0..b892c303 100644 --- a/examples/go_quickstart.py +++ b/examples/go_quickstart.py @@ -21,11 +21,26 @@ package-level functions are kept distinct from receiver methods, so the surface is ``get_types`` / ``get_functions`` / ``get_methods_of`` — never ``get_classes``. +Both `--backend` choices below run the same in-process `GoCodeanalyzer` over `CLDK.go(...)`; +they differ only in *where the cango binary comes from*, which is the one axis +`GoCodeanalyzer._get_codeanalyzer_exec` chooses on: + +* ``cldk`` — the ``cango`` bundled in the pinned ``codeanalyzer-go`` wheel (resolved by + ``codeanalyzer_go.bin_path()``). Nothing to install or point at; this is the default. +* ``local`` — a hand-built ``cango`` named by ``$CODEANALYZER_GO_BIN``. That env var *shadows* + the wheel when set, so the ``cldk`` run unsets it for the duration to exercise the wheel honestly. + Usage: - # local (cango) backend — point at a Go MODULE (a directory with a go.mod): - export CODEANALYZER_GO_BIN=/path/to/cango # until the codeanalyzer-go wheel ships - python examples/go_quickstart.py /path/to/go/module + # cldk backend — the bundled wheel's cango; point at a Go MODULE (a directory with a go.mod): + python examples/go_quickstart.py /path/to/go/module # --backend cldk (default) + + # local backend — your own cango build (env var shadows the wheel while set): + export CODEANALYZER_GO_BIN=/path/to/cango + python examples/go_quickstart.py --backend local /path/to/go/module + + # run both, back to back: + python examples/go_quickstart.py --backend both /path/to/go/module # also run the read-only Neo4j backend against a graph a `cango --emit neo4j` run populated: export CLDK_GO_NEO4J_URI=bolt://localhost:7687 @@ -59,10 +74,15 @@ def _short(node_id: str) -> str: return node_id.rstrip("/").split("/")[-1] -def run_local(project_path: str, level: AnalysisLevel, eager: bool) -> None: - """The in-process backend: run cango over the module and query the parsed analysis.json.""" +def _run(project_path: str, level: AnalysisLevel, eager: bool, *, banner: str) -> None: + """The in-process backend: run cango over the module and query the parsed analysis.json. + + The caller has already selected the cango binary source (wheel vs. ``$CODEANALYZER_GO_BIN``) + before entering here — this body is identical whichever one resolved, because both land on the + same ``GoCodeanalyzer``. + """ print("=" * 72) - print(f"LOCAL backend (cango) — {project_path} [level: {level.value}{', eager' if eager else ''}]") + print(f"{banner} — {project_path} [level: {level.value}{', eager' if eager else ''}]") print("=" * 72) analysis = CLDK.go(project_path=project_path, analysis_level=level, eager=eager) @@ -114,6 +134,32 @@ def run_local(project_path: str, level: AnalysisLevel, eager: bool) -> None: break +def run_cldk(project_path: str, level: AnalysisLevel, eager: bool) -> None: + """Analyze on the fly using the ``cango`` bundled in the pinned ``codeanalyzer-go`` wheel. + + ``$CODEANALYZER_GO_BIN`` shadows the wheel in ``_get_codeanalyzer_exec`` whenever it is set, so + we pop it for the duration of this call — otherwise a stray env var would silently make the + "cldk" run actually use someone's hand-built binary. It is restored on the way out. + """ + saved = os.environ.pop("CODEANALYZER_GO_BIN", None) + try: + _run(project_path, level, eager, banner="CLDK backend (bundled codeanalyzer-go wheel)") + finally: + if saved is not None: + os.environ["CODEANALYZER_GO_BIN"] = saved + + +def run_local(project_path: str, level: AnalysisLevel, eager: bool) -> None: + """Analyze with a hand-built ``cango`` named by ``$CODEANALYZER_GO_BIN`` (set it first).""" + if not os.environ.get("CODEANALYZER_GO_BIN"): + print( + "\n(--backend local needs $CODEANALYZER_GO_BIN pointing at a cango build; " + "unset, so this would fall back to the wheel. Use --backend cldk, or set the env var.)" + ) + return + _run(project_path, level, eager, banner="LOCAL backend ($CODEANALYZER_GO_BIN cango)") + + def run_neo4j() -> bool: """The read-only Neo4j backend, if the env is set. Returns True when it ran.""" uri = os.environ.get("CLDK_GO_NEO4J_URI") @@ -154,6 +200,15 @@ def main() -> int: formatter_class=argparse.RawDescriptionHelpFormatter, ) parser.add_argument("project_path", help="path to a Go module (a directory containing go.mod)") + parser.add_argument( + "-b", + "--backend", + choices=("cldk", "local", "both"), + default="cldk", + help="which cango to analyze with: cldk = the bundled codeanalyzer-go wheel (default); " + "local = your own build named by $CODEANALYZER_GO_BIN; both = run them in turn. Both " + "choices use the same in-process GoCodeanalyzer — only the binary source differs.", + ) parser.add_argument( "-a", "--level", @@ -175,7 +230,11 @@ def main() -> int: ) args = parser.parse_args() - run_local(args.project_path, _LEVELS[args.level], args.eager) + level = _LEVELS[args.level] + if args.backend in ("cldk", "both"): + run_cldk(args.project_path, level, args.eager) + if args.backend in ("local", "both"): + run_local(args.project_path, level, args.eager) run_neo4j() return 0 diff --git a/pyproject.toml b/pyproject.toml index 45b2a114..80a6b436 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ dependencies = [ "tree-sitter-javascript==0.23.1", "codeanalyzer-python==1.5.3", "codeanalyzer-typescript==1.6.0", + "codeanalyzer-go==0.1.0rc1", ] [project.optional-dependencies] @@ -89,6 +90,7 @@ include = [ codeanalyzer-java = "3.3.3" codeanalyzer-python = "1.5.3" codeanalyzer-typescript = "1.6.0" +codeanalyzer-go = "0.1.0rc1" ######################################## # Tool configurations From ea799736198545b45d2ef0f6f719c8b14c7ea991 Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sat, 24 Oct 2026 16:47:58 -0400 Subject: [PATCH 14/21] test(go): leverage the real litestream corpus; move model tests to tests/models/go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add comprehensive Go unit tests driven by the committed real analysis (tests/resources/go/analysis.json — the can://go/litestream project, 55 modules, 959 edges), replacing one-edge-toy coverage: - tests/models/go/: model tests moved here to match the sibling tests/models/ layout; parse the real corpus (envelope, a real ReplicaClient struct round-trip) plus inline shape/nil-slice checks. The redundant toy-fixture validation is dropped (no model test keeps a local toy JSON, per convention). - test_go_analysis.py: a litestream_facade fixture runs the whole accessor surface over the real corpus — get_callers/get_callees/get_source against measured real ids, 959-edge dangling-free call graph. The toy fixture is kept only for the level/cache regression tests that mutate max_level. - test_go_e2e.py: a live path that unzips litestream.zip and runs the real cango binary on the full app (skips without a binary). - tests/resources/go/: the committed analysis.json, litestream.zip source, and a README rewritten to match the single-L2-file reality. 79 passed, 7 skipped (the live Neo4j tier). --- tests/analysis/go/test_go_analysis.py | 87 +++++++++++++++++- tests/analysis/go/test_go_e2e.py | 40 ++++++++ tests/analysis/go/test_go_models.py | 43 --------- tests/models/go/__init__.py | 0 tests/models/go/test_go_models.py | 84 +++++++++++++++++ tests/resources/go/analysis.json | 1 + tests/resources/go/analysis_json/v2/README.md | 30 ++++++ tests/resources/go/litestream.zip | Bin 0 -> 2072430 bytes 8 files changed, 239 insertions(+), 46 deletions(-) delete mode 100644 tests/analysis/go/test_go_models.py create mode 100644 tests/models/go/__init__.py create mode 100644 tests/models/go/test_go_models.py create mode 100644 tests/resources/go/analysis.json create mode 100644 tests/resources/go/analysis_json/v2/README.md create mode 100644 tests/resources/go/litestream.zip diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 4deb22c3..8fb5ac5c 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -1,8 +1,14 @@ """Tests for the Go analysis facade with the cango subprocess mocked — no binary, no Neo4j. -The fixture ``fixture_analysis.json`` is a tiny real cango v2 payload (one module, one struct with -one method, one package-level function, one call edge); the mocked subprocess writes it into the -language-keyed cache directory, exactly as cango would at ``-o``. +Two corpora, both driven through the mocked subprocess (which writes the payload into the cache dir +exactly as cango would at ``-o``): + +* ``fixture_analysis.json`` — a tiny hand-built v2 payload (one module/struct/method/func/edge). The + deterministic level/cache/capture regression tests use it because they mutate ``max_level`` and the + call graph to simulate L1-vs-L2 generations. +* ``tests/resources/go/analysis.json`` — the committed real ``can://go/litestream`` corpus (55 + modules, 959 edges). The ``litestream_facade`` fixture runs the whole accessor surface over it, so + callers/callees/source are proven against genuine cango output, not a one-edge toy. """ import json @@ -19,6 +25,15 @@ from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException FIXTURE = Path(__file__).parent / "fixture_analysis.json" +#: the committed real corpus, via the parents[2]/"resources" convention the TS/Java tests use +GO_ANALYSIS = Path(__file__).resolve().parents[2] / "resources" / "go" / "analysis.json" + +# real, stable ids from the litestream corpus (abs/replica_client.go) +LS_TYPE_ID = "can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient" +LS_METHOD_ID = f"{LS_TYPE_ID}/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll" +LS_FUNC_ID = "can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient" +LS_FUNC_SIG = "github.com/benbjohnson/litestream/abs.NewReplicaClient" +LS_FUNC_CALLER_ID = "can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClientFromURL" def _fake_run_writing_output(payload: str): @@ -192,3 +207,69 @@ def test_artifact_six_raise_on_local(go_analysis): for name in ("get_artifacts", "get_dependencies", "get_config_keys", "get_config_uses", "get_unresolved_config_reads"): with pytest.raises(CodeanalyzerExecutionException): getattr(go_analysis.backend, name)() + + +# -----[ the whole accessor surface over the real litestream corpus ]----- +@pytest.fixture(scope="module") +def litestream_facade(tmp_path_factory): + """The facade over the committed real corpus, through the same mocked subprocess as + ``go_analysis`` — no binary, but 55 modules and 959 edges instead of a one-edge toy.""" + import subprocess + from unittest.mock import patch + + payload = GO_ANALYSIS.read_text(encoding="utf-8") + proj = tmp_path_factory.mktemp("litestream-facade") + with patch.dict("os.environ", {"CODEANALYZER_GO_BIN": "cango"}), patch.object( + subprocess, "run", _fake_run_writing_output(payload) + ): + yield CLDK.go( + project_path=str(proj), + analysis_level=AnalysisLevel.call_graph, + eager=True, + backend=CodeAnalyzerConfig(cache_dir=str(proj)), + ) + + +def test_real_corpus_scale(litestream_facade): + assert len(litestream_facade.get_symbol_table()) == 55 + assert len(litestream_facade.get_application_view().call_graph) == 959 + + +def test_real_corpus_function_accessor(litestream_facade): + funcs = litestream_facade.get_functions() + assert LS_FUNC_SIG in funcs + assert funcs[LS_FUNC_SIG].id == LS_FUNC_ID + + +def test_real_corpus_type_and_method(litestream_facade): + ty = litestream_facade.get_type(LS_TYPE_ID) + assert ty is not None and ty.kind == "struct" + methods = litestream_facade.get_methods_of(LS_TYPE_ID) + assert any(m.id == LS_METHOD_ID for m in methods.values()) + assert any(f.type == "string" for f in litestream_facade.get_fields(LS_TYPE_ID)) + + +def test_real_corpus_callees_of_delete_all(litestream_facade): + """DeleteAll calls exactly two callees in this corpus and is called by none (measured).""" + callees = litestream_facade.get_callees(LS_METHOD_ID) + assert len(callees) == 2 + assert all(e.src == LS_METHOD_ID for e in callees) + assert litestream_facade.get_callers(LS_METHOD_ID) == [] + + +def test_real_corpus_callers_of_constructor(litestream_facade): + callers = litestream_facade.get_callers(LS_FUNC_ID) + assert LS_FUNC_CALLER_ID in {e.src for e in callers} + + +def test_real_corpus_source_slices_the_method(litestream_facade): + src = litestream_facade.get_source(LS_METHOD_ID) + assert src.startswith("func") and "DeleteAll" in src + + +def test_real_corpus_call_graph_dangling_free(litestream_facade): + """Every one of the 959 edges lands on a node that carries its id (no dangling endpoints).""" + g = litestream_facade.get_call_graph() + assert g.number_of_edges() == 959 + for src, dst in g.edges(): + assert "id" in g.nodes[src] and "id" in g.nodes[dst] diff --git a/tests/analysis/go/test_go_e2e.py b/tests/analysis/go/test_go_e2e.py index c578da30..68cffc4b 100644 --- a/tests/analysis/go/test_go_e2e.py +++ b/tests/analysis/go/test_go_e2e.py @@ -84,3 +84,43 @@ def test_call_graph_dangling_free(analysis): g = analysis.get_call_graph() for src, dst in g.edges(): assert "id" in g.nodes[src] and "id" in g.nodes[dst] + + +# -----[ live run on the committed real application (litestream.zip) ]----- +import zipfile # noqa: E402 + +_LITESTREAM_ZIP = Path(__file__).resolve().parents[2] / "resources" / "go" / "litestream.zip" + + +@pytest.fixture(scope="module") +def litestream_project(tmp_path_factory): + """Unzip the committed litestream app; the archive roots at ``litestream/`` (carries go.mod).""" + if not _LITESTREAM_ZIP.exists(): + pytest.skip("litestream.zip resource not present") + dest = tmp_path_factory.mktemp("litestream-src") + with zipfile.ZipFile(_LITESTREAM_ZIP) as zf: + zf.extractall(dest) + root = dest / "litestream" + assert (root / "go.mod").exists(), "expected go.mod at the archive's litestream/ root" + return root + + +@pytest.fixture(scope="module") +def litestream_analysis(litestream_project, tmp_path_factory): + cache = tmp_path_factory.mktemp("litestream-cache") + return CLDK.go( + project_path=str(litestream_project), + analysis_level=AnalysisLevel.call_graph, + eager=True, + backend=CodeAnalyzerConfig(cache_dir=str(cache)), + ) + + +def test_litestream_app_analyzes(litestream_analysis): + """The real binary on the real app: a non-trivial symbol table and call graph, app id intact.""" + assert litestream_analysis.get_application_view().id == "can://go/litestream" + assert len(litestream_analysis.get_symbol_table()) > 1 + g = litestream_analysis.get_call_graph() + assert g.number_of_edges() > 0 + for src, dst in g.edges(): + assert "id" in g.nodes[src] and "id" in g.nodes[dst] diff --git a/tests/analysis/go/test_go_models.py b/tests/analysis/go/test_go_models.py deleted file mode 100644 index 99b6f53a..00000000 --- a/tests/analysis/go/test_go_models.py +++ /dev/null @@ -1,43 +0,0 @@ -"""Go model tests — the pydantic mirror parses a real cango v2 payload, and the null-safe base -coerces a JSON ``null`` collection to its empty default (Go's nil-slice idiom).""" - -import json -from pathlib import Path - -from cldk.models.go import GoAnalysis, GoModule, GoType - -FIXTURE = Path(__file__).parent / "fixture_analysis.json" - - -def test_fixture_validates(): - a = GoAnalysis(**json.loads(FIXTURE.read_text(encoding="utf-8"))) - assert a.schema_version == "2.0.0" - assert a.language == "go" - assert a.max_level == 2 - assert a.application.id.startswith("can://go/") - assert a.application.symbol_table - - -def test_gotype_is_a_single_model_with_a_kind_field(): - t = GoType(id="can://go/x/f.go/T", kind="struct") - assert t.kind == "struct" - assert t.base_types == [] and t.callables == {} and t.fields == {} - - -def test_null_safe_base_coerces_null_collections(): - """A JSON ``null`` list/map (Go marshals a nil slice this way) becomes the empty default rather - than raising, honoring the ``= []`` field style via the broadened validator.""" - t = GoType(id="x", kind="interface", base_types=None, callables=None, fields=None) - assert t.base_types == [] and t.callables == {} and t.fields == {} - m = GoModule(id="m", package="p", source="", imports=None, types=None, functions=None) - assert m.imports == [] and m.types == {} and m.functions == {} - - -def test_go_native_fields_present(): - """The Go-specific first-class fields exist with their defaults.""" - from cldk.models.go import GoBodyNode, GoCallable, GoParam - - assert GoParam(name="x").is_variadic is False - assert GoBodyNode(kind="call").is_goroutine is False - c = GoCallable(id="c", signature="s") - assert c.error_channel == [] and c.source_file is None diff --git a/tests/models/go/__init__.py b/tests/models/go/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/models/go/test_go_models.py b/tests/models/go/test_go_models.py new file mode 100644 index 00000000..ecad147e --- /dev/null +++ b/tests/models/go/test_go_models.py @@ -0,0 +1,84 @@ +"""Go model tests — the ``extra="forbid"`` pydantic mirror of canonical schema v2. + +Like the sibling ``tests/models/`` suites, the file corpus comes from ``tests/resources/go`` +(no local toy JSON): the committed real ``can://go/litestream`` project (55 modules, 959 edges) +proves the mirror parses genuine cango output at scale. The remaining tests construct models inline +to pin the Go-specific shape — the single ``GoType`` with a ``kind`` field (no discriminated union), +the null-safe collection coercion for Go's nil-slice idiom, and the native first-class fields. +""" + +from pathlib import Path + +import pytest + +from cldk.models.go import GoAnalysis, GoModule, GoType + +#: the committed real corpus, via the parents[2]/"resources" convention the TS/Java tests use +GO_ANALYSIS = Path(__file__).resolve().parents[2] / "resources" / "go" / "analysis.json" + +# real, stable ids from the litestream corpus (abs/replica_client.go) +LS_MODULE = "abs/replica_client.go" +LS_TYPE = "ReplicaClient" +LS_METHOD_SIG = "github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll" +LS_FUNC_SIG = "github.com/benbjohnson/litestream/abs.NewReplicaClient" + + +# -----[ real corpus: the mirror parses genuine cango output at scale ]----- +@pytest.fixture(scope="module") +def litestream() -> GoAnalysis: + return GoAnalysis.model_validate_json(GO_ANALYSIS.read_text(encoding="utf-8")) + + +def test_real_corpus_envelope(litestream): + assert litestream.schema_version == "2.0.0" + assert litestream.language == "go" + assert litestream.max_level == 2 + assert litestream.application.id == "can://go/litestream" + assert len(litestream.application.symbol_table) == 55 + assert len(litestream.application.call_graph) == 959 + + +def test_real_corpus_struct_round_trips(litestream): + """A real struct with its method and field survives the round trip with its native shape.""" + mod = litestream.application.symbol_table[LS_MODULE] + assert mod.package == "abs" and mod.source # the module carries its source text + ty = mod.types[LS_TYPE] + assert ty.kind == "struct" + assert LS_METHOD_SIG in ty.callables + assert ty.callables[LS_METHOD_SIG].kind == "method" + assert ty.fields["AccountKey"].type == "string" + assert LS_FUNC_SIG in mod.functions # a package-level constructor function + + +def test_real_corpus_call_edges_are_well_formed(litestream): + """Every edge names a src and dst id under the application; prov/weight parse.""" + pre = "can://go/litestream/" + for e in litestream.application.call_graph: + assert e.src.startswith(pre) and e.dst.startswith(pre) + assert isinstance(e.prov, list) and isinstance(e.weight, int) + + +# -----[ the Go-specific model shape, pinned inline ]----- +def test_gotype_is_a_single_model_with_a_kind_field(): + t = GoType(id="can://go/x/f.go/T", kind="struct") + assert t.kind == "struct" + assert t.base_types == [] and t.callables == {} and t.fields == {} + + +def test_null_safe_base_coerces_null_collections(): + """A JSON ``null`` list/map (Go marshals a nil slice this way) becomes the empty default rather + than raising, honoring the ``= []`` field style via the broadened validator.""" + t = GoType(id="x", kind="interface", base_types=None, callables=None, fields=None) + assert t.base_types == [] and t.callables == {} and t.fields == {} + m = GoModule(id="m", package="p", source="", imports=None, types=None, functions=None) + assert m.imports == [] and m.types == {} and m.functions == {} + + +def test_go_native_fields_present(): + """The Go-specific first-class fields exist with their defaults.""" + from cldk.models.go import GoBodyNode, GoCallable, GoParam + + assert GoParam(name="x").is_variadic is False + assert GoBodyNode(kind="call").is_goroutine is False + c = GoCallable(id="c", signature="s") + assert c.error_channel == [] and c.source_file is None diff --git a/tests/resources/go/analysis.json b/tests/resources/go/analysis.json new file mode 100644 index 00000000..5f47977e --- /dev/null +++ b/tests/resources/go/analysis.json @@ -0,0 +1 @@ +{"schema_version":"2.0.0","language":"go","max_level":2,"analyzer":{"name":"codeanalyzer-go","version":"0.1.0"},"application":{"id":"can://go/litestream","kind":"application","symbol_table":{"abs/replica_client.go":{"id":"can://go/litestream/abs/replica_client.go","kind":"module","span":{"start":[1,1],"end":[500,1],"bytes":[0,14566]},"package":"abs","source":"package abs\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azcore\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azcore/to\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azidentity\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob\"\n\t\"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror\"\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"abs\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"abs\"\n\n// MetadataKeyTimestamp is the metadata key for storing LTX file timestamps in Azure Blob Storage.\n// Azure metadata keys cannot contain hyphens, so we use litestreamtimestamp (C# identifier rules).\nconst MetadataKeyTimestamp = \"litestreamtimestamp\"\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files to Azure Blob Storage.\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\tclient *azblob.Client\n\tlogger *slog.Logger\n\n\t// Azure credentials\n\tAccountName string\n\tAccountKey string\n\tSASToken string // SAS token for container-level access\n\tEndpoint string\n\n\t// Azure Blob Storage container information\n\tBucket string\n\tPath string\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\n// URL format: abs://[account-name@]container/path\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tclient := NewReplicaClient()\n\n\t// Extract account name from userinfo if present (abs://account@container/path)\n\tif userinfo != nil {\n\t\tclient.AccountName = userinfo.Username()\n\t}\n\n\tclient.Bucket = host\n\tclient.Path = urlPath\n\tclient.Endpoint = query.Get(\"endpoint\")\n\n\tif client.Bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for abs replica URL\")\n\t}\n\n\treturn client, nil\n}\n\n// Type returns \"abs\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init initializes the connection to Azure. No-op if already initialized.\nfunc (c *ReplicaClient) Init(ctx context.Context) (err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.client != nil {\n\t\treturn nil\n\t}\n\n\t// Validate required configuration\n\tif c.Bucket == \"\" {\n\t\treturn fmt.Errorf(\"abs: container name is required\")\n\t}\n\n\t// Construct \u0026 parse endpoint unless already set.\n\tendpoint := c.Endpoint\n\tif endpoint == \"\" {\n\t\tif c.AccountName == \"\" {\n\t\t\treturn fmt.Errorf(\"abs: account name is required when endpoint is not specified\")\n\t\t}\n\t\tendpoint = fmt.Sprintf(\"https://%s.blob.core.windows.net\", c.AccountName)\n\t}\n\n\t// Configure client options with retry policy\n\tclientOptions := \u0026azblob.ClientOptions{\n\t\tClientOptions: azcore.ClientOptions{\n\t\t\tRetry: policy.RetryOptions{\n\t\t\t\tMaxRetries: 10,\n\t\t\t\tRetryDelay: time.Second,\n\t\t\t\tMaxRetryDelay: 30 * time.Second,\n\t\t\t\tTryTimeout: 15 * time.Minute, // Reasonable timeout for blob operations\n\t\t\t\tStatusCodes: []int{\n\t\t\t\t\thttp.StatusRequestTimeout,\n\t\t\t\t\thttp.StatusTooManyRequests,\n\t\t\t\t\thttp.StatusInternalServerError,\n\t\t\t\t\thttp.StatusBadGateway,\n\t\t\t\t\thttp.StatusServiceUnavailable,\n\t\t\t\t\thttp.StatusGatewayTimeout,\n\t\t\t\t},\n\t\t\t},\n\t\t\tTelemetry: policy.TelemetryOptions{\n\t\t\t\tApplicationID: \"litestream\",\n\t\t\t},\n\t\t},\n\t}\n\n\t// Check for SAS token first (highest priority for explicit credentials)\n\tsasToken := c.SASToken\n\tif sasToken == \"\" {\n\t\tsasToken = os.Getenv(\"LITESTREAM_AZURE_SAS_TOKEN\")\n\t}\n\n\t// Check if we have explicit credentials or should use default credential chain\n\taccountKey := c.AccountKey\n\tif accountKey == \"\" {\n\t\taccountKey = os.Getenv(\"LITESTREAM_AZURE_ACCOUNT_KEY\")\n\t}\n\n\t// Create Azure Blob Storage client with appropriate authentication\n\t// Priority: SAS token \u003e Shared key \u003e Default credential chain\n\tvar client *azblob.Client\n\tif sasToken != \"\" {\n\t\t// SAS token authentication - append token to endpoint URL\n\t\tif accountKey != \"\" {\n\t\t\tslog.Warn(\"both SAS token and account key configured, using SAS token\")\n\t\t} else {\n\t\t\tslog.Debug(\"using SAS token authentication\")\n\t\t}\n\t\t// Strip leading \"?\" if present to avoid double \"?\"\n\t\tendpointWithSAS := fmt.Sprintf(\"%s?%s\", endpoint, strings.TrimPrefix(sasToken, \"?\"))\n\t\tclient, err = azblob.NewClientWithNoCredential(endpointWithSAS, clientOptions)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot create azure blob client with SAS token: %w\", err)\n\t\t}\n\t} else if accountKey != \"\" \u0026\u0026 c.AccountName != \"\" {\n\t\t// Use shared key authentication (existing behavior)\n\t\tslog.Debug(\"using shared key authentication\")\n\t\tcredential, err := azblob.NewSharedKeyCredential(c.AccountName, accountKey)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot create shared key credential: %w\", err)\n\t\t}\n\t\tclient, err = azblob.NewClientWithSharedKeyCredential(endpoint, credential, clientOptions)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot create azure blob client with shared key: %w\", err)\n\t\t}\n\t} else {\n\t\t// Use default credential chain (similar to AWS SDK default credential chain)\n\t\t// This includes:\n\t\t// - Environment variables (AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID)\n\t\t// - Managed Identity (for Azure VMs, App Service, etc.)\n\t\t// - Azure CLI credentials\n\t\t// - Visual Studio Code credentials\n\t\tslog.Debug(\"using default credential chain (managed identity, Azure CLI, environment variables, etc.)\")\n\t\tcredential, err := azidentity.NewDefaultAzureCredential(nil)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot create default azure credential: %w\", err)\n\t\t}\n\t\tclient, err = azblob.NewClient(endpoint, credential, clientOptions)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot create azure blob client with default credential: %w\", err)\n\t\t}\n\t}\n\n\tc.client = client\n\treturn nil\n}\n\n// LTXFiles returns an iterator over all available LTX files.\n// Azure always uses accurate timestamps from metadata since they're included in LIST operations at zero cost.\n// The useMetadata parameter is ignored.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newLTXFileIterator(ctx, c, level, seek), nil\n}\n\n// WriteLTXFile writes an LTX file to remote storage.\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, rd io.Reader) (info *ltx.FileInfo, err error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(rd, \u0026buf)\n\n\t// Extract timestamp from LTX header\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Combine buffered data with rest of reader\n\trc := internal.NewReadCounter(io.MultiReader(\u0026buf, rd))\n\n\t// Upload blob with proper content type, access tier, and metadata\n\t// Azure metadata keys cannot contain hyphens, so use litestreamtimestamp\n\t_, err = c.client.UploadStream(ctx, c.Bucket, key, rc, \u0026azblob.UploadStreamOptions{\n\t\tHTTPHeaders: \u0026blob.HTTPHeaders{\n\t\t\tBlobContentType: to.Ptr(\"application/octet-stream\"),\n\t\t},\n\t\tAccessTier: to.Ptr(blob.AccessTierHot), // Use Hot tier as default\n\t\tMetadata: map[string]*string{\n\t\t\tMetadataKeyTimestamp: to.Ptr(timestamp.Format(time.RFC3339Nano)),\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"abs: cannot upload ltx file %q: %w\", key, err)\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(rc.N()))\n\n\treturn \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: rc.N(),\n\t\tCreatedAt: timestamp,\n\t}, nil\n}\n\n// OpenLTXFile returns a reader for an LTX file.\n// Returns os.ErrNotExist if no matching min/max TXID is not found.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\tresp, err := c.client.DownloadStream(ctx, c.Bucket, key, \u0026azblob.DownloadStreamOptions{\n\t\tRange: blob.HTTPRange{\n\t\t\tOffset: offset,\n\t\t\tCount: size,\n\t\t},\n\t})\n\n\tif isNotExists(err) {\n\t\treturn nil, os.ErrNotExist\n\t} else if err != nil {\n\t\treturn nil, fmt.Errorf(\"abs: cannot start new reader for %q: %w\", key, err)\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Inc()\n\tif resp.ContentLength != nil {\n\t\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Add(float64(*resp.ContentLength))\n\t}\n\n\treturn resp.Body, nil\n}\n\n// DeleteLTXFiles deletes LTX files.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, info := range a {\n\t\tkey := litestream.LTXFilePath(c.Path, info.Level, info.MinTXID, info.MaxTXID)\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"key\", key)\n\n\t\t_, err := c.client.DeleteBlob(ctx, c.Bucket, key, nil)\n\t\tif isNotExists(err) {\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot delete ltx file %q: %w\", key, err)\n\t\t}\n\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\treturn nil\n}\n\n// DeleteAll deletes all LTX files.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\t// List all blobs with the configured path prefix\n\tprefix := \"/\"\n\tif c.Path != \"\" {\n\t\tprefix = strings.TrimSuffix(c.Path, \"/\") + \"/\"\n\t}\n\n\tpager := c.client.NewListBlobsFlatPager(c.Bucket, \u0026azblob.ListBlobsFlatOptions{\n\t\tPrefix: \u0026prefix,\n\t\tInclude: azblob.ListBlobsInclude{Metadata: true},\n\t})\n\n\tfor pager.More() {\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"LIST\").Inc()\n\n\t\tresp, err := pager.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"abs: cannot list blobs: %w\", err)\n\t\t}\n\n\t\tfor _, item := range resp.Segment.BlobItems {\n\t\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\n\t\t\t_, err := c.client.DeleteBlob(ctx, c.Bucket, *item.Name, nil)\n\t\t\tif isNotExists(err) {\n\t\t\t\tcontinue\n\t\t\t} else if err != nil {\n\t\t\t\treturn fmt.Errorf(\"abs: cannot delete blob %q: %w\", *item.Name, err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype ltxFileIterator struct {\n\tctx context.Context\n\tcancel context.CancelFunc\n\tclient *ReplicaClient\n\tlevel int\n\tseek ltx.TXID\n\n\tpager *runtime.Pager[azblob.ListBlobsFlatResponse]\n\tpageItems []*ltx.FileInfo\n\tpageIndex int\n\n\tclosed bool\n\terr error\n\tinfo *ltx.FileInfo\n}\n\nfunc newLTXFileIterator(ctx context.Context, client *ReplicaClient, level int, seek ltx.TXID) *ltxFileIterator {\n\tctx, cancel := context.WithCancel(ctx)\n\n\titr := \u0026ltxFileIterator{\n\t\tctx: ctx,\n\t\tcancel: cancel,\n\t\tclient: client,\n\t\tlevel: level,\n\t\tseek: seek,\n\t}\n\n\t// Create paginator for listing blobs with level prefix\n\tdir := litestream.LTXLevelDir(client.Path, level)\n\tprefix := dir + \"/\"\n\n\titr.pager = client.client.NewListBlobsFlatPager(client.Bucket, \u0026azblob.ListBlobsFlatOptions{\n\t\tPrefix: \u0026prefix,\n\t\tInclude: azblob.ListBlobsInclude{Metadata: true},\n\t})\n\n\treturn itr\n}\n\nfunc (itr *ltxFileIterator) Close() (err error) {\n\titr.closed = true\n\titr.cancel()\n\treturn itr.err\n}\n\nfunc (itr *ltxFileIterator) Next() bool {\n\tif itr.closed || itr.err != nil {\n\t\treturn false\n\t}\n\n\t// Process blobs until we find a valid LTX file\n\tfor {\n\t\t// Load next page if needed\n\t\tif itr.pageItems == nil || itr.pageIndex \u003e= len(itr.pageItems) {\n\t\t\tif !itr.loadNextPage() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Process current item from page\n\t\tif itr.pageIndex \u003c len(itr.pageItems) {\n\t\t\titr.info = itr.pageItems[itr.pageIndex]\n\t\t\titr.pageIndex++\n\t\t\treturn true\n\t\t}\n\t}\n}\n\n// loadNextPage loads the next page of blobs and extracts valid LTX files\nfunc (itr *ltxFileIterator) loadNextPage() bool {\n\tif !itr.pager.More() {\n\t\treturn false\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"LIST\").Inc()\n\n\tresp, err := itr.pager.NextPage(itr.ctx)\n\tif err != nil {\n\t\titr.err = fmt.Errorf(\"abs: cannot list blobs: %w\", err)\n\t\treturn false\n\t}\n\n\t// Extract blob items directly from the response\n\titr.pageItems = nil\n\titr.pageIndex = 0\n\n\tfor _, item := range resp.Segment.BlobItems {\n\t\tkey := path.Base(*item.Name)\n\t\tminTXID, maxTXID, err := ltx.ParseFilename(key)\n\t\tif err != nil {\n\t\t\tcontinue // Skip non-LTX files\n\t\t}\n\n\t\t// Build file info\n\t\tinfo := \u0026ltx.FileInfo{\n\t\t\tLevel: itr.level,\n\t\t\tMinTXID: minTXID,\n\t\t\tMaxTXID: maxTXID,\n\t\t\tSize: *item.Properties.ContentLength,\n\t\t}\n\n\t\t// Skip if below seek TXID\n\t\tif info.MinTXID \u003c itr.seek {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Skip if wrong level\n\t\tif info.Level != itr.level {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Always use accurate timestamp from metadata since it's zero-cost\n\t\t// Azure includes metadata in LIST operations, so no extra API call needed\n\t\tinfo.CreatedAt = item.Properties.CreationTime.UTC()\n\t\tif item.Metadata != nil {\n\t\t\tif ts, ok := item.Metadata[MetadataKeyTimestamp]; ok \u0026\u0026 ts != nil {\n\t\t\t\tif parsed, err := time.Parse(time.RFC3339Nano, *ts); err == nil {\n\t\t\t\t\tinfo.CreatedAt = parsed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\titr.pageItems = append(itr.pageItems, info)\n\t}\n\n\treturn len(itr.pageItems) \u003e 0 || itr.pager.More()\n}\n\nfunc (itr *ltxFileIterator) Err() error { return itr.err }\n\nfunc (itr *ltxFileIterator) Item() *ltx.FileInfo {\n\treturn itr.info\n}\n\nfunc isNotExists(err error) bool {\n\tvar respErr *azcore.ResponseError\n\tif errors.As(err, \u0026respErr) {\n\t\treturn respErr.ErrorCode == string(bloberror.BlobNotFound) || respErr.ErrorCode == string(bloberror.ContainerNotFound)\n\t}\n\treturn false\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[22,30]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[31,41]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[42,51]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[52,58]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[59,64]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[65,76]}},{"name":"http","path":"net/http","span":{"start":[10,1],"end":[10,12],"bytes":[77,88]}},{"name":"url","path":"net/url","span":{"start":[11,1],"end":[11,11],"bytes":[89,99]}},{"name":"os","path":"os","span":{"start":[12,1],"end":[12,6],"bytes":[100,105]}},{"name":"path","path":"path","span":{"start":[13,1],"end":[13,8],"bytes":[106,113]}},{"name":"strings","path":"strings","span":{"start":[14,1],"end":[14,11],"bytes":[114,124]}},{"name":"sync","path":"sync","span":{"start":[15,1],"end":[15,8],"bytes":[125,132]}},{"name":"time","path":"time","span":{"start":[16,1],"end":[16,8],"bytes":[133,140]}},{"name":"azcore","path":"github.com/Azure/azure-sdk-for-go/sdk/azcore","span":{"start":[18,1],"end":[18,48],"bytes":[142,189]}},{"name":"policy","path":"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy","span":{"start":[19,1],"end":[19,55],"bytes":[190,244]}},{"name":"runtime","path":"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime","span":{"start":[20,1],"end":[20,56],"bytes":[245,300]}},{"name":"to","path":"github.com/Azure/azure-sdk-for-go/sdk/azcore/to","span":{"start":[21,1],"end":[21,51],"bytes":[301,351]}},{"name":"azidentity","path":"github.com/Azure/azure-sdk-for-go/sdk/azidentity","span":{"start":[22,1],"end":[22,52],"bytes":[352,403]}},{"name":"azblob","path":"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob","span":{"start":[23,1],"end":[23,56],"bytes":[404,459]}},{"name":"blob","path":"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob","span":{"start":[24,1],"end":[24,61],"bytes":[460,520]}},{"name":"bloberror","path":"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror","span":{"start":[25,1],"end":[25,66],"bytes":[521,586]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[26,1],"end":[26,27],"bytes":[587,613]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[28,1],"end":[28,37],"bytes":[615,651]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[29,1],"end":[29,46],"bytes":[652,697]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient","kind":"struct","span":{"start":[46,1],"end":[60,2],"bytes":[1263,1574]},"callables":{"github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll","kind":"method","span":{"start":[320,1],"end":[357,2],"bytes":[10261,11259]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[320,1],"end":[320,63],"bytes":[10261,10323]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"321:12":{"kind":"call","span":{"start":[321,12],"end":[321,23],"bytes":[10335,10346]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init"},"328:12":{"kind":"call","span":{"start":[328,12],"end":[328,43],"bytes":[10474,10505]},"callee":null},"331:11":{"kind":"call","span":{"start":[331,11],"end":[334,4],"bytes":[10526,10672]},"callee":null},"336:6":{"kind":"call","span":{"start":[336,6],"end":[336,18],"bytes":[10679,10691]},"callee":null},"337:3":{"kind":"call","span":{"start":[337,3],"end":[337,79],"bytes":[10696,10772]},"callee":null},"339:16":{"kind":"call","span":{"start":[339,16],"end":[339,35],"bytes":[10795,10814]},"callee":null},"341:11":{"kind":"call","span":{"start":[341,11],"end":[341,56],"bytes":[10843,10888]},"callee":null},"345:4":{"kind":"call","span":{"start":[345,4],"end":[345,82],"bytes":[10945,11023]},"callee":null},"347:14":{"kind":"call","span":{"start":[347,14],"end":[347,65],"bytes":[11044,11095]},"callee":null},"348:7":{"kind":"call","span":{"start":[348,7],"end":[348,23],"bytes":[11102,11118]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists"},"351:12":{"kind":"call","span":{"start":[351,12],"end":[351,73],"bytes":[11171,11232]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[296,1],"end":[317,2],"bytes":[9557,10223]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[296,1],"end":[296,87],"bytes":[9557,9643]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[296,1],"end":[296,87],"bytes":[9557,9643]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"297:12":{"kind":"call","span":{"start":[297,12],"end":[297,23],"bytes":[9655,9666]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init"},"302:10":{"kind":"call","span":{"start":[302,10],"end":[302,80],"bytes":[9733,9803]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"304:3":{"kind":"call","span":{"start":[304,3],"end":[304,121],"bytes":[9807,9925]},"callee":null},"306:13":{"kind":"call","span":{"start":[306,13],"end":[306,57],"bytes":[9939,9983]},"callee":null},"307:6":{"kind":"call","span":{"start":[307,6],"end":[307,22],"bytes":[9989,10005]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists"},"310:11":{"kind":"call","span":{"start":[310,11],"end":[310,69],"bytes":[10055,10113]},"callee":null},"313:3":{"kind":"call","span":{"start":[313,3],"end":[313,81],"bytes":[10121,10199]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ReplicaClient.Init":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init","kind":"method","span":{"start":[101,1],"end":[205,2],"bytes":[2766,6407]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[101,1],"end":[101,64],"bytes":[2766,2829]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":15},"body":{"102:2":{"kind":"call","span":{"start":[102,2],"end":[102,13],"bytes":[2831,2842]},"callee":null},"103:8":{"kind":"call","span":{"start":[103,8],"end":[103,21],"bytes":[2850,2863]},"callee":null},"111:10":{"kind":"call","span":{"start":[111,10],"end":[111,55],"bytes":[2970,3015]},"callee":null},"118:11":{"kind":"call","span":{"start":[118,11],"end":[118,85],"bytes":[3153,3227]},"callee":null},"120:14":{"kind":"call","span":{"start":[120,14],"end":[120,76],"bytes":[3245,3307]},"callee":null},"149:14":{"kind":"call","span":{"start":[149,14],"end":[149,53],"bytes":[4095,4134]},"callee":null},"155:16":{"kind":"call","span":{"start":[155,16],"end":[155,57],"bytes":[4286,4327]},"callee":null},"164:4":{"kind":"call","span":{"start":[164,4],"end":[164,75],"bytes":[4601,4672]},"callee":null},"166:4":{"kind":"call","span":{"start":[166,4],"end":[166,48],"bytes":[4687,4731]},"callee":null},"169:22":{"kind":"call","span":{"start":[169,22],"end":[169,87],"bytes":[4811,4876]},"callee":null},"169:53":{"kind":"call","span":{"start":[169,53],"end":[169,86],"bytes":[4842,4875]},"callee":null},"170:17":{"kind":"call","span":{"start":[170,17],"end":[170,81],"bytes":[4893,4957]},"callee":null},"172:11":{"kind":"call","span":{"start":[172,11],"end":[172,85],"bytes":[4986,5060]},"callee":null},"176:3":{"kind":"call","span":{"start":[176,3],"end":[176,48],"bytes":[5175,5220]},"callee":null},"177:22":{"kind":"call","span":{"start":[177,22],"end":[177,78],"bytes":[5242,5298]},"callee":null},"179:11":{"kind":"call","span":{"start":[179,11],"end":[179,74],"bytes":[5327,5390]},"callee":null},"181:17":{"kind":"call","span":{"start":[181,17],"end":[181,93],"bytes":[5411,5487]},"callee":null},"183:11":{"kind":"call","span":{"start":[183,11],"end":[183,86],"bytes":[5516,5591]},"callee":null},"192:3":{"kind":"call","span":{"start":[192,3],"end":[192,106],"bytes":[5919,6022]},"callee":null},"193:22":{"kind":"call","span":{"start":[193,22],"end":[193,63],"bytes":[6044,6085]},"callee":null},"195:11":{"kind":"call","span":{"start":[195,11],"end":[195,77],"bytes":[6114,6180]},"callee":null},"197:17":{"kind":"call","span":{"start":[197,17],"end":[197,70],"bytes":[6201,6254]},"callee":null},"199:11":{"kind":"call","span":{"start":[199,11],"end":[199,94],"bytes":[6283,6366]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ReplicaClient.LTXFiles":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.LTXFiles","kind":"method","span":{"start":[210,1],"end":[215,2],"bytes":[6623,6861]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[210,1],"end":[210,126],"bytes":[6623,6748]}},{"name":"level","type":"int","span":{"start":[210,1],"end":[210,126],"bytes":[6623,6748]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[210,1],"end":[210,126],"bytes":[6623,6748]}},{"name":"useMetadata","type":"bool","span":{"start":[210,1],"end":[210,126],"bytes":[6623,6748]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"211:12":{"kind":"call","span":{"start":[211,12],"end":[211,23],"bytes":[6760,6771]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init"},"214:9":{"kind":"call","span":{"start":[214,9],"end":[214,48],"bytes":[6815,6854]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.newLTXFileIterator"}}},"github.com/benbjohnson/litestream/abs.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[268,1],"end":[293,2],"bytes":[8682,9518]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[268,1],"end":[268,140],"bytes":[8682,8821]}},{"name":"level","type":"int","span":{"start":[268,1],"end":[268,140],"bytes":[8682,8821]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[268,1],"end":[268,140],"bytes":[8682,8821]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[268,1],"end":[268,140],"bytes":[8682,8821]}},{"name":"offset","type":"int64","span":{"start":[268,1],"end":[268,140],"bytes":[8682,8821]}},{"name":"size","type":"int64","span":{"start":[268,1],"end":[268,140],"bytes":[8682,8821]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"269:12":{"kind":"call","span":{"start":[269,12],"end":[269,23],"bytes":[8833,8844]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init"},"273:9":{"kind":"call","span":{"start":[273,9],"end":[273,64],"bytes":[8889,8944]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"274:15":{"kind":"call","span":{"start":[274,15],"end":[279,4],"bytes":[8959,9103]},"callee":null},"281:5":{"kind":"call","span":{"start":[281,5],"end":[281,21],"bytes":[9109,9125]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists"},"284:15":{"kind":"call","span":{"start":[284,15],"end":[284,78],"bytes":[9195,9258]},"callee":null},"287:2":{"kind":"call","span":{"start":[287,2],"end":[287,77],"bytes":[9264,9339]},"callee":null},"289:3":{"kind":"call","span":{"start":[289,3],"end":[289,78],"bytes":[9380,9455]},"callee":null},"289:83":{"kind":"call","span":{"start":[289,83],"end":[289,111],"bytes":[9460,9488]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ReplicaClient.SetLogger":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.SetLogger","kind":"method","span":{"start":[69,1],"end":[71,2],"bytes":[1763,1869]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[69,1],"end":[69,57],"bytes":[1763,1819]}}],"metrics":{"cyclomatic":1},"body":{"70:13":{"kind":"call","span":{"start":[70,13],"end":[70,48],"bytes":[1832,1867]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ReplicaClient.Type":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Type","kind":"method","span":{"start":[96,1],"end":[98,2],"bytes":[2622,2689]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[218,1],"end":[264,2],"bytes":[6917,8563]},"signature":"github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[218,1],"end":[218,144],"bytes":[6917,7060]}},{"name":"level","type":"int","span":{"start":[218,1],"end":[218,144],"bytes":[6917,7060]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[218,1],"end":[218,144],"bytes":[6917,7060]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[218,1],"end":[218,144],"bytes":[6917,7060]}},{"name":"rd","type":"io.Reader","span":{"start":[218,1],"end":[218,144],"bytes":[6917,7060]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"219:12":{"kind":"call","span":{"start":[219,12],"end":[219,23],"bytes":[7072,7083]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init"},"223:9":{"kind":"call","span":{"start":[223,9],"end":[223,64],"bytes":[7128,7183]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"227:15":{"kind":"call","span":{"start":[227,15],"end":[227,37],"bytes":[7294,7316]},"callee":null},"230:17":{"kind":"call","span":{"start":[230,17],"end":[230,42],"bytes":[7372,7397]},"callee":null},"232:15":{"kind":"call","span":{"start":[232,15],"end":[232,71],"bytes":[7429,7485]},"callee":null},"234:15":{"kind":"call","span":{"start":[234,15],"end":[234,44],"bytes":[7503,7532]},"callee":null},"237:32":{"kind":"call","span":{"start":[237,32],"end":[237,56],"bytes":[7617,7641]},"callee":null},"237:8":{"kind":"call","span":{"start":[237,8],"end":[237,57],"bytes":[7593,7642]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter"},"241:11":{"kind":"call","span":{"start":[241,11],"end":[249,4],"bytes":[7797,8145]},"callee":null},"243:21":{"kind":"call","span":{"start":[243,21],"end":[243,55],"bytes":[7926,7960]},"callee":null},"245:15":{"kind":"call","span":{"start":[245,15],"end":[245,41],"bytes":[7981,8007]},"callee":null},"247:26":{"kind":"call","span":{"start":[247,26],"end":[247,68],"bytes":[8093,8135]},"callee":null},"247:33":{"kind":"call","span":{"start":[247,33],"end":[247,67],"bytes":[8100,8134]},"callee":null},"251:15":{"kind":"call","span":{"start":[251,15],"end":[251,73],"bytes":[8177,8235]},"callee":null},"254:2":{"kind":"call","span":{"start":[254,2],"end":[254,77],"bytes":[8241,8316]},"callee":null},"255:2":{"kind":"call","span":{"start":[255,2],"end":[255,77],"bytes":[8324,8399]},"callee":null},"255:82":{"kind":"call","span":{"start":[255,82],"end":[255,97],"bytes":[8404,8419]},"callee":null},"255:90":{"kind":"call","span":{"start":[255,90],"end":[255,96],"bytes":[8412,8418]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N"},"261:14":{"kind":"call","span":{"start":[261,14],"end":[261,20],"bytes":[8522,8528]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N"}}}},"fields":{"AccountKey":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/AccountKey","kind":"field","type":"string","span":{"start":[53,1],"end":[53,20],"bytes":[1397,1416]}},"AccountName":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/AccountName","kind":"field","type":"string","span":{"start":[52,1],"end":[52,20],"bytes":[1377,1396]}},"Bucket":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/Bucket","kind":"field","type":"string","span":{"start":[58,1],"end":[58,15],"bytes":[1543,1557]}},"Endpoint":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/Endpoint","kind":"field","type":"string","span":{"start":[55,1],"end":[55,20],"bytes":[1477,1496]}},"Path":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[59,1],"end":[59,15],"bytes":[1558,1572]}},"SASToken":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/SASToken","kind":"field","type":"string","span":{"start":[54,1],"end":[54,60],"bytes":[1417,1476]}},"client":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/client","kind":"field","type":"*github.com/Azure/azure-sdk-for-go/sdk/storage/azblob.Client","span":{"start":[48,1],"end":[48,23],"bytes":[1310,1332]}},"logger":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[49,1],"end":[49,21],"bytes":[1333,1353]}},"mu":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[47,1],"end":[47,19],"bytes":[1291,1309]}}}},"ltxFileIterator":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator","kind":"struct","span":{"start":[359,1],"end":[373,2],"bytes":[11261,11544]},"callables":{"github.com/benbjohnson/litestream/abs.ltxFileIterator.Close":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.Close","kind":"method","span":{"start":[398,1],"end":[402,2],"bytes":[12130,12230]},"signature":"github.com/benbjohnson/litestream/abs.ltxFileIterator.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"400:2":{"kind":"call","span":{"start":[400,2],"end":[400,14],"bytes":[12200,12212]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ltxFileIterator.Err":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.Err","kind":"method","span":{"start":[487,1],"end":[487,59],"bytes":[14194,14252]},"signature":"github.com/benbjohnson/litestream/abs.ltxFileIterator.Err","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/abs.ltxFileIterator.Item":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.Item","kind":"method","span":{"start":[489,1],"end":[491,2],"bytes":[14254,14323]},"signature":"github.com/benbjohnson/litestream/abs.ltxFileIterator.Item","parameters":[],"return_type":"*github.com/superfly/ltx.FileInfo","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/abs.ltxFileIterator.Next":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.Next","kind":"method","span":{"start":[404,1],"end":[425,2],"bytes":[12232,12699]},"signature":"github.com/benbjohnson/litestream/abs.ltxFileIterator.Next","parameters":[],"return_type":"bool","metrics":{"cyclomatic":6},"body":{"412:47":{"kind":"call","span":{"start":[412,47],"end":[412,65],"bytes":[12460,12478]},"callee":null},"413:8":{"kind":"call","span":{"start":[413,8],"end":[413,26],"bytes":[12488,12506]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.loadNextPage"},"419:22":{"kind":"call","span":{"start":[419,22],"end":[419,40],"bytes":[12593,12611]},"callee":null}}},"github.com/benbjohnson/litestream/abs.ltxFileIterator.loadNextPage":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.loadNextPage","kind":"method","span":{"start":[428,1],"end":[485,2],"bytes":[12775,14192]},"signature":"github.com/benbjohnson/litestream/abs.ltxFileIterator.loadNextPage","parameters":[],"return_type":"bool","metrics":{"cyclomatic":10},"body":{"429:6":{"kind":"call","span":{"start":[429,6],"end":[429,22],"bytes":[12830,12846]},"callee":null},"433:2":{"kind":"call","span":{"start":[433,2],"end":[433,78],"bytes":[12869,12945]},"callee":null},"435:15":{"kind":"call","span":{"start":[435,15],"end":[435,42],"bytes":[12967,12994]},"callee":null},"437:13":{"kind":"call","span":{"start":[437,13],"end":[437,58],"bytes":[13024,13069]},"callee":null},"446:10":{"kind":"call","span":{"start":[446,10],"end":[446,31],"bytes":[13236,13257]},"callee":null},"447:28":{"kind":"call","span":{"start":[447,28],"end":[447,50],"bytes":[13285,13307]},"callee":null},"472:20":{"kind":"call","span":{"start":[472,20],"end":[472,54],"bytes":[13841,13875]},"callee":null},"475:23":{"kind":"call","span":{"start":[475,23],"end":[475,56],"bytes":[13997,14030]},"callee":null},"481:19":{"kind":"call","span":{"start":[481,19],"end":[481,46],"bytes":[14108,14135]},"callee":null},"484:35":{"kind":"call","span":{"start":[484,35],"end":[484,51],"bytes":[14174,14190]},"callee":null},"484:9":{"kind":"call","span":{"start":[484,9],"end":[484,27],"bytes":[14148,14166]},"callee":null}}}},"fields":{"cancel":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/cancel","kind":"field","type":"context.CancelFunc","span":{"start":[361,1],"end":[361,27],"bytes":[11315,11341]}},"client":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/client","kind":"field","type":"*github.com/benbjohnson/litestream/abs.ReplicaClient","span":{"start":[362,1],"end":[362,23],"bytes":[11342,11364]}},"closed":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/closed","kind":"field","type":"bool","span":{"start":[370,1],"end":[370,13],"bytes":[11494,11506]}},"ctx":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/ctx","kind":"field","type":"context.Context","span":{"start":[360,1],"end":[360,24],"bytes":[11291,11314]}},"err":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/err","kind":"field","type":"error","span":{"start":[371,1],"end":[371,14],"bytes":[11507,11520]}},"info":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/info","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[372,1],"end":[372,22],"bytes":[11521,11542]}},"level":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/level","kind":"field","type":"int","span":{"start":[363,1],"end":[363,12],"bytes":[11365,11376]}},"pageIndex":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/pageIndex","kind":"field","type":"int","span":{"start":[368,1],"end":[368,15],"bytes":[11478,11492]}},"pageItems":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/pageItems","kind":"field","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[367,1],"end":[367,27],"bytes":[11451,11477]}},"pager":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/pager","kind":"field","type":"*github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime.Pager[github.com/Azure/azure-sdk-for-go/sdk/storage/azblob.ListBlobsFlatResponse]","span":{"start":[366,1],"end":[366,56],"bytes":[11395,11450]}},"seek":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/seek","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[364,1],"end":[364,17],"bytes":[11377,11393]}}}}},"functions":{"github.com/benbjohnson/litestream/abs.NewReplicaClient":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient","kind":"function","span":{"start":[63,1],"end":[67,2],"bytes":[1637,1761]},"signature":"github.com/benbjohnson/litestream/abs.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/abs.ReplicaClient","metrics":{"cyclomatic":1},"body":{"65:11":{"kind":"call","span":{"start":[65,11],"end":[65,25],"bytes":[1712,1726]},"callee":null}}},"github.com/benbjohnson/litestream/abs.NewReplicaClientFromURL":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClientFromURL","kind":"function","span":{"start":[76,1],"end":[93,2],"bytes":[2058,2578]},"signature":"github.com/benbjohnson/litestream/abs.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[76,1],"end":[76,137],"bytes":[2058,2194]}},{"name":"host","type":"string","span":{"start":[76,1],"end":[76,137],"bytes":[2058,2194]}},{"name":"urlPath","type":"string","span":{"start":[76,1],"end":[76,137],"bytes":[2058,2194]}},{"name":"query","type":"net/url.Values","span":{"start":[76,1],"end":[76,137],"bytes":[2058,2194]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[76,1],"end":[76,137],"bytes":[2058,2194]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"77:12":{"kind":"call","span":{"start":[77,12],"end":[77,30],"bytes":[2206,2224]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient"},"81:24":{"kind":"call","span":{"start":[81,24],"end":[81,43],"bytes":[2352,2371]},"callee":null},"86:20":{"kind":"call","span":{"start":[86,20],"end":[86,41],"bytes":[2440,2461]},"callee":null},"89:15":{"kind":"call","span":{"start":[89,15],"end":[89,64],"bytes":[2503,2552]},"callee":null}}},"github.com/benbjohnson/litestream/abs.init":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.init","kind":"function","span":{"start":[32,1],"end":[34,2],"bytes":[701,789]},"signature":"github.com/benbjohnson/litestream/abs.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"33:2":{"kind":"call","span":{"start":[33,2],"end":[33,73],"bytes":[716,787]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}},"github.com/benbjohnson/litestream/abs.isNotExists":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists","kind":"function","span":{"start":[493,1],"end":[499,2],"bytes":[14325,14565]},"signature":"github.com/benbjohnson/litestream/abs.isNotExists","parameters":[{"name":"err","type":"error","span":{"start":[493,1],"end":[493,35],"bytes":[14325,14359]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"495:5":{"kind":"call","span":{"start":[495,5],"end":[495,29],"bytes":[14399,14423]},"callee":null},"496:31":{"kind":"call","span":{"start":[496,31],"end":[496,61],"bytes":[14456,14486]},"callee":null},"496:86":{"kind":"call","span":{"start":[496,86],"end":[496,121],"bytes":[14511,14546]},"callee":null}}},"github.com/benbjohnson/litestream/abs.newLTXFileIterator":{"id":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.newLTXFileIterator","kind":"function","span":{"start":[375,1],"end":[396,2],"bytes":[11546,12128]},"signature":"github.com/benbjohnson/litestream/abs.newLTXFileIterator","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[375,1],"end":[375,113],"bytes":[11546,11658]}},{"name":"client","type":"*github.com/benbjohnson/litestream/abs.ReplicaClient","span":{"start":[375,1],"end":[375,113],"bytes":[11546,11658]}},{"name":"level","type":"int","span":{"start":[375,1],"end":[375,113],"bytes":[11546,11658]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[375,1],"end":[375,113],"bytes":[11546,11658]}}],"return_type":"*github.com/benbjohnson/litestream/abs.ltxFileIterator","metrics":{"cyclomatic":1},"body":{"376:17":{"kind":"call","span":{"start":[376,17],"end":[376,40],"bytes":[11675,11698]},"callee":null},"387:9":{"kind":"call","span":{"start":[387,9],"end":[387,51],"bytes":[11879,11921]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"390:14":{"kind":"call","span":{"start":[390,14],"end":[393,4],"bytes":[11957,12113]},"callee":null}}}},"content_hash":"c7db1d1f59a3eba397f1aaf250de94ac365294a2e7006e25b32337d5bd5f5c63"},"cmd/litestream-test/load.go":{"id":"can://go/litestream/cmd/litestream-test/load.go","kind":"module","span":{"start":[1,1],"end":[334,1],"bytes":[0,8040]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\tcryptorand \"crypto/rand\"\n\t\"database/sql\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"math/rand\"\n\t\"os\"\n\t\"os/signal\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n\n\t_ \"github.com/mattn/go-sqlite3\"\n)\n\ntype LoadCommand struct {\n\tMain *Main\n\n\tDB string\n\tWriteRate int\n\tDuration time.Duration\n\tPattern string\n\tPayloadSize int\n\tReadRatio float64\n\tWorkers int\n}\n\ntype LoadStats struct {\n\twrites int64\n\treads int64\n\terrors int64\n\tstartTime time.Time\n\tlastReport time.Time\n\tmu sync.Mutex\n}\n\nfunc (c *LoadCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-test load\", flag.ExitOnError)\n\tfs.StringVar(\u0026c.DB, \"db\", \"\", \"Database path (required)\")\n\tfs.IntVar(\u0026c.WriteRate, \"write-rate\", 100, \"Writes per second\")\n\tfs.DurationVar(\u0026c.Duration, \"duration\", 1*time.Minute, \"How long to run\")\n\tfs.StringVar(\u0026c.Pattern, \"pattern\", \"constant\", \"Write pattern (constant, burst, random, wave)\")\n\tfs.IntVar(\u0026c.PayloadSize, \"payload-size\", 1024, \"Size of each write operation in bytes\")\n\tfs.Float64Var(\u0026c.ReadRatio, \"read-ratio\", 0.2, \"Read/write ratio (0.0-1.0)\")\n\tfs.IntVar(\u0026c.Workers, \"workers\", 1, \"Number of concurrent workers\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif c.DB == \"\" {\n\t\treturn fmt.Errorf(\"database path required\")\n\t}\n\n\tif _, err := os.Stat(c.DB); err != nil {\n\t\treturn fmt.Errorf(\"database does not exist: %w\", err)\n\t}\n\n\tslog.Info(\"Starting load generation\",\n\t\t\"db\", c.DB,\n\t\t\"write_rate\", c.WriteRate,\n\t\t\"duration\", c.Duration,\n\t\t\"pattern\", c.Pattern,\n\t\t\"payload_size\", c.PayloadSize,\n\t\t\"read_ratio\", c.ReadRatio,\n\t\t\"workers\", c.Workers,\n\t)\n\n\treturn c.generateLoad(ctx)\n}\n\nfunc (c *LoadCommand) generateLoad(ctx context.Context) error {\n\tdb, err := sql.Open(\"sqlite3\", c.DB+\"?_journal_mode=WAL\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open database: %w\", err)\n\t}\n\tdefer db.Close()\n\n\tdb.SetMaxOpenConns(c.Workers + 1)\n\tdb.SetMaxIdleConns(c.Workers)\n\n\tif err := c.ensureTestTable(db); err != nil {\n\t\treturn fmt.Errorf(\"ensure test table: %w\", err)\n\t}\n\n\tctx, cancel := context.WithTimeout(ctx, c.Duration)\n\tdefer cancel()\n\n\tsigChan := make(chan os.Signal, 1)\n\tsignal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)\n\tgo func() {\n\t\t\u003c-sigChan\n\t\tslog.Info(\"Received interrupt signal, stopping load generation\")\n\t\tcancel()\n\t}()\n\n\tstats := \u0026LoadStats{\n\t\tstartTime: time.Now(),\n\t\tlastReport: time.Now(),\n\t}\n\n\tvar wg sync.WaitGroup\n\tfor i := 0; i \u003c c.Workers; i++ {\n\t\twg.Add(1)\n\t\tgo func(workerID int) {\n\t\t\tdefer wg.Done()\n\t\t\tc.worker(ctx, db, workerID, stats)\n\t\t}(i)\n\t}\n\n\tgo c.reportStats(ctx, stats)\n\n\twg.Wait()\n\n\tc.finalReport(stats)\n\treturn nil\n}\n\nfunc (c *LoadCommand) worker(ctx context.Context, db *sql.DB, workerID int, stats *LoadStats) {\n\tticker := time.NewTicker(time.Second / time.Duration(c.WriteRate/c.Workers))\n\tdefer ticker.Stop()\n\n\tdata := make([]byte, c.PayloadSize)\n\tcryptorand.Read(data)\n\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\treturn\n\t\tcase \u003c-ticker.C:\n\t\t\t// calculateRate() returns a modulation factor (not a multiplier\n\t\t\t// on the number of ops). The ticker already fires at the base\n\t\t\t// write-rate, so rate is used only to gate whether this tick\n\t\t\t// produces an operation: \u003c=0 means skip, \u003c1 means probabilistic,\n\t\t\t// \u003e=1 means always fire.\n\t\t\trate := c.calculateRate(stats)\n\t\t\tif rate \u003c= 0 || (rate \u003c 1.0 \u0026\u0026 rand.Float64() \u003e rate) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif rand.Float64() \u003c c.ReadRatio {\n\t\t\t\tif err := c.performRead(db); err != nil {\n\t\t\t\t\tatomic.AddInt64(\u0026stats.errors, 1)\n\t\t\t\t\tslog.Error(\"Read failed\", \"error\", err)\n\t\t\t\t} else {\n\t\t\t\t\tatomic.AddInt64(\u0026stats.reads, 1)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := c.performWrite(db, data); err != nil {\n\t\t\t\t\tatomic.AddInt64(\u0026stats.errors, 1)\n\t\t\t\t\tslog.Error(\"Write failed\", \"error\", err)\n\t\t\t\t} else {\n\t\t\t\t\tatomic.AddInt64(\u0026stats.writes, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (c *LoadCommand) calculateRate(stats *LoadStats) float64 {\n\telapsed := time.Since(stats.startTime).Seconds()\n\n\tswitch c.Pattern {\n\tcase \"burst\":\n\t\tif int(elapsed)%10 \u003c 3 {\n\t\t\treturn 2.0\n\t\t}\n\t\treturn 0.0\n\tcase \"random\":\n\t\treturn rand.Float64() * 2.0\n\tcase \"wave\":\n\t\treturn 1.0 + 0.4*sinApprox(elapsed/10.0)\n\tdefault:\n\t\treturn 1.0\n\t}\n}\n\nfunc sinApprox(x float64) float64 {\n\tconst twoPi = 2 * 3.14159265359\n\tx = x - float64(int(x/twoPi))*twoPi\n\n\tif x \u003c 3.14159265359 {\n\t\treturn 4 * x * (3.14159265359 - x) / (3.14159265359 * 3.14159265359)\n\t}\n\tx = x - 3.14159265359\n\treturn -4 * x * (3.14159265359 - x) / (3.14159265359 * 3.14159265359)\n}\n\nfunc (c *LoadCommand) ensureTestTable(db *sql.DB) error {\n\tcreateSQL := `\n\t\tCREATE TABLE IF NOT EXISTS load_test (\n\t\t\tid INTEGER PRIMARY KEY AUTOINCREMENT,\n\t\t\tdata BLOB,\n\t\t\ttext_field TEXT,\n\t\t\tint_field INTEGER,\n\t\t\ttimestamp INTEGER\n\t\t)\n\t`\n\t_, err := db.Exec(createSQL)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create table: %w\", err)\n\t}\n\n\t_, err = db.Exec(\"CREATE INDEX IF NOT EXISTS idx_load_test_timestamp ON load_test(timestamp)\")\n\treturn err\n}\n\nfunc (c *LoadCommand) performWrite(db *sql.DB, data []byte) error {\n\ttextField := fmt.Sprintf(\"load_%d\", time.Now().UnixNano())\n\tintField := rand.Int63()\n\ttimestamp := time.Now().Unix()\n\n\t_, err := db.Exec(`\n\t\tINSERT INTO load_test (data, text_field, int_field, timestamp)\n\t\tVALUES (?, ?, ?, ?)\n\t`, data, textField, intField, timestamp)\n\n\treturn err\n}\n\nfunc (c *LoadCommand) performRead(db *sql.DB) error {\n\tvar count int\n\tquery := `SELECT COUNT(*) FROM load_test WHERE timestamp \u003e ?`\n\ttimestamp := time.Now().Add(-1 * time.Hour).Unix()\n\n\treturn db.QueryRow(query, timestamp).Scan(\u0026count)\n}\n\nfunc (c *LoadCommand) reportStats(ctx context.Context, stats *LoadStats) {\n\tticker := time.NewTicker(5 * time.Second)\n\tdefer ticker.Stop()\n\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\treturn\n\t\tcase \u003c-ticker.C:\n\t\t\tstats.mu.Lock()\n\t\t\telapsed := time.Since(stats.lastReport).Seconds()\n\t\t\twrites := atomic.LoadInt64(\u0026stats.writes)\n\t\t\treads := atomic.LoadInt64(\u0026stats.reads)\n\t\t\terrors := atomic.LoadInt64(\u0026stats.errors)\n\n\t\t\twriteRate := float64(writes) / elapsed\n\t\t\treadRate := float64(reads) / elapsed\n\n\t\t\tslog.Info(\"Load statistics\",\n\t\t\t\t\"writes_per_sec\", fmt.Sprintf(\"%.1f\", writeRate),\n\t\t\t\t\"reads_per_sec\", fmt.Sprintf(\"%.1f\", readRate),\n\t\t\t\t\"total_writes\", writes,\n\t\t\t\t\"total_reads\", reads,\n\t\t\t\t\"errors\", errors,\n\t\t\t\t\"elapsed\", time.Since(stats.startTime).Round(time.Second),\n\t\t\t)\n\n\t\t\tatomic.StoreInt64(\u0026stats.writes, 0)\n\t\t\tatomic.StoreInt64(\u0026stats.reads, 0)\n\t\t\tstats.lastReport = time.Now()\n\t\t\tstats.mu.Unlock()\n\t\t}\n\t}\n}\n\nfunc (c *LoadCommand) finalReport(stats *LoadStats) {\n\ttotalTime := time.Since(stats.startTime)\n\twrites := atomic.LoadInt64(\u0026stats.writes)\n\treads := atomic.LoadInt64(\u0026stats.reads)\n\terrors := atomic.LoadInt64(\u0026stats.errors)\n\n\tslog.Info(\"Load generation complete\",\n\t\t\"duration\", totalTime.Round(time.Second),\n\t\t\"total_writes\", writes,\n\t\t\"total_reads\", reads,\n\t\t\"total_errors\", errors,\n\t\t\"avg_writes_per_sec\", fmt.Sprintf(\"%.1f\", float64(writes)/totalTime.Seconds()),\n\t\t\"avg_reads_per_sec\", fmt.Sprintf(\"%.1f\", float64(reads)/totalTime.Seconds()),\n\t)\n}\n\nfunc (c *LoadCommand) Usage() {\n\tfmt.Fprintln(c.Main.Stdout, `\nGenerate continuous load on a SQLite database for testing.\n\nUsage:\n\n\tlitestream-test load [options]\n\nOptions:\n\n\t-db PATH\n\t Database path (required)\n\n\t-write-rate RATE\n\t Target writes per second\n\t Default: 100\n\n\t-duration DURATION\n\t How long to run (e.g., \"10m\", \"1h\")\n\t Default: 1m\n\n\t-pattern PATTERN\n\t Write pattern: constant, burst, random, wave\n\t Default: constant\n\n\t-payload-size SIZE\n\t Size of each write operation in bytes\n\t Default: 1024\n\n\t-read-ratio RATIO\n\t Read/write ratio (0.0-1.0)\n\t Default: 0.2\n\n\t-workers COUNT\n\t Number of concurrent workers\n\t Default: 1\n\nExamples:\n\n\t# Generate constant load for 10 minutes\n\tlitestream-test load -db /tmp/test.db -write-rate 100 -duration 10m\n\n\t# Generate burst pattern load\n\tlitestream-test load -db /tmp/test.db -pattern burst -duration 1h\n\n\t# Heavy write load with multiple workers\n\tlitestream-test load -db /tmp/test.db -write-rate 1000 -workers 4 -read-ratio 0.1\n`[1:])\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"rand","path":"crypto/rand","alias":"cryptorand","span":{"start":[5,1],"end":[5,26],"bytes":[34,59]}},{"name":"sql","path":"database/sql","span":{"start":[6,1],"end":[6,16],"bytes":[60,75]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[76,83]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[84,90]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[91,102]}},{"name":"rand","path":"math/rand","span":{"start":[10,1],"end":[10,13],"bytes":[103,115]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[116,121]}},{"name":"signal","path":"os/signal","span":{"start":[12,1],"end":[12,13],"bytes":[122,134]}},{"name":"sync","path":"sync","span":{"start":[13,1],"end":[13,8],"bytes":[135,142]}},{"name":"atomic","path":"sync/atomic","span":{"start":[14,1],"end":[14,15],"bytes":[143,157]}},{"name":"syscall","path":"syscall","span":{"start":[15,1],"end":[15,11],"bytes":[158,168]}},{"name":"time","path":"time","span":{"start":[16,1],"end":[16,8],"bytes":[169,176]}},{"name":"go-sqlite3","path":"github.com/mattn/go-sqlite3","alias":"_","span":{"start":[18,1],"end":[18,33],"bytes":[178,210]}}],"types":{"LoadCommand":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand","kind":"struct","span":{"start":[21,1],"end":[31,2],"bytes":[214,393]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Run":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Run","kind":"method","span":{"start":[42,1],"end":[75,2],"bytes":[543,1709]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[42,1],"end":[42,70],"bytes":[543,612]}},{"name":"args","type":"[]string","span":{"start":[42,1],"end":[42,70],"bytes":[543,612]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"43:8":{"kind":"call","span":{"start":[43,8],"end":[43,65],"bytes":[620,677]},"callee":null},"44:2":{"kind":"call","span":{"start":[44,2],"end":[44,59],"bytes":[679,736]},"callee":null},"45:2":{"kind":"call","span":{"start":[45,2],"end":[45,65],"bytes":[738,801]},"callee":null},"46:2":{"kind":"call","span":{"start":[46,2],"end":[46,75],"bytes":[803,876]},"callee":null},"47:2":{"kind":"call","span":{"start":[47,2],"end":[47,98],"bytes":[878,974]},"callee":null},"48:2":{"kind":"call","span":{"start":[48,2],"end":[48,90],"bytes":[976,1064]},"callee":null},"49:2":{"kind":"call","span":{"start":[49,2],"end":[49,78],"bytes":[1066,1142]},"callee":null},"50:2":{"kind":"call","span":{"start":[50,2],"end":[50,69],"bytes":[1144,1211]},"callee":null},"52:12":{"kind":"call","span":{"start":[52,12],"end":[52,26],"bytes":[1243,1257]},"callee":null},"57:10":{"kind":"call","span":{"start":[57,10],"end":[57,46],"bytes":[1315,1351]},"callee":null},"60:15":{"kind":"call","span":{"start":[60,15],"end":[60,28],"bytes":[1370,1383]},"callee":null},"61:10":{"kind":"call","span":{"start":[61,10],"end":[61,56],"bytes":[1407,1453]},"callee":null},"64:2":{"kind":"call","span":{"start":[64,2],"end":[72,3],"bytes":[1459,1678]},"callee":null},"74:9":{"kind":"call","span":{"start":[74,9],"end":[74,28],"bytes":[1688,1707]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad"}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Usage":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Usage","kind":"method","span":{"start":[285,1],"end":[333,2],"bytes":[7012,8039]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"286:2":{"kind":"call","span":{"start":[286,2],"end":[332,7],"bytes":[7045,8037]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.calculateRate":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.calculateRate","kind":"method","span":{"start":[165,1],"end":[181,2],"bytes":[3859,4197]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.calculateRate","parameters":[{"name":"stats","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats","span":{"start":[165,1],"end":[165,64],"bytes":[3859,3922]}}],"return_type":"float64","metrics":{"cyclomatic":7},"body":{"166:13":{"kind":"call","span":{"start":[166,13],"end":[166,40],"bytes":[3935,3962]},"callee":null},"170:6":{"kind":"call","span":{"start":[170,6],"end":[170,18],"bytes":[4014,4026]},"callee":null},"175:10":{"kind":"call","span":{"start":[175,10],"end":[175,24],"bytes":[4092,4106]},"callee":null},"177:20":{"kind":"call","span":{"start":[177,20],"end":[177,43],"bytes":[4146,4169]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.sinApprox"}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.ensureTestTable":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.ensureTestTable","kind":"method","span":{"start":[194,1],"end":[211,2],"bytes":[4501,4946]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.ensureTestTable","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[194,1],"end":[194,58],"bytes":[4501,4558]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"204:12":{"kind":"call","span":{"start":[204,12],"end":[204,30],"bytes":[4752,4770]},"callee":null},"206:10":{"kind":"call","span":{"start":[206,10],"end":[206,45],"bytes":[4797,4832]},"callee":null},"209:11":{"kind":"call","span":{"start":[209,11],"end":[209,96],"bytes":[4847,4932]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.finalReport":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.finalReport","kind":"method","span":{"start":[269,1],"end":[283,2],"bytes":[6461,7010]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.finalReport","parameters":[{"name":"stats","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats","span":{"start":[269,1],"end":[269,54],"bytes":[6461,6514]}}],"metrics":{"cyclomatic":1},"body":{"270:15":{"kind":"call","span":{"start":[270,15],"end":[270,42],"bytes":[6529,6556]},"callee":null},"271:12":{"kind":"call","span":{"start":[271,12],"end":[271,43],"bytes":[6568,6599]},"callee":null},"272:11":{"kind":"call","span":{"start":[272,11],"end":[272,41],"bytes":[6610,6640]},"callee":null},"273:12":{"kind":"call","span":{"start":[273,12],"end":[273,43],"bytes":[6652,6683]},"callee":null},"275:2":{"kind":"call","span":{"start":[275,2],"end":[282,3],"bytes":[6686,7008]},"callee":null},"276:15":{"kind":"call","span":{"start":[276,15],"end":[276,43],"bytes":[6738,6766]},"callee":null},"280:25":{"kind":"call","span":{"start":[280,25],"end":[280,81],"bytes":[6868,6924]},"callee":null},"280:45":{"kind":"call","span":{"start":[280,45],"end":[280,60],"bytes":[6888,6903]},"callee":null},"280:61":{"kind":"call","span":{"start":[280,61],"end":[280,80],"bytes":[6904,6923]},"callee":null},"281:24":{"kind":"call","span":{"start":[281,24],"end":[281,79],"bytes":[6949,7004]},"callee":null},"281:44":{"kind":"call","span":{"start":[281,44],"end":[281,58],"bytes":[6969,6983]},"callee":null},"281:59":{"kind":"call","span":{"start":[281,59],"end":[281,78],"bytes":[6984,7003]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad","kind":"method","span":{"start":[77,1],"end":[122,2],"bytes":[1711,2676]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[77,1],"end":[77,64],"bytes":[1711,1774]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"103:15":{"kind":"call","span":{"start":[103,15],"end":[103,25],"bytes":[2393,2403]},"callee":null},"104:15":{"kind":"call","span":{"start":[104,15],"end":[104,25],"bytes":[2419,2429]},"callee":null},"109:3":{"kind":"call","span":{"start":[109,3],"end":[109,12],"bytes":[2494,2503]},"callee":null},"110:6":{"kind":"call","span":{"start":[110,6],"end":[113,7],"bytes":[2509,2593]},"callee":null,"is_goroutine":true},"116:5":{"kind":"call","span":{"start":[116,5],"end":[116,30],"bytes":[2602,2627]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.reportStats","is_goroutine":true},"118:2":{"kind":"call","span":{"start":[118,2],"end":[118,11],"bytes":[2630,2639]},"callee":null},"120:2":{"kind":"call","span":{"start":[120,2],"end":[120,22],"bytes":[2642,2662]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.finalReport"},"78:13":{"kind":"call","span":{"start":[78,13],"end":[78,59],"bytes":[1787,1833]},"callee":null},"80:10":{"kind":"call","span":{"start":[80,10],"end":[80,46],"bytes":[1860,1896]},"callee":null},"82:8":{"kind":"call","span":{"start":[82,8],"end":[82,18],"bytes":[1907,1917]},"callee":null},"84:2":{"kind":"call","span":{"start":[84,2],"end":[84,35],"bytes":[1920,1953]},"callee":null},"85:2":{"kind":"call","span":{"start":[85,2],"end":[85,31],"bytes":[1955,1984]},"callee":null},"87:12":{"kind":"call","span":{"start":[87,12],"end":[87,33],"bytes":[1997,2018]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.ensureTestTable"},"88:10":{"kind":"call","span":{"start":[88,10],"end":[88,50],"bytes":[2042,2082]},"callee":null},"91:17":{"kind":"call","span":{"start":[91,17],"end":[91,53],"bytes":[2103,2139]},"callee":null},"92:8":{"kind":"call","span":{"start":[92,8],"end":[92,16],"bytes":[2147,2155]},"callee":null},"94:13":{"kind":"call","span":{"start":[94,13],"end":[94,36],"bytes":[2169,2192]},"callee":null},"95:2":{"kind":"call","span":{"start":[95,2],"end":[95,55],"bytes":[2194,2247]},"callee":null},"96:5":{"kind":"call","span":{"start":[96,5],"end":[100,5],"bytes":[2252,2355]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad.closure_1","kind":"function","span":{"start":[96,1],"end":[100,5],"bytes":[2248,2355]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad.closure_1","parameters":[],"body":{"98:3":{"kind":"call","span":{"start":[98,3],"end":[98,67],"bytes":[2275,2339]},"callee":null},"99:3":{"kind":"call","span":{"start":[99,3],"end":[99,11],"bytes":[2342,2350]},"callee":null}}},"closure_2":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad.closure_2","kind":"function","span":{"start":[110,1],"end":[113,7],"bytes":[2504,2593]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad.closure_2","parameters":[{"name":"workerID","type":"int","span":{"start":[110,1],"end":[110,26],"bytes":[2504,2529]}}],"body":{"111:10":{"kind":"call","span":{"start":[111,10],"end":[111,19],"bytes":[2539,2548]},"callee":null},"112:4":{"kind":"call","span":{"start":[112,4],"end":[112,38],"bytes":[2552,2586]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead","kind":"method","span":{"start":[226,1],"end":[232,2],"bytes":[5301,5538]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[226,1],"end":[226,54],"bytes":[5301,5354]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"229:15":{"kind":"call","span":{"start":[229,15],"end":[229,25],"bytes":[5447,5457]},"callee":null},"231:9":{"kind":"call","span":{"start":[231,9],"end":[231,38],"bytes":[5494,5523]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performWrite":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performWrite","kind":"method","span":{"start":[213,1],"end":[224,2],"bytes":[4948,5299]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performWrite","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[213,1],"end":[213,68],"bytes":[4948,5015]}},{"name":"data","type":"[]byte","span":{"start":[213,1],"end":[213,68],"bytes":[4948,5015]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"214:15":{"kind":"call","span":{"start":[214,15],"end":[214,60],"bytes":[5030,5075]},"callee":null},"214:38":{"kind":"call","span":{"start":[214,38],"end":[214,48],"bytes":[5053,5063]},"callee":null},"215:14":{"kind":"call","span":{"start":[215,14],"end":[215,26],"bytes":[5089,5101]},"callee":null},"216:15":{"kind":"call","span":{"start":[216,15],"end":[216,25],"bytes":[5116,5126]},"callee":null},"218:12":{"kind":"call","span":{"start":[218,12],"end":[221,42],"bytes":[5146,5284]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.reportStats":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.reportStats","kind":"method","span":{"start":[234,1],"end":[267,2],"bytes":[5540,6459]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.reportStats","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[234,1],"end":[234,75],"bytes":[5540,5614]}},{"name":"stats","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats","span":{"start":[234,1],"end":[234,75],"bytes":[5540,5614]}}],"metrics":{"cyclomatic":5},"body":{"235:12":{"kind":"call","span":{"start":[235,12],"end":[235,43],"bytes":[5626,5657]},"callee":null},"236:8":{"kind":"call","span":{"start":[236,8],"end":[236,21],"bytes":[5665,5678]},"callee":null},"240:10":{"kind":"call","span":{"start":[240,10],"end":[240,20],"bytes":[5707,5717]},"callee":null},"243:4":{"kind":"call","span":{"start":[243,4],"end":[243,19],"bytes":[5751,5766]},"callee":null},"244:15":{"kind":"call","span":{"start":[244,15],"end":[244,43],"bytes":[5781,5809]},"callee":null},"245:14":{"kind":"call","span":{"start":[245,14],"end":[245,45],"bytes":[5833,5864]},"callee":null},"246:13":{"kind":"call","span":{"start":[246,13],"end":[246,43],"bytes":[5877,5907]},"callee":null},"247:14":{"kind":"call","span":{"start":[247,14],"end":[247,45],"bytes":[5921,5952]},"callee":null},"249:17":{"kind":"call","span":{"start":[249,17],"end":[249,32],"bytes":[5970,5985]},"callee":null},"250:16":{"kind":"call","span":{"start":[250,16],"end":[250,30],"bytes":[6011,6025]},"callee":null},"252:4":{"kind":"call","span":{"start":[252,4],"end":[259,5],"bytes":[6040,6318]},"callee":null},"253:23":{"kind":"call","span":{"start":[253,23],"end":[253,53],"bytes":[6091,6121]},"callee":null},"254:22":{"kind":"call","span":{"start":[254,22],"end":[254,51],"bytes":[6144,6173]},"callee":null},"258:16":{"kind":"call","span":{"start":[258,16],"end":[258,43],"bytes":[6266,6293]},"callee":null},"261:4":{"kind":"call","span":{"start":[261,4],"end":[261,39],"bytes":[6323,6358]},"callee":null},"262:4":{"kind":"call","span":{"start":[262,4],"end":[262,38],"bytes":[6362,6396]},"callee":null},"263:23":{"kind":"call","span":{"start":[263,23],"end":[263,33],"bytes":[6419,6429]},"callee":null},"264:4":{"kind":"call","span":{"start":[264,4],"end":[264,21],"bytes":[6433,6450]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.worker":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.worker","kind":"method","span":{"start":[124,1],"end":[163,2],"bytes":[2678,3857]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.worker","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[124,1],"end":[124,96],"bytes":[2678,2773]}},{"name":"db","type":"*database/sql.DB","span":{"start":[124,1],"end":[124,96],"bytes":[2678,2773]}},{"name":"workerID","type":"int","span":{"start":[124,1],"end":[124,96],"bytes":[2678,2773]}},{"name":"stats","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats","span":{"start":[124,1],"end":[124,96],"bytes":[2678,2773]}}],"metrics":{"cyclomatic":9},"body":{"125:12":{"kind":"call","span":{"start":[125,12],"end":[125,78],"bytes":[2785,2851]},"callee":null},"125:41":{"kind":"call","span":{"start":[125,41],"end":[125,77],"bytes":[2814,2850]},"callee":null},"126:8":{"kind":"call","span":{"start":[126,8],"end":[126,21],"bytes":[2859,2872]},"callee":null},"128:10":{"kind":"call","span":{"start":[128,10],"end":[128,37],"bytes":[2883,2910]},"callee":null},"129:2":{"kind":"call","span":{"start":[129,2],"end":[129,23],"bytes":[2912,2933]},"callee":null},"133:10":{"kind":"call","span":{"start":[133,10],"end":[133,20],"bytes":[2962,2972]},"callee":null},"141:12":{"kind":"call","span":{"start":[141,12],"end":[141,34],"bytes":[3311,3333]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.calculateRate"},"142:35":{"kind":"call","span":{"start":[142,35],"end":[142,49],"bytes":[3368,3382]},"callee":null},"146:7":{"kind":"call","span":{"start":[146,7],"end":[146,21],"bytes":[3418,3432]},"callee":null},"147:15":{"kind":"call","span":{"start":[147,15],"end":[147,32],"bytes":[3463,3480]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead"},"148:6":{"kind":"call","span":{"start":[148,6],"end":[148,39],"bytes":[3500,3533]},"callee":null},"149:6":{"kind":"call","span":{"start":[149,6],"end":[149,45],"bytes":[3539,3578]},"callee":null},"151:6":{"kind":"call","span":{"start":[151,6],"end":[151,38],"bytes":[3597,3629]},"callee":null},"154:15":{"kind":"call","span":{"start":[154,15],"end":[154,39],"bytes":[3662,3686]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performWrite"},"155:6":{"kind":"call","span":{"start":[155,6],"end":[155,39],"bytes":[3706,3739]},"callee":null},"156:6":{"kind":"call","span":{"start":[156,6],"end":[156,46],"bytes":[3745,3785]},"callee":null},"158:6":{"kind":"call","span":{"start":[158,6],"end":[158,39],"bytes":[3804,3837]},"callee":null}}}},"fields":{"DB":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/DB","kind":"field","type":"string","span":{"start":[24,1],"end":[24,20],"bytes":[253,272]}},"Duration":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/Duration","kind":"field","type":"time.Duration","span":{"start":[26,1],"end":[26,27],"bytes":[290,316]}},"Main":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/Main","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.Main","span":{"start":[22,1],"end":[22,12],"bytes":[240,251]}},"Pattern":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/Pattern","kind":"field","type":"string","span":{"start":[27,1],"end":[27,20],"bytes":[317,336]}},"PayloadSize":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/PayloadSize","kind":"field","type":"int","span":{"start":[28,1],"end":[28,17],"bytes":[337,353]}},"ReadRatio":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/ReadRatio","kind":"field","type":"float64","span":{"start":[29,1],"end":[29,21],"bytes":[354,374]}},"Workers":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/Workers","kind":"field","type":"int","span":{"start":[30,1],"end":[30,17],"bytes":[375,391]}},"WriteRate":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/WriteRate","kind":"field","type":"int","span":{"start":[25,1],"end":[25,17],"bytes":[273,289]}}}},"LoadStats":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats","kind":"struct","span":{"start":[33,1],"end":[40,2],"bytes":[395,541]},"callables":{},"fields":{"errors":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats/errors","kind":"field","type":"int64","span":{"start":[36,1],"end":[36,18],"bytes":[455,472]}},"lastReport":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats/lastReport","kind":"field","type":"time.Time","span":{"start":[38,1],"end":[38,22],"bytes":[495,516]}},"mu":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats/mu","kind":"field","type":"sync.Mutex","span":{"start":[39,1],"end":[39,23],"bytes":[517,539]}},"reads":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats/reads","kind":"field","type":"int64","span":{"start":[35,1],"end":[35,18],"bytes":[437,454]}},"startTime":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats/startTime","kind":"field","type":"time.Time","span":{"start":[37,1],"end":[37,22],"bytes":[473,494]}},"writes":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadStats/writes","kind":"field","type":"int64","span":{"start":[34,1],"end":[34,18],"bytes":[419,436]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream-test.sinApprox":{"id":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.sinApprox","kind":"function","span":{"start":[183,1],"end":[192,2],"bytes":[4199,4499]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.sinApprox","parameters":[{"name":"x","type":"float64","span":{"start":[183,1],"end":[183,36],"bytes":[4199,4234]}}],"return_type":"float64","metrics":{"cyclomatic":2},"body":{"185:10":{"kind":"call","span":{"start":[185,10],"end":[185,31],"bytes":[4277,4298]},"callee":null},"185:18":{"kind":"call","span":{"start":[185,18],"end":[185,30],"bytes":[4285,4297]},"callee":null}}}},"content_hash":"4a3c39cc4c30c25d8696d208ee058c8172951cbd2841a2652d75332912515aa9"},"cmd/litestream-test/main.go":{"id":"can://go/litestream/cmd/litestream-test/main.go","kind":"module","span":{"start":[1,1],"end":[124,1],"bytes":[0,2525]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nvar (\n\tVersion = \"development\"\n\tCommit = \"\"\n)\n\nfunc main() {\n\tm := NewMain()\n\tif err := m.Run(context.Background(), os.Args[1:]); err != nil {\n\t\tfmt.Fprintln(os.Stderr, err)\n\t\tos.Exit(1)\n\t}\n}\n\ntype Main struct {\n\tStdin io.Reader\n\tStdout io.Writer\n\tStderr io.Writer\n}\n\nfunc NewMain() *Main {\n\treturn \u0026Main{\n\t\tStdin: os.Stdin,\n\t\tStdout: os.Stdout,\n\t\tStderr: os.Stderr,\n\t}\n}\n\nfunc (m *Main) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-test\", flag.ExitOnError)\n\tfs.Usage = m.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() == 0 || fs.Arg(0) == \"help\" {\n\t\tm.Usage()\n\t\treturn nil\n\t}\n\n\tswitch fs.Arg(0) {\n\tcase \"populate\":\n\t\treturn (\u0026PopulateCommand{Main: m}).Run(ctx, fs.Args()[1:])\n\tcase \"load\":\n\t\treturn (\u0026LoadCommand{Main: m}).Run(ctx, fs.Args()[1:])\n\tcase \"shrink\":\n\t\treturn (\u0026ShrinkCommand{Main: m}).Run(ctx, fs.Args()[1:])\n\tcase \"validate\":\n\t\treturn (\u0026ValidateCommand{Main: m}).Run(ctx, fs.Args()[1:])\n\tcase \"version\":\n\t\treturn (\u0026VersionCommand{Main: m}).Run(ctx, fs.Args()[1:])\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown command: %s\", fs.Arg(0))\n\t}\n}\n\nfunc (m *Main) Usage() {\n\tfmt.Fprintln(m.Stdout, `\nlitestream-test is a testing harness for Litestream database replication.\n\nUsage:\n\n\tlitestream-test \u003ccommand\u003e [arguments]\n\nCommands:\n\n\tpopulate Quickly populate a database to a target size\n\tload Generate continuous load on a database\n\tshrink Shrink a database by deleting data\n\tvalidate Validate replication integrity\n\tversion Show version information\n\nUse \"litestream-test \u003ccommand\u003e -h\" for more information about a command.\n`[1:])\n}\n\ntype VersionCommand struct {\n\tMain *Main\n}\n\nfunc (c *VersionCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-test version\", flag.ExitOnError)\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tfmt.Fprintf(c.Main.Stdout, \"litestream-test %s\\n\", Version)\n\tif Commit != \"\" {\n\t\tfmt.Fprintf(c.Main.Stdout, \"commit: %s\\n\", Commit)\n\t}\n\tfmt.Fprintf(c.Main.Stdout, \"go: %s\\n\", strings.TrimPrefix(runtime.Version(), \"go\"))\n\treturn nil\n}\n\nfunc (c *VersionCommand) Usage() {\n\tfmt.Fprintln(c.Main.Stdout, `\nShow version information for litestream-test.\n\nUsage:\n\n\tlitestream-test version\n`[1:])\n}\n\nfunc init() {\n\tlogger := slog.New(slog.NewTextHandler(os.Stderr, \u0026slog.HandlerOptions{\n\t\tLevel: slog.LevelInfo,\n\t}))\n\tslog.SetDefault(logger)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"flag","path":"flag","span":{"start":[5,1],"end":[5,8],"bytes":[34,41]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[42,48]}},{"name":"io","path":"io","span":{"start":[7,1],"end":[7,6],"bytes":[49,54]}},{"name":"slog","path":"log/slog","span":{"start":[8,1],"end":[8,12],"bytes":[55,66]}},{"name":"os","path":"os","span":{"start":[9,1],"end":[9,6],"bytes":[67,72]}},{"name":"runtime","path":"runtime","span":{"start":[10,1],"end":[10,11],"bytes":[73,83]}},{"name":"strings","path":"strings","span":{"start":[11,1],"end":[11,11],"bytes":[84,94]}}],"types":{"Main":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main","kind":"struct","span":{"start":[27,1],"end":[31,2],"bytes":[292,366]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","kind":"method","span":{"start":[41,1],"end":[67,2],"bytes":[474,1216]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[41,1],"end":[41,63],"bytes":[474,536]}},{"name":"args","type":"[]string","span":{"start":[41,1],"end":[41,63],"bytes":[474,536]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"42:8":{"kind":"call","span":{"start":[42,8],"end":[42,60],"bytes":[544,596]},"callee":null},"44:12":{"kind":"call","span":{"start":[44,12],"end":[44,26],"bytes":[628,642]},"callee":null},"48:23":{"kind":"call","span":{"start":[48,23],"end":[48,32],"bytes":[696,705]},"callee":null},"48:5":{"kind":"call","span":{"start":[48,5],"end":[48,14],"bytes":[678,687]},"callee":null},"49:3":{"kind":"call","span":{"start":[49,3],"end":[49,12],"bytes":[720,729]},"callee":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Usage"},"53:9":{"kind":"call","span":{"start":[53,9],"end":[53,18],"bytes":[755,764]},"callee":null},"55:10":{"kind":"call","span":{"start":[55,10],"end":[55,61],"bytes":[794,845]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run"},"55:47":{"kind":"call","span":{"start":[55,47],"end":[55,56],"bytes":[831,840]},"callee":null},"57:10":{"kind":"call","span":{"start":[57,10],"end":[57,57],"bytes":[869,916]},"callee":null},"57:43":{"kind":"call","span":{"start":[57,43],"end":[57,52],"bytes":[902,911]},"callee":null},"59:10":{"kind":"call","span":{"start":[59,10],"end":[59,59],"bytes":[942,991]},"callee":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Run"},"59:45":{"kind":"call","span":{"start":[59,45],"end":[59,54],"bytes":[977,986]},"callee":null},"61:10":{"kind":"call","span":{"start":[61,10],"end":[61,61],"bytes":[1019,1070]},"callee":null},"61:47":{"kind":"call","span":{"start":[61,47],"end":[61,56],"bytes":[1056,1065]},"callee":null},"63:10":{"kind":"call","span":{"start":[63,10],"end":[63,60],"bytes":[1097,1147]},"callee":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Run"},"63:46":{"kind":"call","span":{"start":[63,46],"end":[63,55],"bytes":[1133,1142]},"callee":null},"65:10":{"kind":"call","span":{"start":[65,10],"end":[65,54],"bytes":[1167,1211]},"callee":null},"65:44":{"kind":"call","span":{"start":[65,44],"end":[65,53],"bytes":[1201,1210]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.Main.Usage":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Usage","kind":"method","span":{"start":[69,1],"end":[87,2],"bytes":[1218,1725]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.Main.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"70:2":{"kind":"call","span":{"start":[70,2],"end":[86,7],"bytes":[1244,1723]},"callee":null}}}},"fields":{"Stderr":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/Stderr","kind":"field","type":"io.Writer","span":{"start":[30,1],"end":[30,18],"bytes":[347,364]}},"Stdin":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/Stdin","kind":"field","type":"io.Reader","span":{"start":[28,1],"end":[28,18],"bytes":[311,328]}},"Stdout":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/Stdout","kind":"field","type":"io.Writer","span":{"start":[29,1],"end":[29,18],"bytes":[329,346]}}}},"VersionCommand":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand","kind":"struct","span":{"start":[89,1],"end":[91,2],"bytes":[1727,1769]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Run":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Run","kind":"method","span":{"start":[93,1],"end":[106,2],"bytes":[1771,2223]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[93,1],"end":[93,73],"bytes":[1771,1843]}},{"name":"args","type":"[]string","span":{"start":[93,1],"end":[93,73],"bytes":[1771,1843]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"100:2":{"kind":"call","span":{"start":[100,2],"end":[100,61],"bytes":[1990,2049]},"callee":null},"102:3":{"kind":"call","span":{"start":[102,3],"end":[102,53],"bytes":[2071,2121]},"callee":null},"104:2":{"kind":"call","span":{"start":[104,2],"end":[104,85],"bytes":[2126,2209]},"callee":null},"104:41":{"kind":"call","span":{"start":[104,41],"end":[104,84],"bytes":[2165,2208]},"callee":null},"104:60":{"kind":"call","span":{"start":[104,60],"end":[104,77],"bytes":[2184,2201]},"callee":null},"94:8":{"kind":"call","span":{"start":[94,8],"end":[94,68],"bytes":[1851,1911]},"callee":null},"96:12":{"kind":"call","span":{"start":[96,12],"end":[96,26],"bytes":[1943,1957]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Usage":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Usage","kind":"method","span":{"start":[108,1],"end":[116,2],"bytes":[2225,2379]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"109:2":{"kind":"call","span":{"start":[109,2],"end":[115,7],"bytes":[2261,2377]},"callee":null}}}},"fields":{"Main":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand/Main","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.Main","span":{"start":[90,1],"end":[90,12],"bytes":[1756,1767]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream-test.NewMain":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.NewMain","kind":"function","span":{"start":[33,1],"end":[39,2],"bytes":[368,472]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.NewMain","parameters":[],"return_type":"*github.com/benbjohnson/litestream/cmd/litestream-test.Main","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream-test.init":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.init","kind":"function","span":{"start":[118,1],"end":[123,2],"bytes":[2381,2524]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"119:12":{"kind":"call","span":{"start":[119,12],"end":[121,5],"bytes":[2406,2497]},"callee":null},"119:21":{"kind":"call","span":{"start":[119,21],"end":[121,4],"bytes":[2415,2496]},"callee":null},"122:2":{"kind":"call","span":{"start":[122,2],"end":[122,25],"bytes":[2499,2522]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.main":{"id":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.main","kind":"function","span":{"start":[19,1],"end":[25,2],"bytes":[146,290]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.main","parameters":[],"metrics":{"cyclomatic":2},"body":{"20:7":{"kind":"call","span":{"start":[20,7],"end":[20,16],"bytes":[166,175]},"callee":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.NewMain"},"21:12":{"kind":"call","span":{"start":[21,12],"end":[21,52],"bytes":[187,227]},"callee":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run"},"21:18":{"kind":"call","span":{"start":[21,18],"end":[21,38],"bytes":[193,213]},"callee":null},"22:3":{"kind":"call","span":{"start":[22,3],"end":[22,31],"bytes":[244,272]},"callee":null},"23:3":{"kind":"call","span":{"start":[23,3],"end":[23,13],"bytes":[275,285]},"callee":null}}}},"content_hash":"1aec89087aea47d1cabfc7a216b2c37b7b7cf96292167f8e81e81125e0bc17b9"},"cmd/litestream-test/populate.go":{"id":"can://go/litestream/cmd/litestream-test/populate.go","kind":"module","span":{"start":[1,1],"end":[323,1],"bytes":[0,7805]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\tcryptorand \"crypto/rand\"\n\t\"database/sql\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"math/rand\"\n\t\"os\"\n\t\"time\"\n\n\t_ \"github.com/mattn/go-sqlite3\"\n)\n\ntype PopulateCommand struct {\n\tMain *Main\n\n\tDB string\n\tTargetSize string\n\tRowSize int\n\tBatchSize int\n\tTableCount int\n\tIndexRatio float64\n\tPageSize int\n}\n\nfunc (c *PopulateCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-test populate\", flag.ExitOnError)\n\tfs.StringVar(\u0026c.DB, \"db\", \"\", \"Database path (required)\")\n\tfs.StringVar(\u0026c.TargetSize, \"target-size\", \"100MB\", \"Target database size (e.g., 1GB, 500MB)\")\n\tfs.IntVar(\u0026c.RowSize, \"row-size\", 1024, \"Average row size in bytes\")\n\tfs.IntVar(\u0026c.BatchSize, \"batch-size\", 1000, \"Rows per transaction\")\n\tfs.IntVar(\u0026c.TableCount, \"table-count\", 1, \"Number of tables to create\")\n\tfs.Float64Var(\u0026c.IndexRatio, \"index-ratio\", 0.2, \"Percentage of columns to index (0.0-1.0)\")\n\tfs.IntVar(\u0026c.PageSize, \"page-size\", 4096, \"SQLite page size in bytes\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif c.DB == \"\" {\n\t\treturn fmt.Errorf(\"database path required\")\n\t}\n\n\ttargetBytes, err := parseSize(c.TargetSize)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid target size: %w\", err)\n\t}\n\n\tslog.Info(\"Starting database population\",\n\t\t\"db\", c.DB,\n\t\t\"target_size\", c.TargetSize,\n\t\t\"row_size\", c.RowSize,\n\t\t\"batch_size\", c.BatchSize,\n\t\t\"table_count\", c.TableCount,\n\t\t\"page_size\", c.PageSize,\n\t)\n\n\tif err := c.populateDatabase(ctx, targetBytes); err != nil {\n\t\treturn fmt.Errorf(\"populate database: %w\", err)\n\t}\n\n\tslog.Info(\"Database population complete\", \"db\", c.DB)\n\treturn nil\n}\n\nfunc (c *PopulateCommand) populateDatabase(ctx context.Context, targetBytes int64) error {\n\tif err := os.Remove(c.DB); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\tslog.Warn(\"Could not remove existing database\", \"error\", err)\n\t}\n\n\tdb, err := sql.Open(\"sqlite3\", c.DB)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open database: %w\", err)\n\t}\n\tdefer db.Close()\n\n\tif _, err := db.Exec(fmt.Sprintf(\"PRAGMA page_size = %d\", c.PageSize)); err != nil {\n\t\treturn fmt.Errorf(\"set page size: %w\", err)\n\t}\n\n\tif _, err := db.Exec(\"PRAGMA journal_mode = WAL\"); err != nil {\n\t\treturn fmt.Errorf(\"set journal mode: %w\", err)\n\t}\n\n\tif _, err := db.Exec(\"PRAGMA synchronous = NORMAL\"); err != nil {\n\t\treturn fmt.Errorf(\"set synchronous: %w\", err)\n\t}\n\n\tfor i := 0; i \u003c c.TableCount; i++ {\n\t\ttableName := fmt.Sprintf(\"test_table_%d\", i)\n\n\t\tcreateSQL := fmt.Sprintf(`\n\t\t\tCREATE TABLE %s (\n\t\t\t\tid INTEGER PRIMARY KEY AUTOINCREMENT,\n\t\t\t\tdata BLOB,\n\t\t\t\ttext_field TEXT,\n\t\t\t\tint_field INTEGER,\n\t\t\t\tfloat_field REAL,\n\t\t\t\ttimestamp INTEGER\n\t\t\t)\n\t\t`, tableName)\n\n\t\tif _, err := db.Exec(createSQL); err != nil {\n\t\t\treturn fmt.Errorf(\"create table %s: %w\", tableName, err)\n\t\t}\n\n\t\tif c.IndexRatio \u003e 0 {\n\t\t\tif rand.Float64() \u003c c.IndexRatio {\n\t\t\t\tindexSQL := fmt.Sprintf(\"CREATE INDEX idx_%s_timestamp ON %s(timestamp)\", tableName, tableName)\n\t\t\t\tif _, err := db.Exec(indexSQL); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"create index: %w\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif rand.Float64() \u003c c.IndexRatio {\n\t\t\t\tindexSQL := fmt.Sprintf(\"CREATE INDEX idx_%s_int ON %s(int_field)\", tableName, tableName)\n\t\t\t\tif _, err := db.Exec(indexSQL); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"create index: %w\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttotalRows := int(targetBytes / int64(c.RowSize))\n\trowsPerTable := totalRows / c.TableCount\n\tif rowsPerTable == 0 {\n\t\trowsPerTable = 1\n\t}\n\n\tslog.Info(\"Populating database\",\n\t\t\"target_bytes\", targetBytes,\n\t\t\"total_rows\", totalRows,\n\t\t\"rows_per_table\", rowsPerTable,\n\t)\n\n\tstartTime := time.Now()\n\tfor tableIdx := 0; tableIdx \u003c c.TableCount; tableIdx++ {\n\t\ttableName := fmt.Sprintf(\"test_table_%d\", tableIdx)\n\n\t\tif err := c.populateTable(ctx, db, tableName, rowsPerTable); err != nil {\n\t\t\treturn fmt.Errorf(\"populate table %s: %w\", tableName, err)\n\t\t}\n\n\t\tcurrentSize, _ := getDatabaseSize(c.DB)\n\t\tprogress := float64(currentSize) / float64(targetBytes) * 100\n\t\tslog.Info(\"Progress\",\n\t\t\t\"table\", tableName,\n\t\t\t\"current_size_mb\", currentSize/1024/1024,\n\t\t\t\"progress_percent\", fmt.Sprintf(\"%.1f\", progress),\n\t\t)\n\n\t\tif currentSize \u003e= targetBytes {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tduration := time.Since(startTime)\n\tfinalSize, _ := getDatabaseSize(c.DB)\n\n\tslog.Info(\"Population complete\",\n\t\t\"duration\", duration,\n\t\t\"final_size_mb\", finalSize/1024/1024,\n\t\t\"throughput_mb_per_sec\", fmt.Sprintf(\"%.2f\", float64(finalSize)/1024/1024/duration.Seconds()),\n\t)\n\n\treturn nil\n}\n\nfunc (c *PopulateCommand) populateTable(ctx context.Context, db *sql.DB, tableName string, rowCount int) error {\n\tdata := make([]byte, c.RowSize)\n\n\tfor i := 0; i \u003c rowCount; i += c.BatchSize {\n\t\ttx, err := db.Begin()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"begin transaction: %w\", err)\n\t\t}\n\n\t\tstmt, err := tx.Prepare(fmt.Sprintf(`\n\t\t\tINSERT INTO %s (data, text_field, int_field, float_field, timestamp)\n\t\t\tVALUES (?, ?, ?, ?, ?)\n\t\t`, tableName))\n\t\tif err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn fmt.Errorf(\"prepare statement: %w\", err)\n\t\t}\n\n\t\tbatchEnd := i + c.BatchSize\n\t\tif batchEnd \u003e rowCount {\n\t\t\tbatchEnd = rowCount\n\t\t}\n\n\t\tfor j := i; j \u003c batchEnd; j++ {\n\t\t\tcryptorand.Read(data)\n\t\t\ttextField := fmt.Sprintf(\"row_%d_%d\", i, j)\n\t\t\tintField := rand.Int63()\n\t\t\tfloatField := rand.Float64() * 1000\n\t\t\ttimestamp := time.Now().Unix()\n\n\t\t\tif _, err := stmt.Exec(data, textField, intField, floatField, timestamp); err != nil {\n\t\t\t\tstmt.Close()\n\t\t\t\ttx.Rollback()\n\t\t\t\treturn fmt.Errorf(\"insert row: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tstmt.Close()\n\t\tif err := tx.Commit(); err != nil {\n\t\t\treturn fmt.Errorf(\"commit transaction: %w\", err)\n\t\t}\n\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\treturn ctx.Err()\n\t\tdefault:\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (c *PopulateCommand) Usage() {\n\tfmt.Fprintln(c.Main.Stdout, `\nPopulate a SQLite database to a target size for testing.\n\nUsage:\n\n\tlitestream-test populate [options]\n\nOptions:\n\n\t-db PATH\n\t Database path (required)\n\n\t-target-size SIZE\n\t Target database size (e.g., \"1GB\", \"500MB\")\n\t Default: 100MB\n\n\t-row-size SIZE\n\t Average row size in bytes\n\t Default: 1024\n\n\t-batch-size COUNT\n\t Number of rows per transaction\n\t Default: 1000\n\n\t-table-count COUNT\n\t Number of tables to create\n\t Default: 1\n\n\t-index-ratio RATIO\n\t Percentage of columns to index (0.0-1.0)\n\t Default: 0.2\n\n\t-page-size SIZE\n\t SQLite page size in bytes\n\t Default: 4096\n\nExamples:\n\n\t# Create a 1GB database with default settings\n\tlitestream-test populate -db /tmp/test.db -target-size 1GB\n\n\t# Create a 2GB database with larger rows\n\tlitestream-test populate -db /tmp/test.db -target-size 2GB -row-size 4096\n\n\t# Test lock page with different page sizes\n\tlitestream-test populate -db /tmp/test.db -target-size 1.5GB -page-size 8192\n`[1:])\n}\n\nfunc parseSize(s string) (int64, error) {\n\t// Check suffixes in order from longest to shortest to avoid \"B\" matching before \"MB\"\n\tsuffixes := []struct {\n\t\tsuffix string\n\t\tmultiplier int64\n\t}{\n\t\t{\"TB\", 1024 * 1024 * 1024 * 1024},\n\t\t{\"GB\", 1024 * 1024 * 1024},\n\t\t{\"MB\", 1024 * 1024},\n\t\t{\"KB\", 1024},\n\t\t{\"B\", 1},\n\t}\n\n\tfor _, sf := range suffixes {\n\t\tif len(s) \u003e len(sf.suffix) \u0026\u0026 s[len(s)-len(sf.suffix):] == sf.suffix {\n\t\t\tvar value float64\n\t\t\tif _, err := fmt.Sscanf(s[:len(s)-len(sf.suffix)], \"%f\", \u0026value); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn int64(value * float64(sf.multiplier)), nil\n\t\t}\n\t}\n\n\tvar value int64\n\tif _, err := fmt.Sscanf(s, \"%d\", \u0026value); err != nil {\n\t\treturn 0, err\n\t}\n\treturn value, nil\n}\n\nfunc getDatabaseSize(path string) (int64, error) {\n\tinfo, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tsize := info.Size()\n\n\twalPath := path + \"-wal\"\n\tif walInfo, err := os.Stat(walPath); err == nil {\n\t\tsize += walInfo.Size()\n\t}\n\n\tshmPath := path + \"-shm\"\n\tif shmInfo, err := os.Stat(shmPath); err == nil {\n\t\tsize += shmInfo.Size()\n\t}\n\n\treturn size, nil\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"rand","path":"crypto/rand","alias":"cryptorand","span":{"start":[5,1],"end":[5,26],"bytes":[34,59]}},{"name":"sql","path":"database/sql","span":{"start":[6,1],"end":[6,16],"bytes":[60,75]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[76,83]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[84,90]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[91,102]}},{"name":"rand","path":"math/rand","span":{"start":[10,1],"end":[10,13],"bytes":[103,115]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[116,121]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[122,129]}},{"name":"go-sqlite3","path":"github.com/mattn/go-sqlite3","alias":"_","span":{"start":[14,1],"end":[14,33],"bytes":[131,163]}}],"types":{"PopulateCommand":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand","kind":"struct","span":{"start":[17,1],"end":[27,2],"bytes":[167,333]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run","kind":"method","span":{"start":[29,1],"end":[67,2],"bytes":[335,1662]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[29,1],"end":[29,74],"bytes":[335,408]}},{"name":"args","type":"[]string","span":{"start":[29,1],"end":[29,74],"bytes":[335,408]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"30:8":{"kind":"call","span":{"start":[30,8],"end":[30,69],"bytes":[416,477]},"callee":null},"31:2":{"kind":"call","span":{"start":[31,2],"end":[31,59],"bytes":[479,536]},"callee":null},"32:2":{"kind":"call","span":{"start":[32,2],"end":[32,96],"bytes":[538,632]},"callee":null},"33:2":{"kind":"call","span":{"start":[33,2],"end":[33,70],"bytes":[634,702]},"callee":null},"34:2":{"kind":"call","span":{"start":[34,2],"end":[34,69],"bytes":[704,771]},"callee":null},"35:2":{"kind":"call","span":{"start":[35,2],"end":[35,74],"bytes":[773,845]},"callee":null},"36:2":{"kind":"call","span":{"start":[36,2],"end":[36,94],"bytes":[847,939]},"callee":null},"37:2":{"kind":"call","span":{"start":[37,2],"end":[37,72],"bytes":[941,1011]},"callee":null},"39:12":{"kind":"call","span":{"start":[39,12],"end":[39,26],"bytes":[1043,1057]},"callee":null},"44:10":{"kind":"call","span":{"start":[44,10],"end":[44,46],"bytes":[1115,1151]},"callee":null},"47:22":{"kind":"call","span":{"start":[47,22],"end":[47,45],"bytes":[1177,1200]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.parseSize"},"49:10":{"kind":"call","span":{"start":[49,10],"end":[49,52],"bytes":[1227,1269]},"callee":null},"52:2":{"kind":"call","span":{"start":[52,2],"end":[59,3],"bytes":[1275,1476]},"callee":null},"61:12":{"kind":"call","span":{"start":[61,12],"end":[61,48],"bytes":[1489,1525]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase"},"62:10":{"kind":"call","span":{"start":[62,10],"end":[62,50],"bytes":[1549,1589]},"callee":null},"65:2":{"kind":"call","span":{"start":[65,2],"end":[65,55],"bytes":[1595,1648]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Usage":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Usage","kind":"method","span":{"start":[223,1],"end":[271,2],"bytes":[5669,6710]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"224:2":{"kind":"call","span":{"start":[224,2],"end":[270,7],"bytes":[5706,6708]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase","kind":"method","span":{"start":[69,1],"end":[169,2],"bytes":[1664,4461]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[69,1],"end":[69,91],"bytes":[1664,1754]}},{"name":"targetBytes","type":"int64","span":{"start":[69,1],"end":[69,91],"bytes":[1664,1754]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":17},"body":{"106:16":{"kind":"call","span":{"start":[106,16],"end":[106,34],"bytes":[2700,2718]},"callee":null},"107:11":{"kind":"call","span":{"start":[107,11],"end":[107,60],"bytes":[2743,2792]},"callee":null},"111:7":{"kind":"call","span":{"start":[111,7],"end":[111,21],"bytes":[2828,2842]},"callee":null},"112:17":{"kind":"call","span":{"start":[112,17],"end":[112,100],"bytes":[2876,2959]},"callee":null},"113:18":{"kind":"call","span":{"start":[113,18],"end":[113,35],"bytes":[2977,2994]},"callee":null},"114:13":{"kind":"call","span":{"start":[114,13],"end":[114,48],"bytes":[3021,3056]},"callee":null},"117:7":{"kind":"call","span":{"start":[117,7],"end":[117,21],"bytes":[3074,3088]},"callee":null},"118:17":{"kind":"call","span":{"start":[118,17],"end":[118,94],"bytes":[3122,3199]},"callee":null},"119:18":{"kind":"call","span":{"start":[119,18],"end":[119,35],"bytes":[3217,3234]},"callee":null},"120:13":{"kind":"call","span":{"start":[120,13],"end":[120,48],"bytes":[3261,3296]},"callee":null},"126:15":{"kind":"call","span":{"start":[126,15],"end":[126,50],"bytes":[3330,3365]},"callee":null},"126:33":{"kind":"call","span":{"start":[126,33],"end":[126,49],"bytes":[3348,3364]},"callee":null},"132:2":{"kind":"call","span":{"start":[132,2],"end":[136,3],"bytes":[3456,3583]},"callee":null},"138:15":{"kind":"call","span":{"start":[138,15],"end":[138,25],"bytes":[3599,3609]},"callee":null},"140:16":{"kind":"call","span":{"start":[140,16],"end":[140,54],"bytes":[3683,3721]},"callee":null},"142:13":{"kind":"call","span":{"start":[142,13],"end":[142,62],"bytes":[3735,3784]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateTable"},"143:11":{"kind":"call","span":{"start":[143,11],"end":[143,62],"bytes":[3809,3860]},"callee":null},"146:21":{"kind":"call","span":{"start":[146,21],"end":[146,42],"bytes":[3886,3907]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"},"147:15":{"kind":"call","span":{"start":[147,15],"end":[147,35],"bytes":[3922,3942]},"callee":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead"},"147:38":{"kind":"call","span":{"start":[147,38],"end":[147,58],"bytes":[3945,3965]},"callee":null},"148:3":{"kind":"call","span":{"start":[148,3],"end":[152,4],"bytes":[3974,4121]},"callee":null},"151:24":{"kind":"call","span":{"start":[151,24],"end":[151,53],"bytes":[4087,4116]},"callee":null},"159:14":{"kind":"call","span":{"start":[159,14],"end":[159,35],"bytes":[4187,4208]},"callee":null},"160:18":{"kind":"call","span":{"start":[160,18],"end":[160,39],"bytes":[4226,4247]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"},"162:2":{"kind":"call","span":{"start":[162,2],"end":[166,3],"bytes":[4250,4446]},"callee":null},"165:28":{"kind":"call","span":{"start":[165,28],"end":[165,96],"bytes":[4374,4442]},"callee":null},"165:48":{"kind":"call","span":{"start":[165,48],"end":[165,66],"bytes":[4394,4412]},"callee":null},"165:77":{"kind":"call","span":{"start":[165,77],"end":[165,95],"bytes":[4423,4441]},"callee":null},"70:12":{"kind":"call","span":{"start":[70,12],"end":[70,27],"bytes":[1766,1781]},"callee":null},"70:44":{"kind":"call","span":{"start":[70,44],"end":[70,62],"bytes":[1798,1816]},"callee":null},"71:3":{"kind":"call","span":{"start":[71,3],"end":[71,64],"bytes":[1821,1882]},"callee":null},"74:13":{"kind":"call","span":{"start":[74,13],"end":[74,38],"bytes":[1899,1924]},"callee":null},"76:10":{"kind":"call","span":{"start":[76,10],"end":[76,46],"bytes":[1951,1987]},"callee":null},"78:8":{"kind":"call","span":{"start":[78,8],"end":[78,18],"bytes":[1998,2008]},"callee":null},"80:15":{"kind":"call","span":{"start":[80,15],"end":[80,72],"bytes":[2024,2081]},"callee":null},"80:23":{"kind":"call","span":{"start":[80,23],"end":[80,71],"bytes":[2032,2080]},"callee":null},"81:10":{"kind":"call","span":{"start":[81,10],"end":[81,46],"bytes":[2105,2141]},"callee":null},"84:15":{"kind":"call","span":{"start":[84,15],"end":[84,51],"bytes":[2160,2196]},"callee":null},"85:10":{"kind":"call","span":{"start":[85,10],"end":[85,49],"bytes":[2220,2259]},"callee":null},"88:15":{"kind":"call","span":{"start":[88,15],"end":[88,53],"bytes":[2278,2316]},"callee":null},"89:10":{"kind":"call","span":{"start":[89,10],"end":[89,48],"bytes":[2340,2378]},"callee":null},"93:16":{"kind":"call","span":{"start":[93,16],"end":[93,47],"bytes":[2435,2466]},"callee":null},"95:16":{"kind":"call","span":{"start":[95,16],"end":[104,16],"bytes":[2483,2683]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateTable":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateTable","kind":"method","span":{"start":[171,1],"end":[221,2],"bytes":[4463,5667]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateTable","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[171,1],"end":[171,113],"bytes":[4463,4575]}},{"name":"db","type":"*database/sql.DB","span":{"start":[171,1],"end":[171,113],"bytes":[4463,4575]}},{"name":"tableName","type":"string","span":{"start":[171,1],"end":[171,113],"bytes":[4463,4575]}},{"name":"rowCount","type":"int","span":{"start":[171,1],"end":[171,113],"bytes":[4463,4575]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"172:10":{"kind":"call","span":{"start":[172,10],"end":[172,33],"bytes":[4585,4608]},"callee":null},"175:14":{"kind":"call","span":{"start":[175,14],"end":[175,24],"bytes":[4669,4679]},"callee":null},"177:11":{"kind":"call","span":{"start":[177,11],"end":[177,51],"bytes":[4708,4748]},"callee":null},"180:16":{"kind":"call","span":{"start":[180,16],"end":[183,17],"bytes":[4769,4908]},"callee":null},"180:27":{"kind":"call","span":{"start":[180,27],"end":[183,16],"bytes":[4780,4907]},"callee":null},"185:4":{"kind":"call","span":{"start":[185,4],"end":[185,17],"bytes":[4930,4943]},"callee":null},"186:11":{"kind":"call","span":{"start":[186,11],"end":[186,51],"bytes":[4954,4994]},"callee":null},"195:4":{"kind":"call","span":{"start":[195,4],"end":[195,25],"bytes":[5122,5143]},"callee":null},"196:17":{"kind":"call","span":{"start":[196,17],"end":[196,47],"bytes":[5160,5190]},"callee":null},"197:16":{"kind":"call","span":{"start":[197,16],"end":[197,28],"bytes":[5206,5218]},"callee":null},"198:18":{"kind":"call","span":{"start":[198,18],"end":[198,32],"bytes":[5236,5250]},"callee":null},"199:17":{"kind":"call","span":{"start":[199,17],"end":[199,27],"bytes":[5274,5284]},"callee":null},"201:17":{"kind":"call","span":{"start":[201,17],"end":[201,76],"bytes":[5309,5368]},"callee":null},"202:5":{"kind":"call","span":{"start":[202,5],"end":[202,17],"bytes":[5387,5399]},"callee":null},"203:5":{"kind":"call","span":{"start":[203,5],"end":[203,18],"bytes":[5404,5417]},"callee":null},"204:12":{"kind":"call","span":{"start":[204,12],"end":[204,45],"bytes":[5429,5462]},"callee":null},"208:3":{"kind":"call","span":{"start":[208,3],"end":[208,15],"bytes":[5475,5487]},"callee":null},"209:13":{"kind":"call","span":{"start":[209,13],"end":[209,24],"bytes":[5500,5511]},"callee":null},"210:11":{"kind":"call","span":{"start":[210,11],"end":[210,52],"bytes":[5536,5577]},"callee":null},"214:10":{"kind":"call","span":{"start":[214,10],"end":[214,20],"bytes":[5603,5613]},"callee":null},"215:11":{"kind":"call","span":{"start":[215,11],"end":[215,20],"bytes":[5625,5634]},"callee":null}}}},"fields":{"BatchSize":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/BatchSize","kind":"field","type":"int","span":{"start":[23,1],"end":[23,16],"bytes":[264,279]}},"DB":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/DB","kind":"field","type":"string","span":{"start":[20,1],"end":[20,19],"bytes":[210,228]}},"IndexRatio":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/IndexRatio","kind":"field","type":"float64","span":{"start":[25,1],"end":[25,20],"bytes":[296,315]}},"Main":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/Main","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.Main","span":{"start":[18,1],"end":[18,12],"bytes":[197,208]}},"PageSize":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/PageSize","kind":"field","type":"int","span":{"start":[26,1],"end":[26,16],"bytes":[316,331]}},"RowSize":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/RowSize","kind":"field","type":"int","span":{"start":[22,1],"end":[22,16],"bytes":[248,263]}},"TableCount":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/TableCount","kind":"field","type":"int","span":{"start":[24,1],"end":[24,16],"bytes":[280,295]}},"TargetSize":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/TargetSize","kind":"field","type":"string","span":{"start":[21,1],"end":[21,19],"bytes":[229,247]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize","kind":"function","span":{"start":[303,1],"end":[322,2],"bytes":[7435,7804]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize","parameters":[{"name":"path","type":"string","span":{"start":[303,1],"end":[303,51],"bytes":[7435,7485]}}],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"304:15":{"kind":"call","span":{"start":[304,15],"end":[304,28],"bytes":[7500,7513]},"callee":null},"309:10":{"kind":"call","span":{"start":[309,10],"end":[309,21],"bytes":[7560,7571]},"callee":null},"312:21":{"kind":"call","span":{"start":[312,21],"end":[312,37],"bytes":[7619,7635]},"callee":null},"313:11":{"kind":"call","span":{"start":[313,11],"end":[313,25],"bytes":[7660,7674]},"callee":null},"317:21":{"kind":"call","span":{"start":[317,21],"end":[317,37],"bytes":[7725,7741]},"callee":null},"318:11":{"kind":"call","span":{"start":[318,11],"end":[318,25],"bytes":[7766,7780]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.parseSize":{"id":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.parseSize","kind":"function","span":{"start":[273,1],"end":[301,2],"bytes":[6712,7433]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.parseSize","parameters":[{"name":"s","type":"string","span":{"start":[273,1],"end":[273,42],"bytes":[6712,6753]}}],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"287:15":{"kind":"call","span":{"start":[287,15],"end":[287,29],"bytes":[7075,7089]},"callee":null},"287:35":{"kind":"call","span":{"start":[287,35],"end":[287,41],"bytes":[7095,7101]},"callee":null},"287:42":{"kind":"call","span":{"start":[287,42],"end":[287,56],"bytes":[7102,7116]},"callee":null},"287:6":{"kind":"call","span":{"start":[287,6],"end":[287,12],"bytes":[7066,7072]},"callee":null},"289:17":{"kind":"call","span":{"start":[289,17],"end":[289,68],"bytes":[7171,7222]},"callee":null},"289:31":{"kind":"call","span":{"start":[289,31],"end":[289,37],"bytes":[7185,7191]},"callee":null},"289:38":{"kind":"call","span":{"start":[289,38],"end":[289,52],"bytes":[7192,7206]},"callee":null},"292:11":{"kind":"call","span":{"start":[292,11],"end":[292,48],"bytes":[7270,7307]},"callee":null},"292:25":{"kind":"call","span":{"start":[292,25],"end":[292,47],"bytes":[7284,7306]},"callee":null},"297:15":{"kind":"call","span":{"start":[297,15],"end":[297,42],"bytes":[7352,7379]},"callee":null}}}},"content_hash":"a67a7b7cc269d80370f2853a6dbd9a7b82d5fe893644ccea6a7b990ab833b797"},"cmd/litestream-test/shrink.go":{"id":"can://go/litestream/cmd/litestream-test/shrink.go","kind":"module","span":{"start":[1,1],"end":[331,1],"bytes":[0,7667]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"os\"\n\t\"time\"\n\n\t_ \"github.com/mattn/go-sqlite3\"\n)\n\ntype ShrinkCommand struct {\n\tMain *Main\n\n\tDB string\n\tDeletePercentage float64\n\tVacuum bool\n\tCheckpoint bool\n\tCheckpointMode string\n}\n\nfunc (c *ShrinkCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-test shrink\", flag.ExitOnError)\n\tfs.StringVar(\u0026c.DB, \"db\", \"\", \"Database path (required)\")\n\tfs.Float64Var(\u0026c.DeletePercentage, \"delete-percentage\", 50, \"Percentage of data to delete (0-100)\")\n\tfs.BoolVar(\u0026c.Vacuum, \"vacuum\", false, \"Run VACUUM after deletion\")\n\tfs.BoolVar(\u0026c.Checkpoint, \"checkpoint\", false, \"Run checkpoint after deletion\")\n\tfs.StringVar(\u0026c.CheckpointMode, \"checkpoint-mode\", \"PASSIVE\", \"Checkpoint mode (PASSIVE, FULL, RESTART, TRUNCATE)\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif c.DB == \"\" {\n\t\treturn fmt.Errorf(\"database path required\")\n\t}\n\n\tif c.DeletePercentage \u003c 0 || c.DeletePercentage \u003e 100 {\n\t\treturn fmt.Errorf(\"delete percentage must be between 0 and 100\")\n\t}\n\n\tif _, err := os.Stat(c.DB); err != nil {\n\t\treturn fmt.Errorf(\"database does not exist: %w\", err)\n\t}\n\n\tslog.Info(\"Starting database shrink operation\",\n\t\t\"db\", c.DB,\n\t\t\"delete_percentage\", c.DeletePercentage,\n\t\t\"vacuum\", c.Vacuum,\n\t\t\"checkpoint\", c.Checkpoint,\n\t)\n\n\treturn c.shrinkDatabase(ctx)\n}\n\nfunc (c *ShrinkCommand) shrinkDatabase(ctx context.Context) error {\n\tinitialSize, err := getDatabaseSize(c.DB)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get initial size: %w\", err)\n\t}\n\n\tslog.Info(\"Initial database size\",\n\t\t\"size_mb\", initialSize/1024/1024,\n\t)\n\n\tdb, err := sql.Open(\"sqlite3\", c.DB+\"?_journal_mode=WAL\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open database: %w\", err)\n\t}\n\tdefer db.Close()\n\n\ttables, err := c.getTableList(db)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get table list: %w\", err)\n\t}\n\n\tslog.Info(\"Found tables\", \"count\", len(tables))\n\n\ttotalDeleted := int64(0)\n\tfor _, table := range tables {\n\t\tdeleted, err := c.deleteFromTable(db, table)\n\t\tif err != nil {\n\t\t\tslog.Error(\"Failed to delete from table\", \"table\", table, \"error\", err)\n\t\t\tcontinue\n\t\t}\n\t\ttotalDeleted += deleted\n\t\tslog.Info(\"Deleted rows from table\",\n\t\t\t\"table\", table,\n\t\t\t\"rows_deleted\", deleted,\n\t\t)\n\t}\n\n\tslog.Info(\"Deletion complete\", \"total_rows_deleted\", totalDeleted)\n\n\tsizeAfterDelete, err := getDatabaseSize(c.DB)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get size after delete: %w\", err)\n\t}\n\n\tslog.Info(\"Size after deletion\",\n\t\t\"size_mb\", sizeAfterDelete/1024/1024,\n\t\t\"change_mb\", (initialSize-sizeAfterDelete)/1024/1024,\n\t)\n\n\tif c.Checkpoint {\n\t\tif err := c.runCheckpoint(db); err != nil {\n\t\t\treturn fmt.Errorf(\"checkpoint: %w\", err)\n\t\t}\n\n\t\tsizeAfterCheckpoint, _ := getDatabaseSize(c.DB)\n\t\tslog.Info(\"Size after checkpoint\",\n\t\t\t\"size_mb\", sizeAfterCheckpoint/1024/1024,\n\t\t\t\"change_from_delete_mb\", (sizeAfterDelete-sizeAfterCheckpoint)/1024/1024,\n\t\t)\n\t}\n\n\tif c.Vacuum {\n\t\tif err := c.runVacuum(db); err != nil {\n\t\t\treturn fmt.Errorf(\"vacuum: %w\", err)\n\t\t}\n\n\t\tsizeAfterVacuum, _ := getDatabaseSize(c.DB)\n\t\tslog.Info(\"Size after VACUUM\",\n\t\t\t\"size_mb\", sizeAfterVacuum/1024/1024,\n\t\t\t\"total_reduction_mb\", (initialSize-sizeAfterVacuum)/1024/1024,\n\t\t)\n\t}\n\n\tfinalSize, err := getDatabaseSize(c.DB)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get final size: %w\", err)\n\t}\n\n\treductionPercent := float64(initialSize-finalSize) / float64(initialSize) * 100\n\tslog.Info(\"Shrink operation complete\",\n\t\t\"initial_size_mb\", initialSize/1024/1024,\n\t\t\"final_size_mb\", finalSize/1024/1024,\n\t\t\"reduction_percent\", fmt.Sprintf(\"%.1f\", reductionPercent),\n\t)\n\n\treturn nil\n}\n\nfunc (c *ShrinkCommand) getTableList(db *sql.DB) ([]string, error) {\n\trows, err := db.Query(`\n\t\tSELECT name FROM sqlite_master\n\t\tWHERE type='table'\n\t\tAND name NOT LIKE 'sqlite_%'\n\t\tAND name NOT LIKE 'load_test'\n\t`)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rows.Close()\n\n\tvar tables []string\n\tfor rows.Next() {\n\t\tvar table string\n\t\tif err := rows.Scan(\u0026table); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttables = append(tables, table)\n\t}\n\n\treturn tables, nil\n}\n\nfunc (c *ShrinkCommand) deleteFromTable(db *sql.DB, table string) (int64, error) {\n\tvar totalRows int\n\tcountQuery := fmt.Sprintf(\"SELECT COUNT(*) FROM %s\", table)\n\tif err := db.QueryRow(countQuery).Scan(\u0026totalRows); err != nil {\n\t\treturn 0, fmt.Errorf(\"count rows: %w\", err)\n\t}\n\n\tif totalRows == 0 {\n\t\treturn 0, nil\n\t}\n\n\trowsToDelete := int(float64(totalRows) * (c.DeletePercentage / 100))\n\tif rowsToDelete == 0 {\n\t\treturn 0, nil\n\t}\n\n\tvar hasID bool\n\tcolumnQuery := fmt.Sprintf(\"PRAGMA table_info(%s)\", table)\n\trows, err := db.Query(columnQuery)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"get table info: %w\", err)\n\t}\n\tdefer rows.Close()\n\n\tfor rows.Next() {\n\t\tvar cid int\n\t\tvar name, dtype string\n\t\tvar notnull, pk int\n\t\tvar dflt sql.NullString\n\t\tif err := rows.Scan(\u0026cid, \u0026name, \u0026dtype, \u0026notnull, \u0026dflt, \u0026pk); err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif name == \"id\" || pk == 1 {\n\t\t\thasID = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tvar deleteQuery string\n\tif hasID {\n\t\tdeleteQuery = fmt.Sprintf(`\n\t\t\tDELETE FROM %s\n\t\t\tWHERE id IN (\n\t\t\t\tSELECT id FROM %s\n\t\t\t\tORDER BY RANDOM()\n\t\t\t\tLIMIT %d\n\t\t\t)\n\t\t`, table, table, rowsToDelete)\n\t} else {\n\t\tdeleteQuery = fmt.Sprintf(`\n\t\t\tDELETE FROM %s\n\t\t\tWHERE rowid IN (\n\t\t\t\tSELECT rowid FROM %s\n\t\t\t\tORDER BY RANDOM()\n\t\t\t\tLIMIT %d\n\t\t\t)\n\t\t`, table, table, rowsToDelete)\n\t}\n\n\tstartTime := time.Now()\n\tresult, err := db.Exec(deleteQuery)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"delete rows: %w\", err)\n\t}\n\n\trowsDeleted, _ := result.RowsAffected()\n\tduration := time.Since(startTime)\n\n\tslog.Debug(\"Deleted rows from table\",\n\t\t\"table\", table,\n\t\t\"rows_deleted\", rowsDeleted,\n\t\t\"duration\", duration,\n\t)\n\n\treturn rowsDeleted, nil\n}\n\nfunc (c *ShrinkCommand) runCheckpoint(db *sql.DB) error {\n\tslog.Info(\"Running checkpoint\", \"mode\", c.CheckpointMode)\n\n\tstartTime := time.Now()\n\tquery := fmt.Sprintf(\"PRAGMA wal_checkpoint(%s)\", c.CheckpointMode)\n\n\tvar busy, written, total int\n\terr := db.QueryRow(query).Scan(\u0026busy, \u0026written, \u0026total)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"checkpoint failed: %w\", err)\n\t}\n\n\tduration := time.Since(startTime)\n\tslog.Info(\"Checkpoint complete\",\n\t\t\"mode\", c.CheckpointMode,\n\t\t\"busy\", busy,\n\t\t\"pages_written\", written,\n\t\t\"total_pages\", total,\n\t\t\"duration\", duration,\n\t)\n\n\treturn nil\n}\n\nfunc (c *ShrinkCommand) runVacuum(db *sql.DB) error {\n\tslog.Info(\"Running VACUUM (this may take a while)\")\n\n\tstartTime := time.Now()\n\t_, err := db.Exec(\"VACUUM\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"vacuum failed: %w\", err)\n\t}\n\n\tduration := time.Since(startTime)\n\tslog.Info(\"VACUUM complete\", \"duration\", duration)\n\n\treturn nil\n}\n\nfunc (c *ShrinkCommand) Usage() {\n\tfmt.Fprintln(c.Main.Stdout, `\nShrink a database by deleting data and optionally running VACUUM.\n\nUsage:\n\n\tlitestream-test shrink [options]\n\nOptions:\n\n\t-db PATH\n\t Database path (required)\n\n\t-delete-percentage PCT\n\t Percentage of data to delete (0-100)\n\t Default: 50\n\n\t-vacuum\n\t Run VACUUM after deletion\n\t Default: false\n\n\t-checkpoint\n\t Run checkpoint after deletion\n\t Default: false\n\n\t-checkpoint-mode MODE\n\t Checkpoint mode (PASSIVE, FULL, RESTART, TRUNCATE)\n\t Default: PASSIVE\n\nExamples:\n\n\t# Delete 50% of data\n\tlitestream-test shrink -db /tmp/test.db -delete-percentage 50\n\n\t# Delete 75% and run VACUUM\n\tlitestream-test shrink -db /tmp/test.db -delete-percentage 75 -vacuum\n\n\t# Delete 30%, checkpoint, then VACUUM\n\tlitestream-test shrink -db /tmp/test.db -delete-percentage 30 -checkpoint -vacuum\n\n\t# Test with FULL checkpoint mode\n\tlitestream-test shrink -db /tmp/test.db -delete-percentage 50 -checkpoint -checkpoint-mode FULL\n`[1:])\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"sql","path":"database/sql","span":{"start":[5,1],"end":[5,16],"bytes":[34,49]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[50,57]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[58,64]}},{"name":"slog","path":"log/slog","span":{"start":[8,1],"end":[8,12],"bytes":[65,76]}},{"name":"os","path":"os","span":{"start":[9,1],"end":[9,6],"bytes":[77,82]}},{"name":"time","path":"time","span":{"start":[10,1],"end":[10,8],"bytes":[83,90]}},{"name":"go-sqlite3","path":"github.com/mattn/go-sqlite3","alias":"_","span":{"start":[12,1],"end":[12,33],"bytes":[92,124]}}],"types":{"ShrinkCommand":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand","kind":"struct","span":{"start":[15,1],"end":[23,2],"bytes":[128,292]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Run":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Run","kind":"method","span":{"start":[25,1],"end":[57,2],"bytes":[294,1427]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[25,1],"end":[25,72],"bytes":[294,365]}},{"name":"args","type":"[]string","span":{"start":[25,1],"end":[25,72],"bytes":[294,365]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"26:8":{"kind":"call","span":{"start":[26,8],"end":[26,67],"bytes":[373,432]},"callee":null},"27:2":{"kind":"call","span":{"start":[27,2],"end":[27,59],"bytes":[434,491]},"callee":null},"28:2":{"kind":"call","span":{"start":[28,2],"end":[28,101],"bytes":[493,592]},"callee":null},"29:2":{"kind":"call","span":{"start":[29,2],"end":[29,69],"bytes":[594,661]},"callee":null},"30:2":{"kind":"call","span":{"start":[30,2],"end":[30,81],"bytes":[663,742]},"callee":null},"31:2":{"kind":"call","span":{"start":[31,2],"end":[31,117],"bytes":[744,859]},"callee":null},"33:12":{"kind":"call","span":{"start":[33,12],"end":[33,26],"bytes":[891,905]},"callee":null},"38:10":{"kind":"call","span":{"start":[38,10],"end":[38,46],"bytes":[963,999]},"callee":null},"42:10":{"kind":"call","span":{"start":[42,10],"end":[42,67],"bytes":[1070,1127]},"callee":null},"45:15":{"kind":"call","span":{"start":[45,15],"end":[45,28],"bytes":[1146,1159]},"callee":null},"46:10":{"kind":"call","span":{"start":[46,10],"end":[46,56],"bytes":[1183,1229]},"callee":null},"49:2":{"kind":"call","span":{"start":[49,2],"end":[54,3],"bytes":[1235,1394]},"callee":null},"56:9":{"kind":"call","span":{"start":[56,9],"end":[56,30],"bytes":[1404,1425]},"callee":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase"}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Usage":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Usage","kind":"method","span":{"start":[287,1],"end":[330,2],"bytes":[6664,7666]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"288:2":{"kind":"call","span":{"start":[288,2],"end":[329,7],"bytes":[6699,7664]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.deleteFromTable":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.deleteFromTable","kind":"method","span":{"start":[171,1],"end":[246,2],"bytes":[4124,5751]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.deleteFromTable","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[171,1],"end":[171,83],"bytes":[4124,4206]}},{"name":"table","type":"string","span":{"start":[171,1],"end":[171,83],"bytes":[4124,4206]}}],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"173:16":{"kind":"call","span":{"start":[173,16],"end":[173,61],"bytes":[4241,4286]},"callee":null},"174:12":{"kind":"call","span":{"start":[174,12],"end":[174,35],"bytes":[4298,4321]},"callee":null},"175:13":{"kind":"call","span":{"start":[175,13],"end":[175,46],"bytes":[4365,4398]},"callee":null},"182:18":{"kind":"call","span":{"start":[182,18],"end":[182,70],"bytes":[4461,4513]},"callee":null},"182:22":{"kind":"call","span":{"start":[182,22],"end":[182,40],"bytes":[4465,4483]},"callee":null},"188:17":{"kind":"call","span":{"start":[188,17],"end":[188,60],"bytes":[4590,4633]},"callee":null},"189:15":{"kind":"call","span":{"start":[189,15],"end":[189,36],"bytes":[4648,4669]},"callee":null},"191:13":{"kind":"call","span":{"start":[191,13],"end":[191,50],"bytes":[4699,4736]},"callee":null},"193:8":{"kind":"call","span":{"start":[193,8],"end":[193,20],"bytes":[4747,4759]},"callee":null},"195:6":{"kind":"call","span":{"start":[195,6],"end":[195,17],"bytes":[4766,4777]},"callee":null},"200:13":{"kind":"call","span":{"start":[200,13],"end":[200,65],"bytes":[4879,4931]},"callee":null},"211:17":{"kind":"call","span":{"start":[211,17],"end":[218,33],"bytes":[5078,5221]},"callee":null},"220:17":{"kind":"call","span":{"start":[220,17],"end":[227,33],"bytes":[5248,5397]},"callee":null},"230:15":{"kind":"call","span":{"start":[230,15],"end":[230,25],"bytes":[5416,5426]},"callee":null},"231:17":{"kind":"call","span":{"start":[231,17],"end":[231,37],"bytes":[5443,5463]},"callee":null},"233:13":{"kind":"call","span":{"start":[233,13],"end":[233,47],"bytes":[5493,5527]},"callee":null},"236:20":{"kind":"call","span":{"start":[236,20],"end":[236,41],"bytes":[5551,5572]},"callee":null},"237:14":{"kind":"call","span":{"start":[237,14],"end":[237,35],"bytes":[5586,5607]},"callee":null},"239:2":{"kind":"call","span":{"start":[239,2],"end":[243,3],"bytes":[5610,5723]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.getTableList":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.getTableList","kind":"method","span":{"start":[147,1],"end":[169,2],"bytes":[3664,4122]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.getTableList","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[147,1],"end":[147,69],"bytes":[3664,3732]}}],"return_type":"([]string, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"148:15":{"kind":"call","span":{"start":[148,15],"end":[153,4],"bytes":[3747,3878]},"callee":null},"157:8":{"kind":"call","span":{"start":[157,8],"end":[157,20],"bytes":[3924,3936]},"callee":null},"160:6":{"kind":"call","span":{"start":[160,6],"end":[160,17],"bytes":[3964,3975]},"callee":null},"162:13":{"kind":"call","span":{"start":[162,13],"end":[162,30],"bytes":[4009,4026]},"callee":null},"165:12":{"kind":"call","span":{"start":[165,12],"end":[165,33],"bytes":[4075,4096]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runCheckpoint":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runCheckpoint","kind":"method","span":{"start":[248,1],"end":[270,2],"bytes":[5753,6330]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runCheckpoint","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[248,1],"end":[248,58],"bytes":[5753,5810]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"249:2":{"kind":"call","span":{"start":[249,2],"end":[249,59],"bytes":[5812,5869]},"callee":null},"251:15":{"kind":"call","span":{"start":[251,15],"end":[251,25],"bytes":[5885,5895]},"callee":null},"252:11":{"kind":"call","span":{"start":[252,11],"end":[252,69],"bytes":[5906,5964]},"callee":null},"255:9":{"kind":"call","span":{"start":[255,9],"end":[255,27],"bytes":[6004,6022]},"callee":null},"257:10":{"kind":"call","span":{"start":[257,10],"end":[257,50],"bytes":[6079,6119]},"callee":null},"260:14":{"kind":"call","span":{"start":[260,14],"end":[260,35],"bytes":[6137,6158]},"callee":null},"261:2":{"kind":"call","span":{"start":[261,2],"end":[267,3],"bytes":[6160,6315]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runVacuum":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runVacuum","kind":"method","span":{"start":[272,1],"end":[285,2],"bytes":[6332,6662]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runVacuum","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[272,1],"end":[272,54],"bytes":[6332,6385]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"273:2":{"kind":"call","span":{"start":[273,2],"end":[273,53],"bytes":[6387,6438]},"callee":null},"275:15":{"kind":"call","span":{"start":[275,15],"end":[275,25],"bytes":[6454,6464]},"callee":null},"276:12":{"kind":"call","span":{"start":[276,12],"end":[276,29],"bytes":[6476,6493]},"callee":null},"278:10":{"kind":"call","span":{"start":[278,10],"end":[278,46],"bytes":[6520,6556]},"callee":null},"281:14":{"kind":"call","span":{"start":[281,14],"end":[281,35],"bytes":[6574,6595]},"callee":null},"282:2":{"kind":"call","span":{"start":[282,2],"end":[282,52],"bytes":[6597,6647]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","kind":"method","span":{"start":[59,1],"end":[145,2],"bytes":[1429,3662]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[59,1],"end":[59,68],"bytes":[1429,1496]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"100:10":{"kind":"call","span":{"start":[100,10],"end":[100,54],"bytes":[2459,2503]},"callee":null},"103:2":{"kind":"call","span":{"start":[103,2],"end":[106,3],"bytes":[2509,2640]},"callee":null},"109:13":{"kind":"call","span":{"start":[109,13],"end":[109,32],"bytes":[2673,2692]},"callee":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runCheckpoint"},"110:11":{"kind":"call","span":{"start":[110,11],"end":[110,44],"bytes":[2717,2750]},"callee":null},"113:29":{"kind":"call","span":{"start":[113,29],"end":[113,50],"bytes":[2784,2805]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"},"114:3":{"kind":"call","span":{"start":[114,3],"end":[117,4],"bytes":[2808,2968]},"callee":null},"121:13":{"kind":"call","span":{"start":[121,13],"end":[121,28],"bytes":[3000,3015]},"callee":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runVacuum"},"122:11":{"kind":"call","span":{"start":[122,11],"end":[122,40],"bytes":[3040,3069]},"callee":null},"125:25":{"kind":"call","span":{"start":[125,25],"end":[125,46],"bytes":[3099,3120]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"},"126:3":{"kind":"call","span":{"start":[126,3],"end":[129,4],"bytes":[3123,3264]},"callee":null},"132:20":{"kind":"call","span":{"start":[132,20],"end":[132,41],"bytes":[3288,3309]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"},"134:10":{"kind":"call","span":{"start":[134,10],"end":[134,47],"bytes":[3336,3373]},"callee":null},"137:22":{"kind":"call","span":{"start":[137,22],"end":[137,52],"bytes":[3399,3429]},"callee":null},"137:55":{"kind":"call","span":{"start":[137,55],"end":[137,75],"bytes":[3432,3452]},"callee":null},"138:2":{"kind":"call","span":{"start":[138,2],"end":[142,3],"bytes":[3460,3647]},"callee":null},"141:24":{"kind":"call","span":{"start":[141,24],"end":[141,61],"bytes":[3606,3643]},"callee":null},"60:22":{"kind":"call","span":{"start":[60,22],"end":[60,43],"bytes":[1518,1539]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"},"62:10":{"kind":"call","span":{"start":[62,10],"end":[62,49],"bytes":[1566,1605]},"callee":null},"65:2":{"kind":"call","span":{"start":[65,2],"end":[67,3],"bytes":[1611,1684]},"callee":null},"69:13":{"kind":"call","span":{"start":[69,13],"end":[69,59],"bytes":[1698,1744]},"callee":null},"71:10":{"kind":"call","span":{"start":[71,10],"end":[71,46],"bytes":[1771,1807]},"callee":null},"73:8":{"kind":"call","span":{"start":[73,8],"end":[73,18],"bytes":[1818,1828]},"callee":null},"75:17":{"kind":"call","span":{"start":[75,17],"end":[75,35],"bytes":[1846,1864]},"callee":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.getTableList"},"77:10":{"kind":"call","span":{"start":[77,10],"end":[77,47],"bytes":[1891,1928]},"callee":null},"80:2":{"kind":"call","span":{"start":[80,2],"end":[80,49],"bytes":[1934,1981]},"callee":null},"80:37":{"kind":"call","span":{"start":[80,37],"end":[80,48],"bytes":[1969,1980]},"callee":null},"82:18":{"kind":"call","span":{"start":[82,18],"end":[82,26],"bytes":[2000,2008]},"callee":null},"84:19":{"kind":"call","span":{"start":[84,19],"end":[84,47],"bytes":[2059,2087]},"callee":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.deleteFromTable"},"86:4":{"kind":"call","span":{"start":[86,4],"end":[86,75],"bytes":[2109,2180]},"callee":null},"90:3":{"kind":"call","span":{"start":[90,3],"end":[93,4],"bytes":[2225,2312]},"callee":null},"96:2":{"kind":"call","span":{"start":[96,2],"end":[96,68],"bytes":[2318,2384]},"callee":null},"98:26":{"kind":"call","span":{"start":[98,26],"end":[98,47],"bytes":[2411,2432]},"callee":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize"}}}},"fields":{"Checkpoint":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/Checkpoint","kind":"field","type":"bool","span":{"start":[21,1],"end":[21,23],"bytes":[243,265]}},"CheckpointMode":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/CheckpointMode","kind":"field","type":"string","span":{"start":[22,1],"end":[22,25],"bytes":[266,290]}},"DB":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/DB","kind":"field","type":"string","span":{"start":[18,1],"end":[18,25],"bytes":[169,193]}},"DeletePercentage":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/DeletePercentage","kind":"field","type":"float64","span":{"start":[19,1],"end":[19,26],"bytes":[194,219]}},"Main":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/Main","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.Main","span":{"start":[16,1],"end":[16,12],"bytes":[156,167]}},"Vacuum":{"id":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/Vacuum","kind":"field","type":"bool","span":{"start":[20,1],"end":[20,23],"bytes":[220,242]}}}}},"functions":{},"content_hash":"37c5b10667dd19c81741e8154bf9a8dac5dd898270b7f5c126d1375a33fb1b10"},"cmd/litestream-test/validate.go":{"id":"can://go/litestream/cmd/litestream-test/validate.go","kind":"module","span":{"start":[1,1],"end":[505,1],"bytes":[0,12576]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"crypto/md5\"\n\t\"database/sql\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"time\"\n\n\t_ \"github.com/mattn/go-sqlite3\"\n)\n\ntype ValidateCommand struct {\n\tMain *Main\n\n\tSourceDB string\n\tReplicaURL string\n\tRestoredDB string\n\tCheckType string\n\tLTXContinuity bool\n\tConfigPath string\n}\n\ntype ValidationResult struct {\n\tCheckType string\n\tPassed bool\n\tDuration time.Duration\n\tErrorMessage string\n\tDetails map[string]interface{}\n}\n\nfunc (c *ValidateCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-test validate\", flag.ExitOnError)\n\tfs.StringVar(\u0026c.SourceDB, \"source-db\", \"\", \"Original database path\")\n\tfs.StringVar(\u0026c.ReplicaURL, \"replica-url\", \"\", \"Replica URL to validate\")\n\tfs.StringVar(\u0026c.RestoredDB, \"restored-db\", \"\", \"Path for restored database\")\n\tfs.StringVar(\u0026c.CheckType, \"check-type\", \"quick\", \"Type of check (quick, integrity, checksum, full)\")\n\tfs.BoolVar(\u0026c.LTXContinuity, \"ltx-continuity\", false, \"Check LTX file continuity\")\n\tfs.StringVar(\u0026c.ConfigPath, \"config\", \"\", \"Litestream config file path\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif c.SourceDB == \"\" {\n\t\treturn fmt.Errorf(\"source database path required\")\n\t}\n\n\tif c.ReplicaURL == \"\" \u0026\u0026 c.ConfigPath == \"\" {\n\t\treturn fmt.Errorf(\"replica URL or config file required\")\n\t}\n\n\tif c.RestoredDB == \"\" {\n\t\tc.RestoredDB = c.SourceDB + \".restored\"\n\t}\n\n\tslog.Info(\"Starting validation\",\n\t\t\"source_db\", c.SourceDB,\n\t\t\"replica_url\", c.ReplicaURL,\n\t\t\"check_type\", c.CheckType,\n\t\t\"ltx_continuity\", c.LTXContinuity,\n\t)\n\n\tresults := []ValidationResult{}\n\n\tif c.LTXContinuity \u0026\u0026 c.ReplicaURL != \"\" {\n\t\tresult := c.validateLTXContinuity(ctx)\n\t\tresults = append(results, result)\n\t}\n\n\trestoreResult := c.performRestore(ctx)\n\tresults = append(results, restoreResult)\n\n\tif restoreResult.Passed {\n\t\tswitch c.CheckType {\n\t\tcase \"quick\":\n\t\t\tresults = append(results, c.performQuickCheck(ctx))\n\t\tcase \"integrity\":\n\t\t\tresults = append(results, c.performIntegrityCheck(ctx))\n\t\tcase \"checksum\":\n\t\t\tresults = append(results, c.performChecksumCheck(ctx))\n\t\tcase \"full\":\n\t\t\tresults = append(results, c.performQuickCheck(ctx))\n\t\t\tresults = append(results, c.performIntegrityCheck(ctx))\n\t\t\tresults = append(results, c.performChecksumCheck(ctx))\n\t\t\tresults = append(results, c.performDataValidation(ctx))\n\t\t}\n\t}\n\n\treturn c.reportResults(results)\n}\n\nfunc (c *ValidateCommand) performRestore(ctx context.Context) ValidationResult {\n\tstartTime := time.Now()\n\tresult := ValidationResult{\n\t\tCheckType: \"restore\",\n\t\tDetails: make(map[string]interface{}),\n\t}\n\n\tif err := os.Remove(c.RestoredDB); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\tslog.Warn(\"Could not remove existing restored database\", \"error\", err)\n\t}\n\n\tvar cmd *exec.Cmd\n\tif c.ConfigPath != \"\" {\n\t\tcmd = exec.CommandContext(ctx, \"litestream\", \"restore\",\n\t\t\t\"-config\", c.ConfigPath,\n\t\t\t\"-o\", c.RestoredDB,\n\t\t\tc.SourceDB,\n\t\t)\n\t} else {\n\t\tcmd = exec.CommandContext(ctx, \"litestream\", \"restore\",\n\t\t\t\"-o\", c.RestoredDB,\n\t\t\tc.ReplicaURL,\n\t\t)\n\t}\n\n\toutput, err := cmd.CombinedOutput()\n\tresult.Duration = time.Since(startTime)\n\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"restore failed: %v\\nOutput: %s\", err, string(output))\n\t\treturn result\n\t}\n\n\tif _, err := os.Stat(c.RestoredDB); err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"restored database not found: %v\", err)\n\t\treturn result\n\t}\n\n\tresult.Passed = true\n\tresult.Details[\"restored_path\"] = c.RestoredDB\n\n\tif info, err := os.Stat(c.RestoredDB); err == nil {\n\t\tresult.Details[\"restored_size\"] = info.Size()\n\t}\n\n\tslog.Info(\"Restore completed\",\n\t\t\"duration\", result.Duration,\n\t\t\"restored_db\", c.RestoredDB,\n\t)\n\n\treturn result\n}\n\nfunc (c *ValidateCommand) performQuickCheck(ctx context.Context) ValidationResult {\n\tstartTime := time.Now()\n\tresult := ValidationResult{\n\t\tCheckType: \"quick_check\",\n\t\tDetails: make(map[string]interface{}),\n\t}\n\n\tdb, err := sql.Open(\"sqlite3\", c.RestoredDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to open database: %v\", err)\n\t\treturn result\n\t}\n\tdefer db.Close()\n\n\tvar checkResult string\n\terr = db.QueryRow(\"PRAGMA quick_check\").Scan(\u0026checkResult)\n\tresult.Duration = time.Since(startTime)\n\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"quick check failed: %v\", err)\n\t\treturn result\n\t}\n\n\tresult.Passed = checkResult == \"ok\"\n\tresult.Details[\"check_result\"] = checkResult\n\n\tif !result.Passed {\n\t\tresult.ErrorMessage = fmt.Sprintf(\"quick check returned: %s\", checkResult)\n\t}\n\n\tslog.Info(\"Quick check completed\",\n\t\t\"passed\", result.Passed,\n\t\t\"duration\", result.Duration,\n\t)\n\n\treturn result\n}\n\nfunc (c *ValidateCommand) performIntegrityCheck(ctx context.Context) ValidationResult {\n\tstartTime := time.Now()\n\tresult := ValidationResult{\n\t\tCheckType: \"integrity_check\",\n\t\tDetails: make(map[string]interface{}),\n\t}\n\n\tdb, err := sql.Open(\"sqlite3\", c.RestoredDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to open database: %v\", err)\n\t\treturn result\n\t}\n\tdefer db.Close()\n\n\trows, err := db.Query(\"PRAGMA integrity_check\")\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"integrity check failed: %v\", err)\n\t\tresult.Duration = time.Since(startTime)\n\t\treturn result\n\t}\n\tdefer rows.Close()\n\n\tvar results []string\n\tfor rows.Next() {\n\t\tvar line string\n\t\tif err := rows.Scan(\u0026line); err != nil {\n\t\t\tresult.Passed = false\n\t\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to scan result: %v\", err)\n\t\t\tresult.Duration = time.Since(startTime)\n\t\t\treturn result\n\t\t}\n\t\tresults = append(results, line)\n\t}\n\n\tresult.Duration = time.Since(startTime)\n\tresult.Details[\"check_results\"] = results\n\n\tif len(results) == 1 \u0026\u0026 results[0] == \"ok\" {\n\t\tresult.Passed = true\n\t} else {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"integrity check found issues: %v\", results)\n\t}\n\n\tslog.Info(\"Integrity check completed\",\n\t\t\"passed\", result.Passed,\n\t\t\"duration\", result.Duration,\n\t\t\"issues\", len(results)-1,\n\t)\n\n\treturn result\n}\n\nfunc (c *ValidateCommand) performChecksumCheck(ctx context.Context) ValidationResult {\n\tstartTime := time.Now()\n\tresult := ValidationResult{\n\t\tCheckType: \"checksum\",\n\t\tDetails: make(map[string]interface{}),\n\t}\n\n\tsourceChecksum, err := c.calculateDBChecksum(c.SourceDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to calculate source checksum: %v\", err)\n\t\tresult.Duration = time.Since(startTime)\n\t\treturn result\n\t}\n\n\trestoredChecksum, err := c.calculateDBChecksum(c.RestoredDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to calculate restored checksum: %v\", err)\n\t\tresult.Duration = time.Since(startTime)\n\t\treturn result\n\t}\n\n\tresult.Duration = time.Since(startTime)\n\tresult.Details[\"source_checksum\"] = fmt.Sprintf(\"%x\", sourceChecksum)\n\tresult.Details[\"restored_checksum\"] = fmt.Sprintf(\"%x\", restoredChecksum)\n\n\tif string(sourceChecksum) == string(restoredChecksum) {\n\t\tresult.Passed = true\n\t} else {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = \"checksums do not match\"\n\t}\n\n\tslog.Info(\"Checksum check completed\",\n\t\t\"passed\", result.Passed,\n\t\t\"duration\", result.Duration,\n\t\t\"match\", result.Passed,\n\t)\n\n\treturn result\n}\n\nfunc (c *ValidateCommand) performDataValidation(ctx context.Context) ValidationResult {\n\tstartTime := time.Now()\n\tresult := ValidationResult{\n\t\tCheckType: \"data_validation\",\n\t\tDetails: make(map[string]interface{}),\n\t}\n\n\tsourceDB, err := sql.Open(\"sqlite3\", c.SourceDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to open source database: %v\", err)\n\t\treturn result\n\t}\n\tdefer sourceDB.Close()\n\n\trestoredDB, err := sql.Open(\"sqlite3\", c.RestoredDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to open restored database: %v\", err)\n\t\treturn result\n\t}\n\tdefer restoredDB.Close()\n\n\ttables, err := c.getTableList(sourceDB)\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to get table list: %v\", err)\n\t\tresult.Duration = time.Since(startTime)\n\t\treturn result\n\t}\n\n\tresult.Details[\"tables_checked\"] = len(tables)\n\tallMatch := true\n\n\tfor _, table := range tables {\n\t\tsourceCount, err := c.getRowCount(sourceDB, table)\n\t\tif err != nil {\n\t\t\tresult.Passed = false\n\t\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to count rows in source table %s: %v\", table, err)\n\t\t\tresult.Duration = time.Since(startTime)\n\t\t\treturn result\n\t\t}\n\n\t\trestoredCount, err := c.getRowCount(restoredDB, table)\n\t\tif err != nil {\n\t\t\tresult.Passed = false\n\t\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to count rows in restored table %s: %v\", table, err)\n\t\t\tresult.Duration = time.Since(startTime)\n\t\t\treturn result\n\t\t}\n\n\t\tif sourceCount != restoredCount {\n\t\t\tallMatch = false\n\t\t\tresult.Details[fmt.Sprintf(\"table_%s_mismatch\", table)] = fmt.Sprintf(\"source=%d, restored=%d\", sourceCount, restoredCount)\n\t\t}\n\t}\n\n\tresult.Duration = time.Since(startTime)\n\tresult.Passed = allMatch\n\n\tif !allMatch {\n\t\tresult.ErrorMessage = \"row count mismatch between source and restored databases\"\n\t}\n\n\tslog.Info(\"Data validation completed\",\n\t\t\"passed\", result.Passed,\n\t\t\"duration\", result.Duration,\n\t\t\"tables_checked\", len(tables),\n\t)\n\n\treturn result\n}\n\nfunc (c *ValidateCommand) validateLTXContinuity(ctx context.Context) ValidationResult {\n\tstartTime := time.Now()\n\tresult := ValidationResult{\n\t\tCheckType: \"ltx_continuity\",\n\t\tDetails: make(map[string]interface{}),\n\t}\n\n\tcmd := exec.CommandContext(ctx, \"litestream\", \"ltx\", c.ReplicaURL)\n\toutput, err := cmd.Output()\n\tif err != nil {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = fmt.Sprintf(\"failed to list LTX files: %v\", err)\n\t\tresult.Duration = time.Since(startTime)\n\t\treturn result\n\t}\n\n\tlines := strings.Split(string(output), \"\\n\")\n\tif len(lines) \u003c 2 {\n\t\tresult.Passed = false\n\t\tresult.ErrorMessage = \"no LTX files found\"\n\t\tresult.Duration = time.Since(startTime)\n\t\treturn result\n\t}\n\n\tresult.Passed = true\n\tresult.Duration = time.Since(startTime)\n\tresult.Details[\"ltx_files_checked\"] = len(lines) - 2\n\n\tslog.Info(\"LTX continuity check completed\",\n\t\t\"passed\", result.Passed,\n\t\t\"duration\", result.Duration,\n\t)\n\n\treturn result\n}\n\nfunc (c *ValidateCommand) calculateDBChecksum(path string) ([]byte, error) {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer file.Close()\n\n\thash := md5.New()\n\tif _, err := io.Copy(hash, file); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn hash.Sum(nil), nil\n}\n\nfunc (c *ValidateCommand) getTableList(db *sql.DB) ([]string, error) {\n\trows, err := db.Query(\"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rows.Close()\n\n\tvar tables []string\n\tfor rows.Next() {\n\t\tvar table string\n\t\tif err := rows.Scan(\u0026table); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttables = append(tables, table)\n\t}\n\n\treturn tables, nil\n}\n\nfunc (c *ValidateCommand) getRowCount(db *sql.DB, table string) (int, error) {\n\tvar count int\n\tquery := fmt.Sprintf(\"SELECT COUNT(*) FROM %s\", table)\n\terr := db.QueryRow(query).Scan(\u0026count)\n\treturn count, err\n}\n\nfunc (c *ValidateCommand) reportResults(results []ValidationResult) error {\n\tallPassed := true\n\tfor _, result := range results {\n\t\tif !result.Passed {\n\t\t\tallPassed = false\n\t\t\tslog.Error(\"Validation failed\",\n\t\t\t\t\"check_type\", result.CheckType,\n\t\t\t\t\"error\", result.ErrorMessage,\n\t\t\t)\n\t\t}\n\t}\n\n\tif allPassed {\n\t\tslog.Info(\"All validation checks passed\")\n\t\treturn nil\n\t}\n\n\treturn fmt.Errorf(\"validation failed\")\n}\n\nfunc (c *ValidateCommand) Usage() {\n\tfmt.Fprintln(c.Main.Stdout, `\nValidate replication integrity by restoring and checking databases.\n\nUsage:\n\n\tlitestream-test validate [options]\n\nOptions:\n\n\t-source-db PATH\n\t Original database path (required)\n\n\t-replica-url URL\n\t Replica URL to validate\n\n\t-restored-db PATH\n\t Path for restored database\n\t Default: source-db.restored\n\n\t-check-type TYPE\n\t Type of check: quick, integrity, checksum, full\n\t Default: quick\n\n\t-ltx-continuity\n\t Check LTX file continuity\n\t Default: false\n\n\t-config PATH\n\t Litestream config file path\n\nExamples:\n\n\t# Quick validation\n\tlitestream-test validate -source-db /tmp/test.db -replica-url s3://bucket/test\n\n\t# Full validation with all checks\n\tlitestream-test validate -source-db /tmp/test.db -replica-url s3://bucket/test -check-type full\n\n\t# Validate with config file\n\tlitestream-test validate -source-db /tmp/test.db -config /etc/litestream.yml -check-type integrity\n`[1:])\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"md5","path":"crypto/md5","span":{"start":[5,1],"end":[5,14],"bytes":[34,47]}},{"name":"sql","path":"database/sql","span":{"start":[6,1],"end":[6,16],"bytes":[48,63]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[64,71]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[72,78]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[79,84]}},{"name":"slog","path":"log/slog","span":{"start":[10,1],"end":[10,12],"bytes":[85,96]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[97,102]}},{"name":"exec","path":"os/exec","span":{"start":[12,1],"end":[12,11],"bytes":[103,113]}},{"name":"strings","path":"strings","span":{"start":[13,1],"end":[13,11],"bytes":[114,124]}},{"name":"time","path":"time","span":{"start":[14,1],"end":[14,8],"bytes":[125,132]}},{"name":"go-sqlite3","path":"github.com/mattn/go-sqlite3","alias":"_","span":{"start":[16,1],"end":[16,33],"bytes":[134,166]}}],"types":{"ValidateCommand":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand","kind":"struct","span":{"start":[19,1],"end":[28,2],"bytes":[170,344]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","kind":"method","span":{"start":[38,1],"end":[97,2],"bytes":[506,2440]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[38,1],"end":[38,74],"bytes":[506,579]}},{"name":"args","type":"[]string","span":{"start":[38,1],"end":[38,74],"bytes":[506,579]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"39:8":{"kind":"call","span":{"start":[39,8],"end":[39,69],"bytes":[587,648]},"callee":null},"40:2":{"kind":"call","span":{"start":[40,2],"end":[40,70],"bytes":[650,718]},"callee":null},"41:2":{"kind":"call","span":{"start":[41,2],"end":[41,75],"bytes":[720,793]},"callee":null},"42:2":{"kind":"call","span":{"start":[42,2],"end":[42,78],"bytes":[795,871]},"callee":null},"43:2":{"kind":"call","span":{"start":[43,2],"end":[43,103],"bytes":[873,974]},"callee":null},"44:2":{"kind":"call","span":{"start":[44,2],"end":[44,84],"bytes":[976,1058]},"callee":null},"45:2":{"kind":"call","span":{"start":[45,2],"end":[45,74],"bytes":[1060,1132]},"callee":null},"47:12":{"kind":"call","span":{"start":[47,12],"end":[47,26],"bytes":[1164,1178]},"callee":null},"52:10":{"kind":"call","span":{"start":[52,10],"end":[52,53],"bytes":[1242,1285]},"callee":null},"56:10":{"kind":"call","span":{"start":[56,10],"end":[56,59],"bytes":[1346,1395]},"callee":null},"63:2":{"kind":"call","span":{"start":[63,2],"end":[68,3],"bytes":[1472,1631]},"callee":null},"73:13":{"kind":"call","span":{"start":[73,13],"end":[73,41],"bytes":[1723,1751]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.validateLTXContinuity"},"74:13":{"kind":"call","span":{"start":[74,13],"end":[74,36],"bytes":[1764,1787]},"callee":null},"77:19":{"kind":"call","span":{"start":[77,19],"end":[77,40],"bytes":[1810,1831]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performRestore"},"78:12":{"kind":"call","span":{"start":[78,12],"end":[78,42],"bytes":[1843,1873]},"callee":null},"83:14":{"kind":"call","span":{"start":[83,14],"end":[83,55],"bytes":[1954,1995]},"callee":null},"83:30":{"kind":"call","span":{"start":[83,30],"end":[83,54],"bytes":[1970,1994]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performQuickCheck"},"85:14":{"kind":"call","span":{"start":[85,14],"end":[85,59],"bytes":[2029,2074]},"callee":null},"85:30":{"kind":"call","span":{"start":[85,30],"end":[85,58],"bytes":[2045,2073]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performIntegrityCheck"},"87:14":{"kind":"call","span":{"start":[87,14],"end":[87,58],"bytes":[2107,2151]},"callee":null},"87:30":{"kind":"call","span":{"start":[87,30],"end":[87,57],"bytes":[2123,2150]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck"},"89:14":{"kind":"call","span":{"start":[89,14],"end":[89,55],"bytes":[2180,2221]},"callee":null},"89:30":{"kind":"call","span":{"start":[89,30],"end":[89,54],"bytes":[2196,2220]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performQuickCheck"},"90:14":{"kind":"call","span":{"start":[90,14],"end":[90,59],"bytes":[2235,2280]},"callee":null},"90:30":{"kind":"call","span":{"start":[90,30],"end":[90,58],"bytes":[2251,2279]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performIntegrityCheck"},"91:14":{"kind":"call","span":{"start":[91,14],"end":[91,58],"bytes":[2294,2338]},"callee":null},"91:30":{"kind":"call","span":{"start":[91,30],"end":[91,57],"bytes":[2310,2337]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck"},"92:14":{"kind":"call","span":{"start":[92,14],"end":[92,59],"bytes":[2352,2397]},"callee":null},"92:30":{"kind":"call","span":{"start":[92,30],"end":[92,58],"bytes":[2368,2396]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation"},"96:9":{"kind":"call","span":{"start":[96,9],"end":[96,33],"bytes":[2414,2438]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.reportResults"}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Usage":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Usage","kind":"method","span":{"start":[462,1],"end":[504,2],"bytes":[11603,12575]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"463:2":{"kind":"call","span":{"start":[463,2],"end":[503,7],"bytes":[11640,12573]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.calculateDBChecksum":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.calculateDBChecksum","kind":"method","span":{"start":[401,1],"end":[414,2],"bytes":[10277,10558]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.calculateDBChecksum","parameters":[{"name":"path","type":"string","span":{"start":[401,1],"end":[401,77],"bytes":[10277,10353]}}],"return_type":"([]byte, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"402:15":{"kind":"call","span":{"start":[402,15],"end":[402,28],"bytes":[10368,10381]},"callee":null},"406:8":{"kind":"call","span":{"start":[406,8],"end":[406,20],"bytes":[10427,10439]},"callee":null},"408:10":{"kind":"call","span":{"start":[408,10],"end":[408,19],"bytes":[10450,10459]},"callee":null},"409:15":{"kind":"call","span":{"start":[409,15],"end":[409,34],"bytes":[10474,10493]},"callee":null},"413:9":{"kind":"call","span":{"start":[413,9],"end":[413,22],"bytes":[10538,10551]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getRowCount":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getRowCount","kind":"method","span":{"start":[435,1],"end":[440,2],"bytes":[10981,11191]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getRowCount","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[435,1],"end":[435,79],"bytes":[10981,11059]}},{"name":"table","type":"string","span":{"start":[435,1],"end":[435,79],"bytes":[10981,11059]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"437:11":{"kind":"call","span":{"start":[437,11],"end":[437,56],"bytes":[11085,11130]},"callee":null},"438:9":{"kind":"call","span":{"start":[438,9],"end":[438,27],"bytes":[11139,11157]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getTableList":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getTableList","kind":"method","span":{"start":[416,1],"end":[433,2],"bytes":[10560,10979]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getTableList","parameters":[{"name":"db","type":"*database/sql.DB","span":{"start":[416,1],"end":[416,71],"bytes":[10560,10630]}}],"return_type":"([]string, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"417:15":{"kind":"call","span":{"start":[417,15],"end":[417,105],"bytes":[10645,10735]},"callee":null},"421:8":{"kind":"call","span":{"start":[421,8],"end":[421,20],"bytes":[10781,10793]},"callee":null},"424:6":{"kind":"call","span":{"start":[424,6],"end":[424,17],"bytes":[10821,10832]},"callee":null},"426:13":{"kind":"call","span":{"start":[426,13],"end":[426,30],"bytes":[10866,10883]},"callee":null},"429:12":{"kind":"call","span":{"start":[429,12],"end":[429,33],"bytes":[10932,10953]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck","kind":"method","span":{"start":[249,1],"end":[290,2],"bytes":[6126,7333]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[249,1],"end":[249,87],"bytes":[6126,6212]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","metrics":{"cyclomatic":4},"body":{"250:15":{"kind":"call","span":{"start":[250,15],"end":[250,25],"bytes":[6227,6237]},"callee":null},"253:14":{"kind":"call","span":{"start":[253,14],"end":[253,42],"bytes":[6305,6333]},"callee":null},"256:25":{"kind":"call","span":{"start":[256,25],"end":[256,58],"bytes":[6363,6396]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.calculateDBChecksum"},"259:25":{"kind":"call","span":{"start":[259,25],"end":[259,84],"bytes":[6462,6521]},"callee":null},"260:21":{"kind":"call","span":{"start":[260,21],"end":[260,42],"bytes":[6542,6563]},"callee":null},"264:27":{"kind":"call","span":{"start":[264,27],"end":[264,62],"bytes":[6610,6645]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.calculateDBChecksum"},"267:25":{"kind":"call","span":{"start":[267,25],"end":[267,86],"bytes":[6711,6772]},"callee":null},"268:21":{"kind":"call","span":{"start":[268,21],"end":[268,42],"bytes":[6793,6814]},"callee":null},"272:20":{"kind":"call","span":{"start":[272,20],"end":[272,41],"bytes":[6854,6875]},"callee":null},"273:38":{"kind":"call","span":{"start":[273,38],"end":[273,71],"bytes":[6913,6946]},"callee":null},"274:40":{"kind":"call","span":{"start":[274,40],"end":[274,75],"bytes":[6986,7021]},"callee":null},"276:31":{"kind":"call","span":{"start":[276,31],"end":[276,55],"bytes":[7053,7077]},"callee":null},"276:5":{"kind":"call","span":{"start":[276,5],"end":[276,27],"bytes":[7027,7049]},"callee":null},"283:2":{"kind":"call","span":{"start":[283,2],"end":[287,3],"bytes":[7191,7315]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation","kind":"method","span":{"start":[292,1],"end":[363,2],"bytes":[7335,9341]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[292,1],"end":[292,88],"bytes":[7335,7422]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","metrics":{"cyclomatic":9},"body":{"293:15":{"kind":"call","span":{"start":[293,15],"end":[293,25],"bytes":[7437,7447]},"callee":null},"296:14":{"kind":"call","span":{"start":[296,14],"end":[296,42],"bytes":[7522,7550]},"callee":null},"299:19":{"kind":"call","span":{"start":[299,19],"end":[299,50],"bytes":[7574,7605]},"callee":null},"302:25":{"kind":"call","span":{"start":[302,25],"end":[302,79],"bytes":[7671,7725]},"callee":null},"305:8":{"kind":"call","span":{"start":[305,8],"end":[305,24],"bytes":[7752,7768]},"callee":null},"307:21":{"kind":"call","span":{"start":[307,21],"end":[307,54],"bytes":[7790,7823]},"callee":null},"310:25":{"kind":"call","span":{"start":[310,25],"end":[310,81],"bytes":[7889,7945]},"callee":null},"313:8":{"kind":"call","span":{"start":[313,8],"end":[313,26],"bytes":[7972,7990]},"callee":null},"315:17":{"kind":"call","span":{"start":[315,17],"end":[315,41],"bytes":[8008,8032]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getTableList"},"318:25":{"kind":"call","span":{"start":[318,25],"end":[318,73],"bytes":[8098,8146]},"callee":null},"319:21":{"kind":"call","span":{"start":[319,21],"end":[319,42],"bytes":[8167,8188]},"callee":null},"323:37":{"kind":"call","span":{"start":[323,37],"end":[323,48],"bytes":[8245,8256]},"callee":null},"327:23":{"kind":"call","span":{"start":[327,23],"end":[327,53],"bytes":[8330,8360]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getRowCount"},"330:26":{"kind":"call","span":{"start":[330,26],"end":[330,96],"bytes":[8429,8499]},"callee":null},"331:22":{"kind":"call","span":{"start":[331,22],"end":[331,43],"bytes":[8521,8542]},"callee":null},"335:25":{"kind":"call","span":{"start":[335,25],"end":[335,57],"bytes":[8589,8621]},"callee":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getRowCount"},"338:26":{"kind":"call","span":{"start":[338,26],"end":[338,98],"bytes":[8690,8762]},"callee":null},"339:22":{"kind":"call","span":{"start":[339,22],"end":[339,43],"bytes":[8784,8805]},"callee":null},"345:19":{"kind":"call","span":{"start":[345,19],"end":[345,58],"bytes":[8902,8941]},"callee":null},"345:62":{"kind":"call","span":{"start":[345,62],"end":[345,127],"bytes":[8945,9010]},"callee":null},"349:20":{"kind":"call","span":{"start":[349,20],"end":[349,41],"bytes":[9038,9059]},"callee":null},"356:2":{"kind":"call","span":{"start":[356,2],"end":[360,3],"bytes":[9191,9323]},"callee":null},"359:21":{"kind":"call","span":{"start":[359,21],"end":[359,32],"bytes":[9308,9319]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performIntegrityCheck":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performIntegrityCheck","kind":"method","span":{"start":[194,1],"end":[247,2],"bytes":[4744,6124]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performIntegrityCheck","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[194,1],"end":[194,88],"bytes":[4744,4831]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","metrics":{"cyclomatic":6},"body":{"195:15":{"kind":"call","span":{"start":[195,15],"end":[195,25],"bytes":[4846,4856]},"callee":null},"198:14":{"kind":"call","span":{"start":[198,14],"end":[198,42],"bytes":[4931,4959]},"callee":null},"201:13":{"kind":"call","span":{"start":[201,13],"end":[201,46],"bytes":[4977,5010]},"callee":null},"204:25":{"kind":"call","span":{"start":[204,25],"end":[204,72],"bytes":[5076,5123]},"callee":null},"207:8":{"kind":"call","span":{"start":[207,8],"end":[207,18],"bytes":[5150,5160]},"callee":null},"209:15":{"kind":"call","span":{"start":[209,15],"end":[209,49],"bytes":[5176,5210]},"callee":null},"212:25":{"kind":"call","span":{"start":[212,25],"end":[212,71],"bytes":[5276,5322]},"callee":null},"213:21":{"kind":"call","span":{"start":[213,21],"end":[213,42],"bytes":[5343,5364]},"callee":null},"216:8":{"kind":"call","span":{"start":[216,8],"end":[216,20],"bytes":[5391,5403]},"callee":null},"219:6":{"kind":"call","span":{"start":[219,6],"end":[219,17],"bytes":[5432,5443]},"callee":null},"221:13":{"kind":"call","span":{"start":[221,13],"end":[221,29],"bytes":[5476,5492]},"callee":null},"223:26":{"kind":"call","span":{"start":[223,26],"end":[223,71],"bytes":[5557,5602]},"callee":null},"224:22":{"kind":"call","span":{"start":[224,22],"end":[224,43],"bytes":[5624,5645]},"callee":null},"227:13":{"kind":"call","span":{"start":[227,13],"end":[227,34],"bytes":[5679,5700]},"callee":null},"230:20":{"kind":"call","span":{"start":[230,20],"end":[230,41],"bytes":[5724,5745]},"callee":null},"233:5":{"kind":"call","span":{"start":[233,5],"end":[233,17],"bytes":[5794,5806]},"callee":null},"237:25":{"kind":"call","span":{"start":[237,25],"end":[237,81],"bytes":[5917,5973]},"callee":null},"240:2":{"kind":"call","span":{"start":[240,2],"end":[244,3],"bytes":[5979,6106]},"callee":null},"243:13":{"kind":"call","span":{"start":[243,13],"end":[243,25],"bytes":[6088,6100]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performQuickCheck":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performQuickCheck","kind":"method","span":{"start":[154,1],"end":[192,2],"bytes":[3778,4742]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performQuickCheck","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[154,1],"end":[154,84],"bytes":[3778,3861]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","metrics":{"cyclomatic":4},"body":{"155:15":{"kind":"call","span":{"start":[155,15],"end":[155,25],"bytes":[3876,3886]},"callee":null},"158:14":{"kind":"call","span":{"start":[158,14],"end":[158,42],"bytes":[3957,3985]},"callee":null},"161:13":{"kind":"call","span":{"start":[161,13],"end":[161,46],"bytes":[4003,4036]},"callee":null},"164:25":{"kind":"call","span":{"start":[164,25],"end":[164,72],"bytes":[4102,4149]},"callee":null},"167:8":{"kind":"call","span":{"start":[167,8],"end":[167,18],"bytes":[4176,4186]},"callee":null},"170:8":{"kind":"call","span":{"start":[170,8],"end":[170,41],"bytes":[4219,4252]},"callee":null},"171:20":{"kind":"call","span":{"start":[171,20],"end":[171,41],"bytes":[4291,4312]},"callee":null},"175:25":{"kind":"call","span":{"start":[175,25],"end":[175,67],"bytes":[4379,4421]},"callee":null},"183:25":{"kind":"call","span":{"start":[183,25],"end":[183,77],"bytes":[4571,4623]},"callee":null},"186:2":{"kind":"call","span":{"start":[186,2],"end":[189,3],"bytes":[4629,4724]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performRestore":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performRestore","kind":"method","span":{"start":[99,1],"end":[152,2],"bytes":[2442,3776]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performRestore","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[99,1],"end":[99,81],"bytes":[2442,2522]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","metrics":{"cyclomatic":6},"body":{"100:15":{"kind":"call","span":{"start":[100,15],"end":[100,25],"bytes":[2537,2547]},"callee":null},"103:14":{"kind":"call","span":{"start":[103,14],"end":[103,42],"bytes":[2614,2642]},"callee":null},"106:12":{"kind":"call","span":{"start":[106,12],"end":[106,35],"bytes":[2659,2682]},"callee":null},"106:52":{"kind":"call","span":{"start":[106,52],"end":[106,70],"bytes":[2699,2717]},"callee":null},"107:3":{"kind":"call","span":{"start":[107,3],"end":[107,73],"bytes":[2722,2792]},"callee":null},"112:9":{"kind":"call","span":{"start":[112,9],"end":[116,4],"bytes":[2849,2968]},"callee":null},"118:9":{"kind":"call","span":{"start":[118,9],"end":[121,4],"bytes":[2987,3080]},"callee":null},"124:17":{"kind":"call","span":{"start":[124,17],"end":[124,37],"bytes":[3101,3121]},"callee":null},"125:20":{"kind":"call","span":{"start":[125,20],"end":[125,41],"bytes":[3141,3162]},"callee":null},"129:25":{"kind":"call","span":{"start":[129,25],"end":[129,91],"bytes":[3229,3295]},"callee":null},"129:76":{"kind":"call","span":{"start":[129,76],"end":[129,90],"bytes":[3280,3294]},"callee":null},"133:15":{"kind":"call","span":{"start":[133,15],"end":[133,36],"bytes":[3330,3351]},"callee":null},"135:25":{"kind":"call","span":{"start":[135,25],"end":[135,76],"bytes":[3414,3465]},"callee":null},"142:18":{"kind":"call","span":{"start":[142,18],"end":[142,39],"bytes":[3574,3595]},"callee":null},"143:37":{"kind":"call","span":{"start":[143,37],"end":[143,48],"bytes":[3646,3657]},"callee":null},"146:2":{"kind":"call","span":{"start":[146,2],"end":[149,3],"bytes":[3663,3758]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.reportResults":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.reportResults","kind":"method","span":{"start":[442,1],"end":[460,2],"bytes":[11193,11601]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.reportResults","parameters":[{"name":"results","type":"[]github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","span":{"start":[442,1],"end":[442,76],"bytes":[11193,11268]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"447:4":{"kind":"call","span":{"start":[447,4],"end":[450,5],"bytes":[11368,11474]},"callee":null},"455:3":{"kind":"call","span":{"start":[455,3],"end":[455,44],"bytes":[11501,11542]},"callee":null},"459:9":{"kind":"call","span":{"start":[459,9],"end":[459,40],"bytes":[11568,11599]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.validateLTXContinuity":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.validateLTXContinuity","kind":"method","span":{"start":[365,1],"end":[399,2],"bytes":[9343,10275]},"signature":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.validateLTXContinuity","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[365,1],"end":[365,88],"bytes":[9343,9430]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","metrics":{"cyclomatic":3},"body":{"366:15":{"kind":"call","span":{"start":[366,15],"end":[366,25],"bytes":[9445,9455]},"callee":null},"369:14":{"kind":"call","span":{"start":[369,14],"end":[369,42],"bytes":[9529,9557]},"callee":null},"372:9":{"kind":"call","span":{"start":[372,9],"end":[372,68],"bytes":[9571,9630]},"callee":null},"373:17":{"kind":"call","span":{"start":[373,17],"end":[373,29],"bytes":[9647,9659]},"callee":null},"376:25":{"kind":"call","span":{"start":[376,25],"end":[376,73],"bytes":[9725,9773]},"callee":null},"377:21":{"kind":"call","span":{"start":[377,21],"end":[377,42],"bytes":[9794,9815]},"callee":null},"381:11":{"kind":"call","span":{"start":[381,11],"end":[381,46],"bytes":[9846,9881]},"callee":null},"381:25":{"kind":"call","span":{"start":[381,25],"end":[381,39],"bytes":[9860,9874]},"callee":null},"382:5":{"kind":"call","span":{"start":[382,5],"end":[382,15],"bytes":[9886,9896]},"callee":null},"385:21":{"kind":"call","span":{"start":[385,21],"end":[385,42],"bytes":[9992,10013]},"callee":null},"390:20":{"kind":"call","span":{"start":[390,20],"end":[390,41],"bytes":[10075,10096]},"callee":null},"391:40":{"kind":"call","span":{"start":[391,40],"end":[391,50],"bytes":[10136,10146]},"callee":null},"393:2":{"kind":"call","span":{"start":[393,2],"end":[396,3],"bytes":[10153,10257]},"callee":null}}}},"fields":{"CheckType":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/CheckType","kind":"field","type":"string","span":{"start":[25,1],"end":[25,22],"bytes":[279,300]}},"ConfigPath":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/ConfigPath","kind":"field","type":"string","span":{"start":[27,1],"end":[27,22],"bytes":[321,342]}},"LTXContinuity":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/LTXContinuity","kind":"field","type":"bool","span":{"start":[26,1],"end":[26,20],"bytes":[301,320]}},"Main":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/Main","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream-test.Main","span":{"start":[20,1],"end":[20,12],"bytes":[200,211]}},"ReplicaURL":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/ReplicaURL","kind":"field","type":"string","span":{"start":[23,1],"end":[23,22],"bytes":[235,256]}},"RestoredDB":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/RestoredDB","kind":"field","type":"string","span":{"start":[24,1],"end":[24,22],"bytes":[257,278]}},"SourceDB":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/SourceDB","kind":"field","type":"string","span":{"start":[22,1],"end":[22,22],"bytes":[213,234]}}}},"ValidationResult":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult","kind":"struct","span":{"start":[30,1],"end":[36,2],"bytes":[346,504]},"callables":{},"fields":{"CheckType":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult/CheckType","kind":"field","type":"string","span":{"start":[31,1],"end":[31,21],"bytes":[377,397]}},"Details":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult/Details","kind":"field","type":"map[string]interface{}","span":{"start":[35,1],"end":[35,37],"bytes":[466,502]}},"Duration":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult/Duration","kind":"field","type":"time.Duration","span":{"start":[33,1],"end":[33,28],"bytes":[417,444]}},"ErrorMessage":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult/ErrorMessage","kind":"field","type":"string","span":{"start":[34,1],"end":[34,21],"bytes":[445,465]}},"Passed":{"id":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidationResult/Passed","kind":"field","type":"bool","span":{"start":[32,1],"end":[32,19],"bytes":[398,416]}}}}},"functions":{},"content_hash":"e60ce14e89afa8decef6dfab01ca6c537d4c7beeda6658ebb90ad8c9cf4766cc"},"cmd/litestream/databases.go":{"id":"can://go/litestream/cmd/litestream/databases.go","kind":"module","span":{"start":[1,1],"end":[105,1],"bytes":[0,2227]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"text/tabwriter\"\n)\n\n// DatabasesCommand is a command for listing managed databases.\ntype DatabasesCommand struct{}\n\n// Run executes the command.\nfunc (c *DatabasesCommand) Run(_ context.Context, args []string) (err error) {\n\tfs := flag.NewFlagSet(\"litestream-databases\", flag.ContinueOnError)\n\tconfigPath, noExpandEnv := registerConfigFlag(fs)\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t} else if fs.NArg() != 0 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\t// Load configuration.\n\tif *configPath == \"\" {\n\t\t*configPath = DefaultConfigPath()\n\t}\n\tconfig, err := ReadConfigFile(*configPath, !*noExpandEnv)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdatabases := make([]DatabaseInfo, 0, len(config.DBs))\n\tfor _, dbConfig := range config.DBs {\n\t\tdb, err := NewDBFromConfig(dbConfig)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tdatabases = append(databases, DatabaseInfo{\n\t\t\tPath: db.Path(),\n\t\t\tReplica: db.Replica.Client.Type(),\n\t\t})\n\t}\n\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(databases, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tw := tabwriter.NewWriter(os.Stdout, 0, 8, 2, ' ', 0)\n\tdefer w.Flush()\n\n\tfmt.Fprintln(w, \"path\\treplica\")\n\tfor _, db := range databases {\n\t\tfmt.Fprintf(w, \"%s\\t%s\\n\", db.Path, db.Replica)\n\t}\n\n\treturn nil\n}\n\ntype DatabaseInfo struct {\n\tPath string `json:\"path\"`\n\tReplica string `json:\"replica\"`\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *DatabasesCommand) Usage() {\n\tfmt.Printf(`\nThe databases command lists all databases in the configuration file.\n\nUsage:\n\n\tlitestream databases [arguments]\n\nArguments:\n\n\t-config PATH\n\t Specifies the configuration file.\n\t Defaults to %s\n\n\t-json\n\t Output raw JSON instead of human-readable text.\n\n\t-no-expand-env\n\t Disables environment variable expansion in configuration file.\n\nExamples:\n\n\t$ litestream databases\n\t$ litestream databases -config /path/to/litestream.yml\n\t$ litestream databases -no-expand-env -config /path/to/litestream.yml\n\n`[1:],\n\t\tDefaultConfigPath(),\n\t)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[34,50]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[51,58]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[59,65]}},{"name":"os","path":"os","span":{"start":[8,1],"end":[8,6],"bytes":[66,71]}},{"name":"tabwriter","path":"text/tabwriter","span":{"start":[9,1],"end":[9,18],"bytes":[72,89]}}],"types":{"DatabaseInfo":{"id":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabaseInfo","kind":"struct","span":{"start":[69,1],"end":[72,2],"bytes":[1497,1588]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabaseInfo/Path","kind":"field","type":"string","span":{"start":[70,1],"end":[70,30],"bytes":[1524,1553]}},"Replica":{"id":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabaseInfo/Replica","kind":"field","type":"string","span":{"start":[71,1],"end":[71,33],"bytes":[1554,1586]}}}},"DatabasesCommand":{"id":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand","kind":"struct","span":{"start":[13,1],"end":[13,31],"bytes":[157,187]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run":{"id":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","kind":"method","span":{"start":[16,1],"end":[67,2],"bytes":[218,1495]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","parameters":[{"name":"_","type":"context.Context","span":{"start":[16,1],"end":[16,79],"bytes":[218,296]}},{"name":"args","type":"[]string","span":{"start":[16,1],"end":[16,79],"bytes":[218,296]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"17:8":{"kind":"call","span":{"start":[17,8],"end":[17,69],"bytes":[304,365]},"callee":null},"18:29":{"kind":"call","span":{"start":[18,29],"end":[18,51],"bytes":[394,416]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag"},"19:16":{"kind":"call","span":{"start":[19,16],"end":[19,57],"bytes":[432,473]},"callee":null},"21:12":{"kind":"call","span":{"start":[21,12],"end":[21,26],"bytes":[505,519]},"callee":null},"23:12":{"kind":"call","span":{"start":[23,12],"end":[23,21],"bytes":[558,567]},"callee":null},"24:10":{"kind":"call","span":{"start":[24,10],"end":[24,42],"bytes":[584,616]},"callee":null},"29:17":{"kind":"call","span":{"start":[29,17],"end":[29,36],"bytes":[685,704]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"},"31:17":{"kind":"call","span":{"start":[31,17],"end":[31,59],"bytes":[724,766]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"36:15":{"kind":"call","span":{"start":[36,15],"end":[36,55],"bytes":[815,855]},"callee":null},"36:39":{"kind":"call","span":{"start":[36,39],"end":[36,54],"bytes":[839,854]},"callee":null},"38:14":{"kind":"call","span":{"start":[38,14],"end":[38,39],"bytes":[908,933]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"43:15":{"kind":"call","span":{"start":[43,15],"end":[46,5],"bytes":[985,1082]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig"},"44:13":{"kind":"call","span":{"start":[44,13],"end":[44,22],"bytes":[1029,1038]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"45:13":{"kind":"call","span":{"start":[45,13],"end":[45,37],"bytes":[1052,1076]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type"},"50:18":{"kind":"call","span":{"start":[50,18],"end":[50,57],"bytes":[1122,1161]},"callee":null},"52:11":{"kind":"call","span":{"start":[52,11],"end":[52,59],"bytes":[1190,1238]},"callee":null},"54:15":{"kind":"call","span":{"start":[54,15],"end":[54,29],"bytes":[1257,1271]},"callee":null},"54:3":{"kind":"call","span":{"start":[54,3],"end":[54,30],"bytes":[1245,1272]},"callee":null},"58:7":{"kind":"call","span":{"start":[58,7],"end":[58,54],"bytes":[1296,1343]},"callee":null},"59:8":{"kind":"call","span":{"start":[59,8],"end":[59,17],"bytes":[1351,1360]},"callee":null},"61:2":{"kind":"call","span":{"start":[61,2],"end":[61,34],"bytes":[1363,1395]},"callee":null},"63:3":{"kind":"call","span":{"start":[63,3],"end":[63,50],"bytes":[1430,1477]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Usage":{"id":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Usage","kind":"method","span":{"start":[75,1],"end":[104,2],"bytes":[1633,2226]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"102:3":{"kind":"call","span":{"start":[102,3],"end":[102,22],"bytes":[2201,2220]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"},"76:2":{"kind":"call","span":{"start":[76,2],"end":[103,3],"bytes":[1671,2224]},"callee":null}}}}}},"functions":{},"content_hash":"d9ceaff1b578d1b0bbebb2951a94207cbb6581ef0c59e2fcb7bd1ec27426851b"},"cmd/litestream/directory_watcher.go":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go","kind":"module","span":{"start":[1,1],"end":[439,1],"bytes":[0,9884]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log/slog\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/fsnotify/fsnotify\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\nconst debounceInterval = 250 * time.Millisecond\n\n// DirectoryMonitor watches a directory tree for SQLite databases and dynamically\n// manages database instances within the store as files are created or removed.\ntype DirectoryMonitor struct {\n\tstore *litestream.Store\n\tconfig *DBConfig\n\tdirPath string\n\tpattern string\n\trecursive bool\n\n\twatcher *fsnotify.Watcher\n\tctx context.Context\n\tcancel context.CancelFunc\n\n\tlogger *slog.Logger\n\n\tmu sync.Mutex\n\tdbs map[string]*litestream.DB\n\twatchedDirs map[string]struct{}\n\n\t// Only accessed from the run() goroutine, so no mutex is needed.\n\tpendingEvents map[string]fsnotify.Op\n\tdebounceActive bool\n\n\twg sync.WaitGroup\n}\n\n// NewDirectoryMonitor returns a new monitor for directory-based replication.\nfunc NewDirectoryMonitor(ctx context.Context, store *litestream.Store, dbc *DBConfig, existing []*litestream.DB) (*DirectoryMonitor, error) {\n\tif dbc == nil {\n\t\treturn nil, errors.New(\"database config required\")\n\t}\n\tif store == nil {\n\t\treturn nil, errors.New(\"store required\")\n\t}\n\n\tdirPath, err := expand(dbc.Dir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif _, err := os.Stat(dirPath); err != nil {\n\t\treturn nil, err\n\t}\n\n\twatcher, err := fsnotify.NewWatcher()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tmonitorCtx, cancel := context.WithCancel(ctx)\n\tdm := \u0026DirectoryMonitor{\n\t\tstore: store,\n\t\tconfig: dbc,\n\t\tdirPath: dirPath,\n\t\tpattern: dbc.Pattern,\n\t\trecursive: dbc.Recursive,\n\t\twatcher: watcher,\n\t\tctx: monitorCtx,\n\t\tcancel: cancel,\n\t\tlogger: slog.With(\"dir\", dirPath),\n\t\tdbs: make(map[string]*litestream.DB),\n\t\twatchedDirs: make(map[string]struct{}),\n\t\tpendingEvents: make(map[string]fsnotify.Op),\n\t}\n\n\tfor _, db := range existing {\n\t\tdm.dbs[db.Path()] = db\n\t}\n\n\tif err := dm.addInitialWatches(); err != nil {\n\t\twatcher.Close()\n\t\tcancel()\n\t\treturn nil, err\n\t}\n\n\tdm.scanDirectory(dm.dirPath)\n\n\tdm.wg.Add(1)\n\tgo dm.run()\n\n\treturn dm, nil\n}\n\n// Close stops the directory monitor and releases resources.\nfunc (dm *DirectoryMonitor) Close() {\n\tdm.cancel()\n\t_ = dm.watcher.Close()\n\tdm.wg.Wait()\n}\n\nfunc (dm *DirectoryMonitor) run() {\n\tdefer dm.wg.Done()\n\n\t// Debounce timer lives in this goroutine so shutdown via dm.wg.Wait() is clean.\n\tdebounceTimer := time.NewTimer(debounceInterval)\n\tdebounceTimer.Stop()\n\tdefer debounceTimer.Stop()\n\n\tfor {\n\t\tselect {\n\t\tcase \u003c-dm.ctx.Done():\n\t\t\treturn\n\t\tcase event, ok := \u003c-dm.watcher.Events:\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif dm.handleEvent(event) \u0026\u0026 !dm.debounceActive {\n\t\t\t\tdebounceTimer.Reset(debounceInterval)\n\t\t\t\tdm.debounceActive = true\n\t\t\t}\n\t\tcase \u003c-debounceTimer.C:\n\t\t\tdm.flushPendingEvents()\n\t\tcase err, ok := \u003c-dm.watcher.Errors:\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdm.logger.Error(\"directory watcher error\", \"error\", err)\n\t\t}\n\t}\n}\n\nfunc (dm *DirectoryMonitor) addInitialWatches() error {\n\tif dm.recursive {\n\t\treturn filepath.WalkDir(dm.dirPath, func(path string, d os.DirEntry, err error) error {\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !d.IsDir() {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn dm.addDirectoryWatch(path)\n\t\t})\n\t}\n\n\treturn dm.addDirectoryWatch(dm.dirPath)\n}\n\nfunc (dm *DirectoryMonitor) addDirectoryWatch(path string) error {\n\tabspath := filepath.Clean(path)\n\n\tdm.mu.Lock()\n\tdefer dm.mu.Unlock()\n\n\tif _, ok := dm.watchedDirs[abspath]; ok {\n\t\treturn nil\n\t}\n\tdm.watchedDirs[abspath] = struct{}{}\n\n\tif err := dm.watcher.Add(abspath); err != nil {\n\t\tdelete(dm.watchedDirs, abspath)\n\t\treturn err\n\t}\n\n\tdm.logger.Debug(\"watching directory\", \"path\", abspath)\n\treturn nil\n}\n\nfunc (dm *DirectoryMonitor) removeDirectoryWatch(path string) {\n\tabspath := filepath.Clean(path)\n\n\tdm.mu.Lock()\n\tdefer dm.mu.Unlock()\n\n\tif _, ok := dm.watchedDirs[abspath]; !ok {\n\t\treturn\n\t}\n\tdelete(dm.watchedDirs, abspath)\n\n\tif err := dm.watcher.Remove(abspath); err != nil {\n\t\tdm.logger.Debug(\"remove directory watch\", \"path\", abspath, \"error\", err)\n\t}\n}\n\n// handleEvent processes a single fsnotify event. Returns true if pending events\n// were queued and the debounce timer should be reset.\nfunc (dm *DirectoryMonitor) handleEvent(event fsnotify.Event) bool {\n\tpath := filepath.Clean(event.Name)\n\tif path == \"\" {\n\t\treturn false\n\t}\n\n\tif dm.shouldSkipPath(path) {\n\t\treturn false\n\t}\n\n\tinfo, statErr := os.Stat(path)\n\tisDir := statErr == nil \u0026\u0026 info.IsDir()\n\n\t// Early pattern check for create/write only. Rename must pass through\n\t// to removal handling below, since the old path may be a tracked DB.\n\tif !isDir \u0026\u0026 event.Op\u0026(fsnotify.Create|fsnotify.Write) != 0 {\n\t\tif !dm.matchesPattern(path) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tdm.mu.Lock()\n\t_, wasWatchedDir := dm.watchedDirs[path]\n\tdm.mu.Unlock()\n\n\tif isDir \u0026\u0026 event.Op\u0026(fsnotify.Create|fsnotify.Rename) != 0 {\n\t\tif dm.recursive {\n\t\t\tif err := dm.addDirectoryWatch(path); err != nil {\n\t\t\t\tdm.logger.Error(\"add directory watch\", \"path\", path, \"error\", err)\n\t\t\t}\n\t\t\tdm.scanDirectory(path)\n\t\t}\n\t}\n\n\tif (isDir || wasWatchedDir) \u0026\u0026 event.Op\u0026(fsnotify.Remove|fsnotify.Rename) != 0 {\n\t\tdm.removeDirectoryWatch(path)\n\t\tdm.removeDatabasesUnder(path)\n\t\treturn false\n\t}\n\n\tif isDir {\n\t\treturn false\n\t}\n\n\tif statErr != nil \u0026\u0026 !os.IsNotExist(statErr) {\n\t\tdm.logger.Debug(\"stat event path\", \"path\", path, \"error\", statErr)\n\t\treturn false\n\t}\n\n\tif event.Op\u0026(fsnotify.Remove|fsnotify.Rename) != 0 {\n\t\tdm.removeDatabase(path)\n\t\treturn false\n\t}\n\n\tif event.Op\u0026(fsnotify.Create|fsnotify.Write|fsnotify.Rename) != 0 {\n\t\tdm.pendingEvents[path] |= event.Op\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// flushPendingEvents processes all queued potential database events.\nfunc (dm *DirectoryMonitor) flushPendingEvents() {\n\tfor path := range dm.pendingEvents {\n\t\tselect {\n\t\tcase \u003c-dm.ctx.Done():\n\t\t\treturn\n\t\tdefault:\n\t\t}\n\t\tdm.handlePotentialDatabase(path)\n\t}\n\tdm.pendingEvents = make(map[string]fsnotify.Op)\n\tdm.debounceActive = false\n}\n\nfunc (dm *DirectoryMonitor) handlePotentialDatabase(path string) {\n\tif !dm.matchesPattern(path) {\n\t\treturn\n\t}\n\n\tdm.mu.Lock()\n\tif _, exists := dm.dbs[path]; exists {\n\t\tdm.mu.Unlock()\n\t\treturn\n\t}\n\tdm.dbs[path] = nil\n\tdm.mu.Unlock()\n\n\tvar db *litestream.DB\n\tsuccess := false\n\tdefer func() {\n\t\tif !success {\n\t\t\tif db != nil {\n\t\t\t\t_ = dm.store.UnregisterDB(dm.ctx, db.Path())\n\t\t\t}\n\t\t\tdm.mu.Lock()\n\t\t\tdelete(dm.dbs, path)\n\t\t\tdm.mu.Unlock()\n\t\t}\n\t}()\n\n\tif !IsSQLiteDatabase(path) {\n\t\treturn\n\t}\n\n\tvar err error\n\tdb, err = newDBFromDirectoryEntry(dm.config, dm.dirPath, path)\n\tif err != nil {\n\t\tdm.logger.Error(\"configure database\", \"path\", path, \"error\", err)\n\t\treturn\n\t}\n\n\tif err := dm.store.RegisterDB(db); err != nil {\n\t\tdm.logger.Error(\"register database with store\", \"path\", path, \"error\", err)\n\t\treturn\n\t}\n\n\tdm.mu.Lock()\n\tdm.dbs[path] = db\n\tdm.mu.Unlock()\n\n\tsuccess = true\n\tdm.logger.Info(\"added database to replication\", \"path\", path)\n}\n\nfunc (dm *DirectoryMonitor) removeDatabase(path string) {\n\tdm.mu.Lock()\n\tdb := dm.dbs[path]\n\tdm.mu.Unlock()\n\n\tif db == nil {\n\t\treturn\n\t}\n\n\tif err := dm.store.UnregisterDB(dm.ctx, db.Path()); err != nil {\n\t\tdm.logger.Error(\"unregister database from store\", \"path\", path, \"error\", err)\n\t\treturn\n\t}\n\n\tdm.mu.Lock()\n\tdelete(dm.dbs, path)\n\tdm.mu.Unlock()\n\n\tdm.logger.Info(\"removed database from replication\", \"path\", path)\n}\n\nfunc (dm *DirectoryMonitor) removeDatabasesUnder(dir string) {\n\tprefix := dir + string(os.PathSeparator)\n\n\tdm.mu.Lock()\n\tvar toClose []*litestream.DB\n\tvar toClosePaths []string\n\tfor path, db := range dm.dbs {\n\t\tif path == dir || strings.HasPrefix(path, prefix) {\n\t\t\ttoClose = append(toClose, db)\n\t\t\ttoClosePaths = append(toClosePaths, path)\n\t\t}\n\t}\n\tdm.mu.Unlock()\n\n\tfor i, db := range toClose {\n\t\tif db == nil {\n\t\t\tdm.mu.Lock()\n\t\t\tdelete(dm.dbs, toClosePaths[i])\n\t\t\tdm.mu.Unlock()\n\t\t\tcontinue\n\t\t}\n\t\tif err := dm.store.UnregisterDB(dm.ctx, db.Path()); err != nil {\n\t\t\tdm.logger.Error(\"unregister database from store\", \"path\", db.Path(), \"error\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\tdm.mu.Lock()\n\t\tdelete(dm.dbs, toClosePaths[i])\n\t\tdm.mu.Unlock()\n\t}\n}\n\nfunc (dm *DirectoryMonitor) matchesPattern(path string) bool {\n\tmatched, err := filepath.Match(dm.pattern, filepath.Base(path))\n\tif err != nil {\n\t\tdm.logger.Error(\"pattern match failed\", \"pattern\", dm.pattern, \"path\", path, \"error\", err)\n\t\treturn false\n\t}\n\treturn matched\n}\n\n// shouldSkipPath returns true for SQLite auxiliary files (WAL, SHM, journal)\n// that generate many events but are never databases themselves.\nfunc (dm *DirectoryMonitor) shouldSkipPath(path string) bool {\n\tbase := filepath.Base(path)\n\treturn strings.HasSuffix(base, \"-wal\") ||\n\t\tstrings.HasSuffix(base, \"-shm\") ||\n\t\tstrings.HasSuffix(base, \"-journal\")\n}\n\n// scanDirectory discovers pre-existing databases and is also called when new\n// directories appear to close the race window between watch registration and file creation.\nfunc (dm *DirectoryMonitor) scanDirectory(dir string) {\n\tif !dm.recursive {\n\t\tentries, err := os.ReadDir(dir)\n\t\tif err != nil {\n\t\t\tif !os.IsNotExist(err) {\n\t\t\t\tdm.logger.Debug(\"read directory\", \"path\", dir, \"error\", err)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tfor _, entry := range entries {\n\t\t\tif entry.IsDir() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpath := filepath.Join(dir, entry.Name())\n\t\t\tdm.handlePotentialDatabase(path)\n\t\t}\n\t\treturn\n\t}\n\n\terr := filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error {\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tdm.logger.Debug(\"scan directory entry\", \"path\", path, \"error\", err)\n\t\t\treturn nil\n\t\t}\n\n\t\tif d.IsDir() {\n\t\t\tif path != dir {\n\t\t\t\tif err := dm.addDirectoryWatch(path); err != nil {\n\t\t\t\t\tdm.logger.Error(\"add directory watch\", \"path\", path, \"error\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tdm.handlePotentialDatabase(path)\n\t\treturn nil\n\t})\n\tif err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\tdm.logger.Debug(\"scan directory\", \"path\", dir, \"error\", err)\n\t}\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"errors","path":"errors","span":{"start":[5,1],"end":[5,10],"bytes":[34,43]}},{"name":"slog","path":"log/slog","span":{"start":[6,1],"end":[6,12],"bytes":[44,55]}},{"name":"os","path":"os","span":{"start":[7,1],"end":[7,6],"bytes":[56,61]}},{"name":"filepath","path":"path/filepath","span":{"start":[8,1],"end":[8,17],"bytes":[62,78]}},{"name":"strings","path":"strings","span":{"start":[9,1],"end":[9,11],"bytes":[79,89]}},{"name":"sync","path":"sync","span":{"start":[10,1],"end":[10,8],"bytes":[90,97]}},{"name":"time","path":"time","span":{"start":[11,1],"end":[11,8],"bytes":[98,105]}},{"name":"fsnotify","path":"github.com/fsnotify/fsnotify","span":{"start":[13,1],"end":[13,32],"bytes":[107,138]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[15,1],"end":[15,37],"bytes":[140,176]}}],"types":{"DirectoryMonitor":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor","kind":"struct","span":{"start":[22,1],"end":[44,2],"bytes":[391,873]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close","kind":"method","span":{"start":[104,1],"end":[108,2],"bytes":[2225,2315]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close","parameters":[],"metrics":{"cyclomatic":1},"body":{"105:2":{"kind":"call","span":{"start":[105,2],"end":[105,13],"bytes":[2264,2275]},"callee":null},"106:6":{"kind":"call","span":{"start":[106,6],"end":[106,24],"bytes":[2281,2299]},"callee":null},"107:2":{"kind":"call","span":{"start":[107,2],"end":[107,14],"bytes":[2301,2313]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch","kind":"method","span":{"start":[157,1],"end":[175,2],"bytes":[3329,3734]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch","parameters":[{"name":"path","type":"string","span":{"start":[157,1],"end":[157,67],"bytes":[3329,3395]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"158:13":{"kind":"call","span":{"start":[158,13],"end":[158,33],"bytes":[3408,3428]},"callee":null},"160:2":{"kind":"call","span":{"start":[160,2],"end":[160,14],"bytes":[3431,3443]},"callee":null},"161:8":{"kind":"call","span":{"start":[161,8],"end":[161,22],"bytes":[3451,3465]},"callee":null},"168:12":{"kind":"call","span":{"start":[168,12],"end":[168,35],"bytes":[3576,3599]},"callee":null},"169:3":{"kind":"call","span":{"start":[169,3],"end":[169,34],"bytes":[3616,3647]},"callee":null},"173:2":{"kind":"call","span":{"start":[173,2],"end":[173,56],"bytes":[3666,3720]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches","kind":"method","span":{"start":[141,1],"end":[155,2],"bytes":[2996,3327]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"143:10":{"kind":"call","span":{"start":[143,10],"end":[151,5],"bytes":[3080,3280]},"callee":null},"154:9":{"kind":"call","span":{"start":[154,9],"end":[154,41],"bytes":[3293,3325]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch"}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches.closure_1","kind":"function","span":{"start":[143,1],"end":[151,5],"bytes":[3071,3280]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches.closure_1","parameters":[{"name":"path","type":"string","span":{"start":[143,1],"end":[143,90],"bytes":[3071,3160]}},{"name":"d","type":"os.DirEntry","span":{"start":[143,1],"end":[143,90],"bytes":[3071,3160]}},{"name":"err","type":"error","span":{"start":[143,1],"end":[143,90],"bytes":[3071,3160]}}],"return_type":"error","error_channel":["error"],"body":{"147:8":{"kind":"call","span":{"start":[147,8],"end":[147,17],"bytes":[3207,3216]},"callee":null},"150:11":{"kind":"call","span":{"start":[150,11],"end":[150,37],"bytes":[3249,3275]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.flushPendingEvents":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.flushPendingEvents","kind":"method","span":{"start":[258,1],"end":[269,2],"bytes":[5718,5982]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.flushPendingEvents","parameters":[],"metrics":{"cyclomatic":5},"body":{"261:10":{"kind":"call","span":{"start":[261,10],"end":[261,23],"bytes":[5827,5840]},"callee":null},"265:3":{"kind":"call","span":{"start":[265,3],"end":[265,35],"bytes":[5869,5901]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase"},"267:21":{"kind":"call","span":{"start":[267,21],"end":[267,49],"bytes":[5925,5953]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","kind":"method","span":{"start":[195,1],"end":[255,2],"bytes":[4230,5646]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","parameters":[{"name":"event","type":"github.com/fsnotify/fsnotify.Event","span":{"start":[195,1],"end":[195,69],"bytes":[4230,4298]}}],"return_type":"bool","metrics":{"cyclomatic":13},"body":{"196:10":{"kind":"call","span":{"start":[196,10],"end":[196,36],"bytes":[4308,4334]},"callee":null},"201:5":{"kind":"call","span":{"start":[201,5],"end":[201,28],"bytes":[4375,4398]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.shouldSkipPath"},"205:19":{"kind":"call","span":{"start":[205,19],"end":[205,32],"bytes":[4438,4451]},"callee":null},"206:29":{"kind":"call","span":{"start":[206,29],"end":[206,41],"bytes":[4480,4492]},"callee":null},"211:7":{"kind":"call","span":{"start":[211,7],"end":[211,30],"bytes":[4706,4729]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern"},"216:2":{"kind":"call","span":{"start":[216,2],"end":[216,14],"bytes":[4757,4769]},"callee":null},"218:2":{"kind":"call","span":{"start":[218,2],"end":[218,16],"bytes":[4813,4827]},"callee":null},"222:14":{"kind":"call","span":{"start":[222,14],"end":[222,40],"bytes":[4925,4951]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch"},"223:5":{"kind":"call","span":{"start":[223,5],"end":[223,71],"bytes":[4970,5036]},"callee":null},"225:4":{"kind":"call","span":{"start":[225,4],"end":[225,26],"bytes":[5045,5067]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory"},"230:3":{"kind":"call","span":{"start":[230,3],"end":[230,32],"bytes":[5160,5189]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDirectoryWatch"},"231:3":{"kind":"call","span":{"start":[231,3],"end":[231,32],"bytes":[5192,5221]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder"},"239:24":{"kind":"call","span":{"start":[239,24],"end":[239,46],"bytes":[5295,5317]},"callee":null},"240:3":{"kind":"call","span":{"start":[240,3],"end":[240,69],"bytes":[5322,5388]},"callee":null},"245:3":{"kind":"call","span":{"start":[245,3],"end":[245,26],"bytes":[5464,5487]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase"}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","kind":"method","span":{"start":[271,1],"end":[319,2],"bytes":[5984,6918]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","parameters":[{"name":"path","type":"string","span":{"start":[271,1],"end":[271,67],"bytes":[5984,6050]}}],"metrics":{"cyclomatic":8},"body":{"272:6":{"kind":"call","span":{"start":[272,6],"end":[272,29],"bytes":[6056,6079]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern"},"276:2":{"kind":"call","span":{"start":[276,2],"end":[276,14],"bytes":[6096,6108]},"callee":null},"278:3":{"kind":"call","span":{"start":[278,3],"end":[278,17],"bytes":[6151,6165]},"callee":null},"282:2":{"kind":"call","span":{"start":[282,2],"end":[282,16],"bytes":[6199,6213]},"callee":null},"286:8":{"kind":"call","span":{"start":[286,8],"end":[295,5],"bytes":[6263,6426]},"callee":null},"297:6":{"kind":"call","span":{"start":[297,6],"end":[297,28],"bytes":[6433,6455]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.IsSQLiteDatabase"},"302:12":{"kind":"call","span":{"start":[302,12],"end":[302,64],"bytes":[6497,6549]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry"},"304:3":{"kind":"call","span":{"start":[304,3],"end":[304,68],"bytes":[6569,6634]},"callee":null},"308:12":{"kind":"call","span":{"start":[308,12],"end":[308,35],"bytes":[6659,6682]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB"},"309:3":{"kind":"call","span":{"start":[309,3],"end":[309,78],"bytes":[6699,6774]},"callee":null},"313:2":{"kind":"call","span":{"start":[313,2],"end":[313,14],"bytes":[6789,6801]},"callee":null},"315:2":{"kind":"call","span":{"start":[315,2],"end":[315,16],"bytes":[6822,6836]},"callee":null},"318:2":{"kind":"call","span":{"start":[318,2],"end":[318,63],"bytes":[6855,6916]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase.closure_1","kind":"function","span":{"start":[286,1],"end":[295,5],"bytes":[6256,6426]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase.closure_1","parameters":[],"body":{"289:39":{"kind":"call","span":{"start":[289,39],"end":[289,48],"bytes":[6344,6353]},"callee":null},"289:9":{"kind":"call","span":{"start":[289,9],"end":[289,49],"bytes":[6314,6354]},"callee":null},"291:4":{"kind":"call","span":{"start":[291,4],"end":[291,16],"bytes":[6363,6375]},"callee":null},"292:4":{"kind":"call","span":{"start":[292,4],"end":[292,24],"bytes":[6379,6399]},"callee":null},"293:4":{"kind":"call","span":{"start":[293,4],"end":[293,18],"bytes":[6403,6417]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern","kind":"method","span":{"start":[374,1],"end":[381,2],"bytes":[8079,8352]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern","parameters":[{"name":"path","type":"string","span":{"start":[374,1],"end":[374,63],"bytes":[8079,8141]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"375:18":{"kind":"call","span":{"start":[375,18],"end":[375,65],"bytes":[8159,8206]},"callee":null},"375:45":{"kind":"call","span":{"start":[375,45],"end":[375,64],"bytes":[8186,8205]},"callee":null},"377:3":{"kind":"call","span":{"start":[377,3],"end":[377,93],"bytes":[8226,8316]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase","kind":"method","span":{"start":[321,1],"end":[340,2],"bytes":[6920,7338]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase","parameters":[{"name":"path","type":"string","span":{"start":[321,1],"end":[321,58],"bytes":[6920,6977]}}],"metrics":{"cyclomatic":3},"body":{"322:2":{"kind":"call","span":{"start":[322,2],"end":[322,14],"bytes":[6979,6991]},"callee":null},"324:2":{"kind":"call","span":{"start":[324,2],"end":[324,16],"bytes":[7013,7027]},"callee":null},"330:12":{"kind":"call","span":{"start":[330,12],"end":[330,52],"bytes":[7069,7109]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB"},"330:42":{"kind":"call","span":{"start":[330,42],"end":[330,51],"bytes":[7099,7108]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"331:3":{"kind":"call","span":{"start":[331,3],"end":[331,80],"bytes":[7126,7203]},"callee":null},"335:2":{"kind":"call","span":{"start":[335,2],"end":[335,14],"bytes":[7218,7230]},"callee":null},"336:2":{"kind":"call","span":{"start":[336,2],"end":[336,22],"bytes":[7232,7252]},"callee":null},"337:2":{"kind":"call","span":{"start":[337,2],"end":[337,16],"bytes":[7254,7268]},"callee":null},"339:2":{"kind":"call","span":{"start":[339,2],"end":[339,67],"bytes":[7271,7336]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder","kind":"method","span":{"start":[342,1],"end":[372,2],"bytes":[7340,8077]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder","parameters":[{"name":"dir","type":"string","span":{"start":[342,1],"end":[342,63],"bytes":[7340,7402]}}],"metrics":{"cyclomatic":6},"body":{"343:18":{"kind":"call","span":{"start":[343,18],"end":[343,42],"bytes":[7420,7444]},"callee":null},"345:2":{"kind":"call","span":{"start":[345,2],"end":[345,14],"bytes":[7447,7459]},"callee":null},"349:21":{"kind":"call","span":{"start":[349,21],"end":[349,52],"bytes":[7569,7600]},"callee":null},"350:14":{"kind":"call","span":{"start":[350,14],"end":[350,33],"bytes":[7616,7635]},"callee":null},"351:19":{"kind":"call","span":{"start":[351,19],"end":[351,45],"bytes":[7654,7680]},"callee":null},"354:2":{"kind":"call","span":{"start":[354,2],"end":[354,16],"bytes":[7689,7703]},"callee":null},"358:4":{"kind":"call","span":{"start":[358,4],"end":[358,16],"bytes":[7755,7767]},"callee":null},"359:4":{"kind":"call","span":{"start":[359,4],"end":[359,35],"bytes":[7771,7802]},"callee":null},"360:4":{"kind":"call","span":{"start":[360,4],"end":[360,18],"bytes":[7806,7820]},"callee":null},"363:13":{"kind":"call","span":{"start":[363,13],"end":[363,53],"bytes":[7849,7889]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB"},"363:43":{"kind":"call","span":{"start":[363,43],"end":[363,52],"bytes":[7879,7888]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"364:4":{"kind":"call","span":{"start":[364,4],"end":[364,86],"bytes":[7907,7989]},"callee":null},"364:62":{"kind":"call","span":{"start":[364,62],"end":[364,71],"bytes":[7965,7974]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"368:3":{"kind":"call","span":{"start":[368,3],"end":[368,15],"bytes":[8009,8021]},"callee":null},"369:3":{"kind":"call","span":{"start":[369,3],"end":[369,34],"bytes":[8024,8055]},"callee":null},"370:3":{"kind":"call","span":{"start":[370,3],"end":[370,17],"bytes":[8058,8072]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDirectoryWatch":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDirectoryWatch","kind":"method","span":{"start":[177,1],"end":[191,2],"bytes":[3736,4092]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDirectoryWatch","parameters":[{"name":"path","type":"string","span":{"start":[177,1],"end":[177,64],"bytes":[3736,3799]}}],"metrics":{"cyclomatic":3},"body":{"178:13":{"kind":"call","span":{"start":[178,13],"end":[178,33],"bytes":[3812,3832]},"callee":null},"180:2":{"kind":"call","span":{"start":[180,2],"end":[180,14],"bytes":[3835,3847]},"callee":null},"181:8":{"kind":"call","span":{"start":[181,8],"end":[181,22],"bytes":[3855,3869]},"callee":null},"186:2":{"kind":"call","span":{"start":[186,2],"end":[186,33],"bytes":[3928,3959]},"callee":null},"188:12":{"kind":"call","span":{"start":[188,12],"end":[188,38],"bytes":[3972,3998]},"callee":null},"189:3":{"kind":"call","span":{"start":[189,3],"end":[189,75],"bytes":[4015,4087]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run","kind":"method","span":{"start":[110,1],"end":[139,2],"bytes":[2317,2994]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run","parameters":[],"metrics":{"cyclomatic":10},"body":{"111:8":{"kind":"call","span":{"start":[111,8],"end":[111,20],"bytes":[2360,2372]},"callee":null},"114:19":{"kind":"call","span":{"start":[114,19],"end":[114,50],"bytes":[2474,2505]},"callee":null},"115:2":{"kind":"call","span":{"start":[115,2],"end":[115,22],"bytes":[2507,2527]},"callee":null},"116:8":{"kind":"call","span":{"start":[116,8],"end":[116,28],"bytes":[2535,2555]},"callee":null},"120:10":{"kind":"call","span":{"start":[120,10],"end":[120,23],"bytes":[2584,2597]},"callee":null},"126:7":{"kind":"call","span":{"start":[126,7],"end":[126,28],"bytes":[2684,2705]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent"},"127:5":{"kind":"call","span":{"start":[127,5],"end":[127,42],"bytes":[2734,2771]},"callee":null},"131:4":{"kind":"call","span":{"start":[131,4],"end":[131,27],"bytes":[2835,2858]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.flushPendingEvents"},"136:4":{"kind":"call","span":{"start":[136,4],"end":[136,60],"bytes":[2929,2985]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory","kind":"method","span":{"start":[394,1],"end":[438,2],"bytes":[8881,9883]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory","parameters":[{"name":"dir","type":"string","span":{"start":[394,1],"end":[394,56],"bytes":[8881,8936]}}],"metrics":{"cyclomatic":12},"body":{"396:19":{"kind":"call","span":{"start":[396,19],"end":[396,34],"bytes":[8975,8990]},"callee":null},"398:8":{"kind":"call","span":{"start":[398,8],"end":[398,26],"bytes":[9016,9034]},"callee":null},"399:5":{"kind":"call","span":{"start":[399,5],"end":[399,65],"bytes":[9041,9101]},"callee":null},"405:7":{"kind":"call","span":{"start":[405,7],"end":[405,20],"bytes":[9162,9175]},"callee":null},"408:12":{"kind":"call","span":{"start":[408,12],"end":[408,44],"bytes":[9207,9239]},"callee":null},"408:31":{"kind":"call","span":{"start":[408,31],"end":[408,43],"bytes":[9226,9238]},"callee":null},"409:4":{"kind":"call","span":{"start":[409,4],"end":[409,36],"bytes":[9243,9275]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase"},"414:9":{"kind":"call","span":{"start":[414,9],"end":[434,4],"bytes":[9301,9775]},"callee":null},"435:20":{"kind":"call","span":{"start":[435,20],"end":[435,38],"bytes":[9795,9813]},"callee":null},"436:3":{"kind":"call","span":{"start":[436,3],"end":[436,63],"bytes":[9818,9878]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory.closure_1","kind":"function","span":{"start":[414,1],"end":[434,4],"bytes":[9293,9775]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory.closure_1","parameters":[{"name":"path","type":"string","span":{"start":[414,1],"end":[414,82],"bytes":[9293,9374]}},{"name":"d","type":"os.DirEntry","span":{"start":[414,1],"end":[414,82],"bytes":[9293,9374]}},{"name":"err","type":"error","span":{"start":[414,1],"end":[414,82],"bytes":[9293,9374]}}],"return_type":"error","error_channel":["error"],"body":{"416:7":{"kind":"call","span":{"start":[416,7],"end":[416,25],"bytes":[9399,9417]},"callee":null},"419:4":{"kind":"call","span":{"start":[419,4],"end":[419,71],"bytes":[9443,9510]},"callee":null},"423:6":{"kind":"call","span":{"start":[423,6],"end":[423,15],"bytes":[9535,9544]},"callee":null},"425:15":{"kind":"call","span":{"start":[425,15],"end":[425,41],"bytes":[9581,9607]},"callee":null},"426:6":{"kind":"call","span":{"start":[426,6],"end":[426,72],"bytes":[9627,9693]},"callee":null},"432:3":{"kind":"call","span":{"start":[432,3],"end":[432,35],"bytes":[9726,9758]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.shouldSkipPath":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.shouldSkipPath","kind":"method","span":{"start":[385,1],"end":[390,2],"bytes":[8497,8708]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.shouldSkipPath","parameters":[{"name":"path","type":"string","span":{"start":[385,1],"end":[385,63],"bytes":[8497,8559]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"386:10":{"kind":"call","span":{"start":[386,10],"end":[386,29],"bytes":[8569,8588]},"callee":null},"387:9":{"kind":"call","span":{"start":[387,9],"end":[387,40],"bytes":[8597,8628]},"callee":null},"388:3":{"kind":"call","span":{"start":[388,3],"end":[388,34],"bytes":[8634,8665]},"callee":null},"389:3":{"kind":"call","span":{"start":[389,3],"end":[389,38],"bytes":[8671,8706]},"callee":null}}}},"fields":{"cancel":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/cancel","kind":"field","type":"context.CancelFunc","span":{"start":[31,1],"end":[31,28],"bytes":[577,604]}},"config":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/config","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[24,1],"end":[24,21],"bytes":[451,471]}},"ctx":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/ctx","kind":"field","type":"context.Context","span":{"start":[30,1],"end":[30,25],"bytes":[552,576]}},"dbs":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/dbs","kind":"field","type":"map[string]*github.com/benbjohnson/litestream.DB","span":{"start":[36,1],"end":[36,39],"bytes":[652,690]}},"debounceActive":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/debounceActive","kind":"field","type":"bool","span":{"start":[41,1],"end":[41,21],"bytes":[831,851]}},"dirPath":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/dirPath","kind":"field","type":"string","span":{"start":[25,1],"end":[25,18],"bytes":[472,489]}},"logger":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[33,1],"end":[33,21],"bytes":[606,626]}},"mu":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/mu","kind":"field","type":"sync.Mutex","span":{"start":[35,1],"end":[35,24],"bytes":[628,651]}},"pattern":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/pattern","kind":"field","type":"string","span":{"start":[26,1],"end":[26,18],"bytes":[490,507]}},"pendingEvents":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/pendingEvents","kind":"field","type":"map[string]github.com/fsnotify/fsnotify.Op","span":{"start":[40,1],"end":[40,39],"bytes":[792,830]}},"recursive":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/recursive","kind":"field","type":"bool","span":{"start":[27,1],"end":[27,16],"bytes":[508,523]}},"store":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/store","kind":"field","type":"*github.com/benbjohnson/litestream.Store","span":{"start":[23,1],"end":[23,29],"bytes":[422,450]}},"watchedDirs":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/watchedDirs","kind":"field","type":"map[string]struct{}","span":{"start":[37,1],"end":[37,33],"bytes":[691,723]}},"watcher":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/watcher","kind":"field","type":"*github.com/fsnotify/fsnotify.Watcher","span":{"start":[29,1],"end":[29,27],"bytes":[525,551]}},"wg":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/wg","kind":"field","type":"sync.WaitGroup","span":{"start":[43,1],"end":[43,19],"bytes":[853,871]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor":{"id":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","kind":"function","span":{"start":[47,1],"end":[101,2],"bytes":[953,2162]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[47,1],"end":[47,142],"bytes":[953,1094]}},{"name":"store","type":"*github.com/benbjohnson/litestream.Store","span":{"start":[47,1],"end":[47,142],"bytes":[953,1094]}},{"name":"dbc","type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[47,1],"end":[47,142],"bytes":[953,1094]}},{"name":"existing","type":"[]*github.com/benbjohnson/litestream.DB","span":{"start":[47,1],"end":[47,142],"bytes":[953,1094]}}],"return_type":"(*github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"49:15":{"kind":"call","span":{"start":[49,15],"end":[49,53],"bytes":[1126,1164]},"callee":null},"52:15":{"kind":"call","span":{"start":[52,15],"end":[52,43],"bytes":[1201,1229]},"callee":null},"55:18":{"kind":"call","span":{"start":[55,18],"end":[55,33],"bytes":[1251,1266]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"60:15":{"kind":"call","span":{"start":[60,15],"end":[60,31],"bytes":[1320,1336]},"callee":null},"64:18":{"kind":"call","span":{"start":[64,18],"end":[64,39],"bytes":[1390,1411]},"callee":null},"69:24":{"kind":"call","span":{"start":[69,24],"end":[69,47],"bytes":[1474,1497]},"callee":null},"79:18":{"kind":"call","span":{"start":[79,18],"end":[79,43],"bytes":[1755,1780]},"callee":null},"80:18":{"kind":"call","span":{"start":[80,18],"end":[80,49],"bytes":[1799,1830]},"callee":null},"81:18":{"kind":"call","span":{"start":[81,18],"end":[81,43],"bytes":[1849,1874]},"callee":null},"82:18":{"kind":"call","span":{"start":[82,18],"end":[82,46],"bytes":[1893,1921]},"callee":null},"86:10":{"kind":"call","span":{"start":[86,10],"end":[86,19],"bytes":[1967,1976]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"89:12":{"kind":"call","span":{"start":[89,12],"end":[89,34],"bytes":[1998,2020]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches"},"90:3":{"kind":"call","span":{"start":[90,3],"end":[90,18],"bytes":[2037,2052]},"callee":null},"91:3":{"kind":"call","span":{"start":[91,3],"end":[91,11],"bytes":[2055,2063]},"callee":null},"95:2":{"kind":"call","span":{"start":[95,2],"end":[95,30],"bytes":[2087,2115]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory"},"97:2":{"kind":"call","span":{"start":[97,2],"end":[97,14],"bytes":[2118,2130]},"callee":null},"98:5":{"kind":"call","span":{"start":[98,5],"end":[98,13],"bytes":[2135,2143]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run","is_goroutine":true}}}},"content_hash":"4ce58f90eab9eeb776b3513c62283d921b77d2c3b830358b012af2d7e7ac2f36"},"cmd/litestream/info.go":{"id":"can://go/litestream/cmd/litestream/info.go","kind":"module","span":{"start":[1,1],"end":[113,1],"bytes":[0,2888]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// InfoCommand represents the command to show daemon information.\ntype InfoCommand struct{}\n\n// Run executes the info command.\nfunc (c *InfoCommand) Run(_ context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-info\", flag.ContinueOnError)\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\ttimeout := fs.Int(\"timeout\", 10, \"timeout in seconds\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() \u003e 0 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tif *timeout \u003c= 0 {\n\t\treturn fmt.Errorf(\"timeout must be greater than 0\")\n\t}\n\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\tresp, err := client.Get(\"http://localhost/info\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"info failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"info failed: %s\", string(body))\n\t}\n\n\tvar result litestream.InfoResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(result, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t} else {\n\t\tuptime := time.Duration(result.UptimeSeconds) * time.Second\n\t\tfmt.Printf(\"Litestream %s\\n\", result.Version)\n\t\tfmt.Printf(\" PID: %d\\n\", result.PID)\n\t\tfmt.Printf(\" Uptime: %s\\n\", uptime)\n\t\tfmt.Printf(\" Started at: %s\\n\", result.StartedAt.Format(time.RFC3339))\n\t\tfmt.Printf(\" Databases: %d\\n\", result.DatabaseCount)\n\t}\n\n\treturn nil\n}\n\n// Usage prints the help text for the info command.\nfunc (c *InfoCommand) Usage() {\n\tfmt.Println(`\nusage: litestream info [OPTIONS]\n\nShow daemon information from a running Litestream instance.\n\nOptions:\n -json\n Output raw JSON instead of human-readable text.\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -timeout SECONDS\n Maximum time to wait in seconds (default: 10).\n\nExamples:\n $ litestream info\n $ litestream info -json\n $ litestream info -socket /tmp/litestream.sock\n`[1:])\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[34,50]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[51,58]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[59,65]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[66,71]}},{"name":"net","path":"net","span":{"start":[9,1],"end":[9,7],"bytes":[72,78]}},{"name":"http","path":"net/http","span":{"start":[10,1],"end":[10,12],"bytes":[79,90]}},{"name":"time","path":"time","span":{"start":[11,1],"end":[11,8],"bytes":[91,98]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[13,1],"end":[13,37],"bytes":[100,136]}}],"types":{"InfoCommand":{"id":"can://go/litestream/cmd/litestream/info.go/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand","kind":"struct","span":{"start":[17,1],"end":[17,26],"bytes":[206,231]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run":{"id":"can://go/litestream/cmd/litestream/info.go/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run","kind":"method","span":{"start":[20,1],"end":[88,2],"bytes":[267,2351]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run","parameters":[{"name":"_","type":"context.Context","span":{"start":[20,1],"end":[20,68],"bytes":[267,334]}},{"name":"args","type":"[]string","span":{"start":[20,1],"end":[20,68],"bytes":[267,334]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"21:8":{"kind":"call","span":{"start":[21,8],"end":[21,64],"bytes":[342,398]},"callee":null},"22:16":{"kind":"call","span":{"start":[22,16],"end":[22,86],"bytes":[414,484]},"callee":null},"23:13":{"kind":"call","span":{"start":[23,13],"end":[23,56],"bytes":[497,540]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,57],"bytes":[556,597]},"callee":null},"26:12":{"kind":"call","span":{"start":[26,12],"end":[26,26],"bytes":[629,643]},"callee":null},"30:5":{"kind":"call","span":{"start":[30,5],"end":[30,14],"bytes":[679,688]},"callee":null},"31:10":{"kind":"call","span":{"start":[31,10],"end":[31,42],"bytes":[704,736]},"callee":null},"35:10":{"kind":"call","span":{"start":[35,10],"end":[35,54],"bytes":[770,814]},"callee":null},"38:19":{"kind":"call","span":{"start":[38,19],"end":[38,42],"bytes":[837,860]},"callee":null},"48:15":{"kind":"call","span":{"start":[48,15],"end":[48,50],"bytes":[1121,1156]},"callee":null},"50:10":{"kind":"call","span":{"start":[50,10],"end":[50,68],"bytes":[1183,1241]},"callee":null},"52:8":{"kind":"call","span":{"start":[52,8],"end":[52,25],"bytes":[1252,1269]},"callee":null},"54:15":{"kind":"call","span":{"start":[54,15],"end":[54,36],"bytes":[1285,1306]},"callee":null},"56:10":{"kind":"call","span":{"start":[56,10],"end":[56,56],"bytes":[1333,1379]},"callee":null},"61:13":{"kind":"call","span":{"start":[61,13],"end":[61,43],"bytes":[1474,1504]},"callee":null},"62:11":{"kind":"call","span":{"start":[62,11],"end":[62,55],"bytes":[1552,1596]},"callee":null},"64:10":{"kind":"call","span":{"start":[64,10],"end":[64,53],"bytes":[1610,1653]},"callee":null},"64:40":{"kind":"call","span":{"start":[64,40],"end":[64,52],"bytes":[1640,1652]},"callee":null},"68:12":{"kind":"call","span":{"start":[68,12],"end":[68,41],"bytes":[1705,1734]},"callee":null},"69:10":{"kind":"call","span":{"start":[69,10],"end":[69,57],"bytes":[1758,1805]},"callee":null},"73:18":{"kind":"call","span":{"start":[73,18],"end":[73,54],"bytes":[1845,1881]},"callee":null},"75:11":{"kind":"call","span":{"start":[75,11],"end":[75,59],"bytes":[1910,1958]},"callee":null},"77:15":{"kind":"call","span":{"start":[77,15],"end":[77,29],"bytes":[1977,1991]},"callee":null},"77:3":{"kind":"call","span":{"start":[77,3],"end":[77,30],"bytes":[1965,1992]},"callee":null},"79:13":{"kind":"call","span":{"start":[79,13],"end":[79,48],"bytes":[2015,2050]},"callee":null},"80:3":{"kind":"call","span":{"start":[80,3],"end":[80,48],"bytes":[2067,2112]},"callee":null},"81:3":{"kind":"call","span":{"start":[81,3],"end":[81,47],"bytes":[2115,2159]},"callee":null},"82:3":{"kind":"call","span":{"start":[82,3],"end":[82,43],"bytes":[2162,2202]},"callee":null},"83:3":{"kind":"call","span":{"start":[83,3],"end":[83,74],"bytes":[2205,2276]},"callee":null},"83:36":{"kind":"call","span":{"start":[83,36],"end":[83,73],"bytes":[2238,2275]},"callee":null},"84:3":{"kind":"call","span":{"start":[84,3],"end":[84,57],"bytes":[2279,2333]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/info.go/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run.closure_1","kind":"function","span":{"start":[42,1],"end":[44,6],"bytes":[956,1097]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[42,1],"end":[42,73],"bytes":[956,1028]}},{"name":"_","type":"string","span":{"start":[42,1],"end":[42,73],"bytes":[956,1028]}},{"name":"_","type":"string","span":{"start":[42,1],"end":[42,73],"bytes":[956,1028]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"43:12":{"kind":"call","span":{"start":[43,12],"end":[43,63],"bytes":[1040,1091]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Usage":{"id":"can://go/litestream/cmd/litestream/info.go/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Usage","kind":"method","span":{"start":[91,1],"end":[112,2],"bytes":[2405,2887]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"92:2":{"kind":"call","span":{"start":[92,2],"end":[111,7],"bytes":[2438,2885]},"callee":null}}}}}},"functions":{},"content_hash":"c67f1ed730a0f301fb7642ebc95fca5357a437b59373b2e2eaf4b0acd322a2d7"},"cmd/litestream/list.go":{"id":"can://go/litestream/cmd/litestream/list.go","kind":"module","span":{"start":[1,1],"end":[118,1],"bytes":[0,2872]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// ListCommand represents the command to list all managed databases.\ntype ListCommand struct{}\n\n// Run executes the list command.\nfunc (c *ListCommand) Run(_ context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-list\", flag.ContinueOnError)\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\ttimeout := fs.Int(\"timeout\", 10, \"timeout in seconds\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() \u003e 0 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tif *timeout \u003c= 0 {\n\t\treturn fmt.Errorf(\"timeout must be greater than 0\")\n\t}\n\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\tresp, err := client.Get(\"http://localhost/list\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"list failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"list failed: %s\", string(body))\n\t}\n\n\tvar result litestream.ListResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(result, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t} else {\n\t\tif len(result.Databases) == 0 {\n\t\t\tfmt.Println(\"No databases configured\")\n\t\t} else {\n\t\t\tfor _, db := range result.Databases {\n\t\t\t\tsyncInfo := \"never\"\n\t\t\t\tif db.LastSyncAt != nil {\n\t\t\t\t\tsyncInfo = db.LastSyncAt.Format(time.RFC3339)\n\t\t\t\t}\n\t\t\t\tfmt.Printf(\"%s [%s] (last sync: %s)\\n\", db.Path, db.Status, syncInfo)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Usage prints the help text for the list command.\nfunc (c *ListCommand) Usage() {\n\tfmt.Println(`\nusage: litestream list [OPTIONS]\n\nList all managed databases from a running daemon.\n\nOptions:\n -json\n Output raw JSON instead of human-readable text.\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -timeout SECONDS\n Maximum time to wait in seconds (default: 10).\n\nExamples:\n $ litestream list\n $ litestream list -json\n $ litestream list -socket /tmp/litestream.sock\n`[1:])\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[34,50]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[51,58]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[59,65]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[66,71]}},{"name":"net","path":"net","span":{"start":[9,1],"end":[9,7],"bytes":[72,78]}},{"name":"http","path":"net/http","span":{"start":[10,1],"end":[10,12],"bytes":[79,90]}},{"name":"time","path":"time","span":{"start":[11,1],"end":[11,8],"bytes":[91,98]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[13,1],"end":[13,37],"bytes":[100,136]}}],"types":{"ListCommand":{"id":"can://go/litestream/cmd/litestream/list.go/github.com/benbjohnson/litestream/cmd/litestream.ListCommand","kind":"struct","span":{"start":[17,1],"end":[17,26],"bytes":[209,234]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run":{"id":"can://go/litestream/cmd/litestream/list.go/github.com/benbjohnson/litestream/cmd/litestream.ListCommand/github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run","kind":"method","span":{"start":[20,1],"end":[93,2],"bytes":[270,2345]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run","parameters":[{"name":"_","type":"context.Context","span":{"start":[20,1],"end":[20,68],"bytes":[270,337]}},{"name":"args","type":"[]string","span":{"start":[20,1],"end":[20,68],"bytes":[270,337]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":14},"body":{"21:8":{"kind":"call","span":{"start":[21,8],"end":[21,64],"bytes":[345,401]},"callee":null},"22:16":{"kind":"call","span":{"start":[22,16],"end":[22,86],"bytes":[417,487]},"callee":null},"23:13":{"kind":"call","span":{"start":[23,13],"end":[23,56],"bytes":[500,543]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,57],"bytes":[559,600]},"callee":null},"26:12":{"kind":"call","span":{"start":[26,12],"end":[26,26],"bytes":[632,646]},"callee":null},"30:5":{"kind":"call","span":{"start":[30,5],"end":[30,14],"bytes":[682,691]},"callee":null},"31:10":{"kind":"call","span":{"start":[31,10],"end":[31,42],"bytes":[707,739]},"callee":null},"35:10":{"kind":"call","span":{"start":[35,10],"end":[35,54],"bytes":[773,817]},"callee":null},"38:19":{"kind":"call","span":{"start":[38,19],"end":[38,42],"bytes":[840,863]},"callee":null},"48:15":{"kind":"call","span":{"start":[48,15],"end":[48,50],"bytes":[1124,1159]},"callee":null},"50:10":{"kind":"call","span":{"start":[50,10],"end":[50,68],"bytes":[1186,1244]},"callee":null},"52:8":{"kind":"call","span":{"start":[52,8],"end":[52,25],"bytes":[1255,1272]},"callee":null},"54:15":{"kind":"call","span":{"start":[54,15],"end":[54,36],"bytes":[1288,1309]},"callee":null},"56:10":{"kind":"call","span":{"start":[56,10],"end":[56,56],"bytes":[1336,1382]},"callee":null},"61:13":{"kind":"call","span":{"start":[61,13],"end":[61,43],"bytes":[1477,1507]},"callee":null},"62:11":{"kind":"call","span":{"start":[62,11],"end":[62,55],"bytes":[1555,1599]},"callee":null},"64:10":{"kind":"call","span":{"start":[64,10],"end":[64,53],"bytes":[1613,1656]},"callee":null},"64:40":{"kind":"call","span":{"start":[64,40],"end":[64,52],"bytes":[1643,1655]},"callee":null},"68:12":{"kind":"call","span":{"start":[68,12],"end":[68,41],"bytes":[1708,1737]},"callee":null},"69:10":{"kind":"call","span":{"start":[69,10],"end":[69,57],"bytes":[1761,1808]},"callee":null},"73:18":{"kind":"call","span":{"start":[73,18],"end":[73,54],"bytes":[1848,1884]},"callee":null},"75:11":{"kind":"call","span":{"start":[75,11],"end":[75,59],"bytes":[1913,1961]},"callee":null},"77:15":{"kind":"call","span":{"start":[77,15],"end":[77,29],"bytes":[1980,1994]},"callee":null},"77:3":{"kind":"call","span":{"start":[77,3],"end":[77,30],"bytes":[1968,1995]},"callee":null},"79:6":{"kind":"call","span":{"start":[79,6],"end":[79,27],"bytes":[2011,2032]},"callee":null},"80:4":{"kind":"call","span":{"start":[80,4],"end":[80,42],"bytes":[2043,2081]},"callee":null},"85:17":{"kind":"call","span":{"start":[85,17],"end":[85,51],"bytes":[2204,2238]},"callee":null},"87:5":{"kind":"call","span":{"start":[87,5],"end":[87,74],"bytes":[2249,2318]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/list.go/github.com/benbjohnson/litestream/cmd/litestream.ListCommand/github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run.closure_1","kind":"function","span":{"start":[42,1],"end":[44,6],"bytes":[959,1100]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[42,1],"end":[42,73],"bytes":[959,1031]}},{"name":"_","type":"string","span":{"start":[42,1],"end":[42,73],"bytes":[959,1031]}},{"name":"_","type":"string","span":{"start":[42,1],"end":[42,73],"bytes":[959,1031]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"43:12":{"kind":"call","span":{"start":[43,12],"end":[43,63],"bytes":[1043,1094]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Usage":{"id":"can://go/litestream/cmd/litestream/list.go/github.com/benbjohnson/litestream/cmd/litestream.ListCommand/github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Usage","kind":"method","span":{"start":[96,1],"end":[117,2],"bytes":[2399,2871]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"97:2":{"kind":"call","span":{"start":[97,2],"end":[116,7],"bytes":[2432,2869]},"callee":null}}}}}},"functions":{},"content_hash":"dc9c59c70f84ba2a92cb656c5b6d52a9d74272c89b53fea8d58a1087b60d66ee"},"cmd/litestream/ltx.go":{"id":"can://go/litestream/cmd/litestream/ltx.go","kind":"module","span":{"start":[1,1],"end":[186,1],"bytes":[0,4202]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"text/tabwriter\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\n// LTXCommand represents a command to list LTX files for a database.\ntype LTXCommand struct{}\n\n// Run executes the command.\nfunc (c *LTXCommand) Run(ctx context.Context, args []string) (err error) {\n\tfs := flag.NewFlagSet(\"litestream-ltx\", flag.ContinueOnError)\n\tconfigPath, noExpandEnv := registerConfigFlag(fs)\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tvar level levelVar\n\tfs.Var(\u0026level, \"level\", \"compaction level (0-9 or \\\"all\\\")\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t} else if fs.NArg() == 0 || fs.Arg(0) == \"\" {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path or replica URL required\",\n\t\t\thint: \"litestream ltx /path/to/db\",\n\t\t}\n\t} else if fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tvar r *litestream.Replica\n\tif litestream.IsURL(fs.Arg(0)) {\n\t\tif *configPath != \"\" {\n\t\t\treturn fmt.Errorf(\"cannot specify a replica URL and the -config flag\")\n\t\t}\n\t\tif r, err = NewReplicaFromConfig(\u0026ReplicaConfig{URL: fs.Arg(0)}, nil); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinternal.InitLog(os.Stdout, \"INFO\", \"text\", false)\n\t} else {\n\t\tif *configPath == \"\" {\n\t\t\t*configPath = DefaultConfigPath()\n\t\t}\n\n\t\t// Load configuration.\n\t\tconfig, err := ReadConfigFile(*configPath, !*noExpandEnv)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Lookup database from configuration file by path.\n\t\tpath, err := expand(fs.Arg(0))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdbc := config.DBConfig(path)\n\t\tif dbc == nil {\n\t\t\treturn fmt.Errorf(\"database not found in config: %s\", path)\n\t\t}\n\n\t\tdb, err := NewDBFromConfig(dbc)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t} else if db.Replica == nil {\n\t\t\treturn fmt.Errorf(\"database has no replica\")\n\t\t}\n\t\tr = db.Replica\n\t}\n\n\t// Determine which levels to iterate.\n\tvar levels []int\n\tif int(level) == levelAll {\n\t\tfor lvl := 0; lvl \u003c= litestream.SnapshotLevel; lvl++ {\n\t\t\tlevels = append(levels, lvl)\n\t\t}\n\t} else {\n\t\tlevels = []int{int(level)}\n\t}\n\n\tfiles := make([]LTXFileInfo, 0)\n\tfor _, lvl := range levels {\n\t\titr, err := r.Client.LTXFiles(ctx, lvl, 0, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor itr.Next() {\n\t\t\tinfo := itr.Item()\n\t\t\tfiles = append(files, LTXFileInfo{\n\t\t\t\tLevel: lvl,\n\t\t\t\tMinTXID: info.MinTXID.String(),\n\t\t\t\tMaxTXID: info.MaxTXID.String(),\n\t\t\t\tSize: info.Size,\n\t\t\t\tTimestamp: info.CreatedAt.Format(time.RFC3339),\n\t\t\t})\n\t\t}\n\t\tif err := itr.Close(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(files, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tw := tabwriter.NewWriter(os.Stdout, 0, 8, 2, ' ', 0)\n\tdefer w.Flush()\n\n\tfmt.Fprintln(w, \"level\\tmin_txid\\tmax_txid\\tsize\\tcreated\")\n\tfor _, file := range files {\n\t\tfmt.Fprintf(w, \"%d\\t%s\\t%s\\t%d\\t%s\\n\",\n\t\t\tfile.Level,\n\t\t\tfile.MinTXID,\n\t\t\tfile.MaxTXID,\n\t\t\tfile.Size,\n\t\t\tfile.Timestamp,\n\t\t)\n\t}\n\treturn nil\n}\n\ntype LTXFileInfo struct {\n\tLevel int `json:\"level\"`\n\tMinTXID string `json:\"min_txid\"`\n\tMaxTXID string `json:\"max_txid\"`\n\tSize int64 `json:\"size\"`\n\tTimestamp string `json:\"timestamp\"`\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *LTXCommand) Usage() {\n\tfmt.Printf(`\nThe ltx command lists all LTX files available for a database.\n\nUsage:\n\n\tlitestream ltx [arguments] DB_PATH\n\n\tlitestream ltx [arguments] REPLICA_URL\n\nArguments:\n\n\t-config PATH\n\t Specifies the configuration file.\n\t Defaults to %s\n\n\t-no-expand-env\n\t Disables environment variable expansion in configuration file.\n\n\t-level LEVEL\n\t Compaction level to list (0-9 or \"all\").\n\t Defaults to 0.\n\n\t-json\n\t Output raw JSON instead of human-readable text.\n\nExamples:\n\n\t# List all LTX files for a database.\n\t$ litestream ltx /path/to/db\n\n\t# List all LTX files for replica URL.\n\t$ litestream ltx s3://mybkt/db\n\n\t# List LTX files at snapshot level (level 9).\n\t$ litestream ltx -level 9 /path/to/db\n\n\t# List LTX files across all compaction levels.\n\t$ litestream ltx -level all /path/to/db\n\n`[1:],\n\t\tDefaultConfigPath(),\n\t)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[34,50]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[51,58]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[59,65]}},{"name":"os","path":"os","span":{"start":[8,1],"end":[8,6],"bytes":[66,71]}},{"name":"tabwriter","path":"text/tabwriter","span":{"start":[9,1],"end":[9,18],"bytes":[72,89]}},{"name":"time","path":"time","span":{"start":[10,1],"end":[10,8],"bytes":[90,97]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[12,1],"end":[12,37],"bytes":[99,135]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[13,1],"end":[13,46],"bytes":[136,181]}}],"types":{"LTXCommand":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand","kind":"struct","span":{"start":[17,1],"end":[17,25],"bytes":[254,278]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","kind":"method","span":{"start":[20,1],"end":[131,2],"bytes":[309,3083]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[20,1],"end":[20,75],"bytes":[309,383]}},{"name":"args","type":"[]string","span":{"start":[20,1],"end":[20,75],"bytes":[309,383]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":22},"body":{"100:16":{"kind":"call","span":{"start":[100,16],"end":[100,51],"bytes":[2471,2506]},"callee":null},"103:13":{"kind":"call","span":{"start":[103,13],"end":[103,24],"bytes":[2530,2541]},"callee":null},"109:18":{"kind":"call","span":{"start":[109,18],"end":[109,53],"bytes":[2613,2648]},"callee":null},"111:11":{"kind":"call","span":{"start":[111,11],"end":[111,59],"bytes":[2677,2725]},"callee":null},"113:15":{"kind":"call","span":{"start":[113,15],"end":[113,29],"bytes":[2744,2758]},"callee":null},"113:3":{"kind":"call","span":{"start":[113,3],"end":[113,30],"bytes":[2732,2759]},"callee":null},"117:7":{"kind":"call","span":{"start":[117,7],"end":[117,54],"bytes":[2783,2830]},"callee":null},"118:8":{"kind":"call","span":{"start":[118,8],"end":[118,17],"bytes":[2838,2847]},"callee":null},"120:2":{"kind":"call","span":{"start":[120,2],"end":[120,61],"bytes":[2850,2909]},"callee":null},"122:3":{"kind":"call","span":{"start":[122,3],"end":[128,4],"bytes":[2942,3066]},"callee":null},"21:8":{"kind":"call","span":{"start":[21,8],"end":[21,63],"bytes":[391,446]},"callee":null},"22:29":{"kind":"call","span":{"start":[22,29],"end":[22,51],"bytes":[475,497]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag"},"23:16":{"kind":"call","span":{"start":[23,16],"end":[23,57],"bytes":[513,554]},"callee":null},"25:2":{"kind":"call","span":{"start":[25,2],"end":[25,62],"bytes":[576,636]},"callee":null},"27:12":{"kind":"call","span":{"start":[27,12],"end":[27,26],"bytes":[668,682]},"callee":null},"29:12":{"kind":"call","span":{"start":[29,12],"end":[29,21],"bytes":[721,730]},"callee":null},"29:30":{"kind":"call","span":{"start":[29,30],"end":[29,39],"bytes":[739,748]},"callee":null},"34:12":{"kind":"call","span":{"start":[34,12],"end":[34,21],"bytes":[889,898]},"callee":null},"35:10":{"kind":"call","span":{"start":[35,10],"end":[35,42],"bytes":[914,946]},"callee":null},"39:22":{"kind":"call","span":{"start":[39,22],"end":[39,31],"bytes":[999,1008]},"callee":null},"39:5":{"kind":"call","span":{"start":[39,5],"end":[39,32],"bytes":[982,1009]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL"},"41:11":{"kind":"call","span":{"start":[41,11],"end":[41,74],"bytes":[1047,1110]},"callee":null},"43:15":{"kind":"call","span":{"start":[43,15],"end":[43,72],"bytes":[1129,1186]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig"},"43:56":{"kind":"call","span":{"start":[43,56],"end":[43,65],"bytes":[1170,1179]},"callee":null},"46:3":{"kind":"call","span":{"start":[46,3],"end":[46,53],"bytes":[1221,1271]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"},"49:18":{"kind":"call","span":{"start":[49,18],"end":[49,37],"bytes":[1324,1343]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"},"53:18":{"kind":"call","span":{"start":[53,18],"end":[53,60],"bytes":[1391,1433]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"59:16":{"kind":"call","span":{"start":[59,16],"end":[59,33],"bytes":[1540,1557]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"59:23":{"kind":"call","span":{"start":[59,23],"end":[59,32],"bytes":[1547,1556]},"callee":null},"63:10":{"kind":"call","span":{"start":[63,10],"end":[63,31],"bytes":[1603,1624]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig"},"65:11":{"kind":"call","span":{"start":[65,11],"end":[65,63],"bytes":[1653,1705]},"callee":null},"68:14":{"kind":"call","span":{"start":[68,14],"end":[68,34],"bytes":[1724,1744]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"72:11":{"kind":"call","span":{"start":[72,11],"end":[72,48],"bytes":[1819,1856]},"callee":null},"79:5":{"kind":"call","span":{"start":[79,5],"end":[79,15],"bytes":[1943,1953]},"callee":null},"81:13":{"kind":"call","span":{"start":[81,13],"end":[81,32],"bytes":[2037,2056]},"callee":null},"84:18":{"kind":"call","span":{"start":[84,18],"end":[84,28],"bytes":[2088,2098]},"callee":null},"87:11":{"kind":"call","span":{"start":[87,11],"end":[87,33],"bytes":[2114,2136]},"callee":null},"89:15":{"kind":"call","span":{"start":[89,15],"end":[89,52],"bytes":[2181,2218]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"93:7":{"kind":"call","span":{"start":[93,7],"end":[93,17],"bytes":[2261,2271]},"callee":null},"94:12":{"kind":"call","span":{"start":[94,12],"end":[94,22],"bytes":[2285,2295]},"callee":null},"95:12":{"kind":"call","span":{"start":[95,12],"end":[101,6],"bytes":[2307,2513]},"callee":null},"97:16":{"kind":"call","span":{"start":[97,16],"end":[97,37],"bytes":[2369,2390]},"callee":null},"98:16":{"kind":"call","span":{"start":[98,16],"end":[98,37],"bytes":[2407,2428]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Usage":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Usage","kind":"method","span":{"start":[142,1],"end":[185,2],"bytes":[3331,4201]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"143:2":{"kind":"call","span":{"start":[143,2],"end":[184,3],"bytes":[3363,4199]},"callee":null},"183:3":{"kind":"call","span":{"start":[183,3],"end":[183,22],"bytes":[4176,4195]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"}}}}},"LTXFileInfo":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXFileInfo","kind":"struct","span":{"start":[133,1],"end":[139,2],"bytes":[3085,3286]},"callables":{},"fields":{"Level":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXFileInfo/Level","kind":"field","type":"int","span":{"start":[134,1],"end":[134,33],"bytes":[3111,3143]}},"MaxTXID":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXFileInfo/MaxTXID","kind":"field","type":"string","span":{"start":[136,1],"end":[136,36],"bytes":[3180,3215]}},"MinTXID":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXFileInfo/MinTXID","kind":"field","type":"string","span":{"start":[135,1],"end":[135,36],"bytes":[3144,3179]}},"Size":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXFileInfo/Size","kind":"field","type":"int64","span":{"start":[137,1],"end":[137,32],"bytes":[3216,3247]}},"Timestamp":{"id":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXFileInfo/Timestamp","kind":"field","type":"string","span":{"start":[138,1],"end":[138,37],"bytes":[3248,3284]}}}}},"functions":{},"content_hash":"c867d7c1e1585c6d60a877522f63f540250d718c555f7798562841631be556b5"},"cmd/litestream/main.go":{"id":"can://go/litestream/cmd/litestream/main.go","kind":"module","span":{"start":[1,1],"end":[2209,1],"bytes":[0,65049]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"math\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/user\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"runtime/debug\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/dustin/go-humanize\"\n\t\"github.com/superfly/ltx\"\n\t_ \"golang.org/x/crypto/x509roots/fallback\"\n\t\"gopkg.in/yaml.v2\"\n\t_ \"modernc.org/sqlite\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/abs\"\n\t\"github.com/benbjohnson/litestream/file\"\n\t\"github.com/benbjohnson/litestream/gs\"\n\t\"github.com/benbjohnson/litestream/internal\"\n\t\"github.com/benbjohnson/litestream/nats\"\n\t\"github.com/benbjohnson/litestream/oss\"\n\t\"github.com/benbjohnson/litestream/s3\"\n\t\"github.com/benbjohnson/litestream/sftp\"\n\t\"github.com/benbjohnson/litestream/webdav\"\n)\n\n// Version is set via -ldflags \"-X main.Version=...\" on release and Makefile\n// builds; otherwise it is resolved from embedded VCS build info at startup.\nvar Version = defaultVersion\n\nfunc init() {\n\tbi, _ := debug.ReadBuildInfo()\n\tVersion = resolveVersion(Version, bi)\n}\n\n// errStop is a terminal error for indicating program should quit.\nvar errStop = errors.New(\"stop\")\n\n// Sentinel errors for configuration validation\nvar (\n\tErrInvalidSnapshotInterval = errors.New(\"snapshot interval must be greater than 0\")\n\tErrInvalidSnapshotRetention = errors.New(\"snapshot retention must be greater than 0\")\n\tErrInvalidCompactionInterval = errors.New(\"compaction interval must be greater than 0\")\n\tErrInvalidSyncInterval = errors.New(\"sync interval must be greater than 0\")\n\tErrInvalidL0Retention = errors.New(\"l0 retention must not be negative\")\n\tErrInvalidL0RetentionCheckInterval = errors.New(\"l0 retention check interval must be greater than 0\")\n\tErrInvalidShutdownSyncTimeout = errors.New(\"shutdown-sync-timeout must be \u003e= 0\")\n\tErrInvalidShutdownSyncInterval = errors.New(\"shutdown sync interval must be greater than 0\")\n\tErrInvalidHeartbeatURL = errors.New(\"heartbeat URL must be a valid HTTP or HTTPS URL\")\n\tErrInvalidHeartbeatInterval = errors.New(\"heartbeat interval must be at least 1 minute\")\n\tErrConfigFileNotFound = errors.New(\"config file not found\")\n)\n\n// ConfigValidationError wraps a validation error with additional context\ntype ConfigValidationError struct {\n\tErr error\n\tField string\n\tValue interface{}\n}\n\nfunc (e *ConfigValidationError) Error() string {\n\tif e.Value != nil {\n\t\treturn fmt.Sprintf(\"%s: %v (got %v)\", e.Field, e.Err, e.Value)\n\t}\n\treturn fmt.Sprintf(\"%s: %v\", e.Field, e.Err)\n}\n\nfunc (e *ConfigValidationError) Unwrap() error {\n\treturn e.Err\n}\n\nfunc main() {\n\tinternal.InitLog(os.Stdout, \"INFO\", \"text\", false)\n\n\tm := NewMain()\n\tif err := m.Run(context.Background(), os.Args[1:]); errors.Is(err, errStop) {\n\t\tos.Exit(1)\n\t} else if errors.Is(err, flag.ErrHelp) {\n\t\tfor _, arg := range os.Args[1:] {\n\t\t\tif arg == \"-h\" || arg == \"-help\" || arg == \"--help\" {\n\t\t\t\tos.Exit(0)\n\t\t\t}\n\t\t}\n\t\tos.Exit(1)\n\t} else if err != nil {\n\t\t_, _ = fmt.Fprintf(os.Stderr, \"Error: %s\\n\", err)\n\t\tvar usageErr *usageError\n\t\tif errors.As(err, \u0026usageErr) \u0026\u0026 usageErr.hint != \"\" {\n\t\t\t_, _ = fmt.Fprintf(os.Stderr, \"Try: %s\\n\", usageErr.hint)\n\t\t}\n\t\tos.Exit(1)\n\t}\n}\n\ntype usageError struct {\n\tmessage string\n\thint string\n}\n\nfunc (e *usageError) Error() string {\n\treturn e.message\n}\n\n// Main represents the main program execution.\ntype Main struct{}\n\n// NewMain returns a new instance of Main.\nfunc NewMain() *Main {\n\treturn \u0026Main{}\n}\n\n// Run executes the program.\nfunc (m *Main) Run(ctx context.Context, args []string) (err error) {\n\t// Execute replication command if running as a Windows service.\n\tif isService, err := isWindowsService(); err != nil {\n\t\treturn err\n\t} else if isService {\n\t\treturn runWindowsService(ctx)\n\t}\n\n\t// Copy \"LITESTEAM\" environment credentials.\n\tapplyLitestreamEnv()\n\n\t// Extract command name.\n\tvar cmd string\n\tif len(args) \u003e 0 {\n\t\tcmd, args = args[0], args[1:]\n\t}\n\n\tswitch cmd {\n\tcase \"databases\":\n\t\treturn (\u0026DatabasesCommand{}).Run(ctx, args)\n\tcase \"replicate\":\n\t\tc := NewReplicateCommand()\n\t\tif err := c.ParseFlags(ctx, args); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Setup signal handler.\n\t\tsignalCh := signalChan()\n\n\t\t// Create done channel for interrupt during shutdown. It will be\n\t\t// closed when a second signal arrives, allowing each database's\n\t\t// retry loop to observe the interrupt.\n\t\tdone := make(chan struct{})\n\t\tc.SetDone(done)\n\n\t\tif err := c.Run(ctx); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Wait for signal to stop program.\n\t\tselect {\n\t\tcase err = \u003c-c.execCh:\n\t\t\tif c.cmd != nil {\n\t\t\t\tslog.Info(\"subprocess exited, litestream shutting down\")\n\t\t\t} else {\n\t\t\t\tslog.Info(\"replication complete, litestream shutting down\")\n\t\t\t}\n\t\tcase sig := \u003c-signalCh:\n\t\t\tslog.Info(\"signal received, litestream shutting down\", \"signal\", sig)\n\n\t\t\tif c.cmd != nil {\n\t\t\t\tslog.Info(\"sending signal to exec process\")\n\t\t\t\tif err := c.cmd.Process.Signal(sig); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot signal exec process: %w\", err)\n\t\t\t\t}\n\n\t\t\t\tslog.Info(\"waiting for exec process to close\")\n\t\t\t\tif err := \u003c-c.execCh; err != nil \u0026\u0026 !strings.HasPrefix(err.Error(), \"signal:\") {\n\t\t\t\t\treturn fmt.Errorf(\"cannot wait for exec process: %w\", err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Listen for a second signal to close done and interrupt retry loops.\n\t\t\tgo func() {\n\t\t\t\t\u003c-signalCh\n\t\t\t\tclose(done)\n\t\t\t}()\n\t\t}\n\n\t\t// Gracefully close.\n\t\tif e := c.Close(ctx); e != nil \u0026\u0026 err == nil {\n\t\t\terr = e\n\t\t}\n\t\tslog.Info(\"litestream shut down\")\n\t\treturn err\n\n\tcase \"start\":\n\t\treturn (\u0026StartCommand{}).Run(ctx, args)\n\tcase \"stop\":\n\t\treturn (\u0026StopCommand{}).Run(ctx, args)\n\tcase \"register\":\n\t\treturn (\u0026RegisterCommand{}).Run(ctx, args)\n\tcase \"unregister\":\n\t\treturn (\u0026UnregisterCommand{}).Run(ctx, args)\n\tcase \"reset\":\n\t\treturn (\u0026ResetCommand{}).Run(ctx, args)\n\tcase \"restore\":\n\t\treturn (\u0026RestoreCommand{}).Run(ctx, args)\n\tcase \"status\":\n\t\treturn (\u0026StatusCommand{}).Run(ctx, args)\n\tcase \"sync\":\n\t\treturn (\u0026SyncCommand{}).Run(ctx, args)\n\tcase \"list\":\n\t\treturn (\u0026ListCommand{}).Run(ctx, args)\n\tcase \"info\":\n\t\treturn (\u0026InfoCommand{}).Run(ctx, args)\n\tcase \"version\":\n\t\treturn (\u0026VersionCommand{}).Run(ctx, args)\n\tcase \"ltx\":\n\t\treturn (\u0026LTXCommand{}).Run(ctx, args)\n\tcase \"wal\":\n\t\t// Deprecated: Keep for backward compatibility\n\t\tfmt.Fprintln(os.Stderr, \"Warning: 'wal' command is deprecated, please use 'ltx' instead\")\n\t\treturn (\u0026LTXCommand{}).Run(ctx, args)\n\tdefault:\n\t\tif cmd == \"help\" || cmd == \"-h\" || cmd == \"-help\" || cmd == \"--help\" {\n\t\t\tm.Usage()\n\t\t\treturn nil\n\t\t} else if cmd == \"\" || strings.HasPrefix(cmd, \"-\") {\n\t\t\tm.Usage()\n\t\t\treturn flag.ErrHelp\n\t\t}\n\t\treturn fmt.Errorf(\"litestream %s: unknown command\", cmd)\n\t}\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (m *Main) Usage() {\n\tfmt.Println(`\nlitestream is a tool for replicating SQLite databases.\n\nUsage:\n\n\tlitestream \u003ccommand\u003e [arguments]\n\nThe commands are:\n\n\tdatabases list databases specified in config file\n\tinfo show daemon information\n\tlist list all managed databases\n\tltx list available LTX files for a database\n\tregister register a database for replication\n\treplicate runs a server to replicate databases\n\treset reset local state for a database\n\trestore recovers database backup from a replica\n\tstart start replication for a database\n\tstatus display replication status for databases\n\tstop stop replication for a database\n\tsync force an immediate sync for a database\n\tunregister unregister a database from replication\n\tversion prints the binary version\n`[1:])\n}\n\n// Config represents a configuration file for the litestream daemon.\ntype Config struct {\n\t// Global replica settings that serve as defaults for all replicas\n\tReplicaSettings `yaml:\",inline\"`\n\n\t// Bind address for serving metrics.\n\tAddr string `yaml:\"addr\"`\n\n\t// Socket configuration for control commands.\n\tSocket litestream.SocketConfig `yaml:\"socket\"`\n\n\t// List of stages in a multi-level compaction.\n\t// Only includes L1 through the last non-snapshot level.\n\tLevels []*CompactionLevelConfig `yaml:\"levels\"`\n\n\t// Snapshot configuration\n\tSnapshot SnapshotConfig `yaml:\"snapshot\"`\n\n\t// Validation configuration\n\tValidation ValidationConfig `yaml:\"validation\"`\n\n\t// L0 retention settings\n\tL0Retention *time.Duration `yaml:\"l0-retention\"`\n\tL0RetentionCheckInterval *time.Duration `yaml:\"l0-retention-check-interval\"`\n\n\t// Verify TXID consistency at destination level after each compaction.\n\t// When enabled, logs warnings if gaps or overlaps are detected.\n\tVerifyCompaction bool `yaml:\"verify-compaction\"`\n\n\t// Retention configuration\n\tRetention RetentionConfig `yaml:\"retention\"`\n\n\t// Heartbeat settings (global defaults)\n\tHeartbeatURL string `yaml:\"heartbeat-url\"`\n\tHeartbeatInterval *time.Duration `yaml:\"heartbeat-interval\"`\n\n\t// List of databases to manage.\n\tDBs []*DBConfig `yaml:\"dbs\"`\n\n\t// Subcommand to execute during replication.\n\t// Litestream will shutdown when subcommand exits.\n\tExec string `yaml:\"exec\"`\n\n\t// Logging\n\tLogging internal.LoggingConfig `yaml:\"logging\"`\n\n\t// MCP server options\n\tMCPAddr string `yaml:\"mcp-addr\"`\n\n\t// Shutdown sync retry settings\n\tShutdownSyncTimeout *time.Duration `yaml:\"shutdown-sync-timeout\"`\n\tShutdownSyncInterval *time.Duration `yaml:\"shutdown-sync-interval\"`\n\n\t// Path to the config file\n\t// This is only used internally to pass the config path to the MCP tool\n\tConfigPath string `yaml:\"-\"`\n}\n\n// SnapshotConfig configures snapshots.\ntype SnapshotConfig struct {\n\tInterval *time.Duration `yaml:\"interval\"`\n\tRetention *time.Duration `yaml:\"retention\"`\n}\n\n// RetentionConfig configures retention enforcement behavior.\ntype RetentionConfig struct {\n\tEnabled *bool `yaml:\"enabled\"`\n}\n\n// ValidationConfig configures periodic validation checks.\ntype ValidationConfig struct {\n\tInterval *time.Duration `yaml:\"interval\"`\n}\n\n// propagateGlobalSettings copies global replica settings to individual replica configs.\nfunc (c *Config) propagateGlobalSettings() {\n\tfor _, dbc := range c.DBs {\n\t\t// Handle both old-style 'replicas' and new-style 'replica'\n\t\tif dbc.Replica != nil {\n\t\t\tdbc.Replica.SetDefaults(\u0026c.ReplicaSettings)\n\t\t}\n\t\tfor _, rc := range dbc.Replicas {\n\t\t\trc.SetDefaults(\u0026c.ReplicaSettings)\n\t\t}\n\t}\n}\n\nfunc (c *Config) applyDBSnapshotConfig(globalIntervalSet, globalRetentionSet bool) error {\n\tvar interval *time.Duration\n\tvar intervalDB string\n\tvar retention *time.Duration\n\tvar retentionDB string\n\n\tfor _, db := range c.DBs {\n\t\tdbID := db.Path\n\t\tif dbID == \"\" {\n\t\t\tdbID = db.Dir\n\t\t}\n\t\tif db.Snapshot.Interval != nil {\n\t\t\tif interval != nil \u0026\u0026 *interval != *db.Snapshot.Interval {\n\t\t\t\treturn fmt.Errorf(\"conflicting database snapshot intervals: %s has %v, %s has %v\", intervalDB, *interval, dbID, *db.Snapshot.Interval)\n\t\t\t}\n\t\t\tinterval = db.Snapshot.Interval\n\t\t\tintervalDB = dbID\n\t\t}\n\t\tif db.Snapshot.Retention != nil {\n\t\t\tif retention != nil \u0026\u0026 *retention != *db.Snapshot.Retention {\n\t\t\t\treturn fmt.Errorf(\"conflicting database snapshot retentions: %s has %v, %s has %v\", retentionDB, *retention, dbID, *db.Snapshot.Retention)\n\t\t\t}\n\t\t\tretention = db.Snapshot.Retention\n\t\t\tretentionDB = dbID\n\t\t}\n\t}\n\n\tif !globalIntervalSet \u0026\u0026 interval != nil {\n\t\tc.Snapshot.Interval = interval\n\t}\n\tif !globalRetentionSet \u0026\u0026 retention != nil {\n\t\tc.Snapshot.Retention = retention\n\t}\n\treturn nil\n}\n\n// DefaultConfig returns a new instance of Config with defaults set.\nfunc DefaultConfig() Config {\n\tdefaultSnapshotInterval := 24 * time.Hour\n\tdefaultSnapshotRetention := 24 * time.Hour\n\tdefaultL0Retention := litestream.DefaultL0Retention\n\tdefaultL0RetentionCheckInterval := litestream.DefaultL0RetentionCheckInterval\n\tdefaultShutdownSyncTimeout := litestream.DefaultShutdownSyncTimeout\n\tdefaultShutdownSyncInterval := litestream.DefaultShutdownSyncInterval\n\treturn Config{\n\t\tLevels: []*CompactionLevelConfig{\n\t\t\t{Interval: litestream.DefaultCompactionLevels[1].Interval},\n\t\t\t{Interval: litestream.DefaultCompactionLevels[2].Interval},\n\t\t\t{Interval: litestream.DefaultCompactionLevels[3].Interval},\n\t\t},\n\t\tSnapshot: SnapshotConfig{\n\t\t\tInterval: \u0026defaultSnapshotInterval,\n\t\t\tRetention: \u0026defaultSnapshotRetention,\n\t\t},\n\t\tSocket: litestream.DefaultSocketConfig(),\n\t\tL0Retention: \u0026defaultL0Retention,\n\t\tL0RetentionCheckInterval: \u0026defaultL0RetentionCheckInterval,\n\t\tShutdownSyncTimeout: \u0026defaultShutdownSyncTimeout,\n\t\tShutdownSyncInterval: \u0026defaultShutdownSyncInterval,\n\t}\n}\n\n// Validate returns an error if config contains invalid settings.\nfunc (c *Config) Validate() error {\n\t// Validate snapshot intervals\n\tif c.Snapshot.Interval != nil \u0026\u0026 *c.Snapshot.Interval \u003c= 0 {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidSnapshotInterval,\n\t\t\tField: \"snapshot.interval\",\n\t\t\tValue: *c.Snapshot.Interval,\n\t\t}\n\t}\n\tif c.Snapshot.Retention != nil \u0026\u0026 *c.Snapshot.Retention \u003c= 0 {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidSnapshotRetention,\n\t\t\tField: \"snapshot.retention\",\n\t\t\tValue: *c.Snapshot.Retention,\n\t\t}\n\t}\n\tif c.L0Retention != nil \u0026\u0026 *c.L0Retention \u003c 0 {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidL0Retention,\n\t\t\tField: \"l0-retention\",\n\t\t\tValue: *c.L0Retention,\n\t\t}\n\t}\n\tif c.L0RetentionCheckInterval != nil \u0026\u0026 *c.L0RetentionCheckInterval \u003c= 0 {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidL0RetentionCheckInterval,\n\t\t\tField: \"l0-retention-check-interval\",\n\t\t\tValue: *c.L0RetentionCheckInterval,\n\t\t}\n\t}\n\tif c.ShutdownSyncTimeout != nil \u0026\u0026 *c.ShutdownSyncTimeout \u003c 0 {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidShutdownSyncTimeout,\n\t\t\tField: \"shutdown-sync-timeout\",\n\t\t\tValue: *c.ShutdownSyncTimeout,\n\t\t}\n\t}\n\tif c.ShutdownSyncInterval != nil \u0026\u0026 *c.ShutdownSyncInterval \u003c= 0 {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidShutdownSyncInterval,\n\t\t\tField: \"shutdown-sync-interval\",\n\t\t\tValue: *c.ShutdownSyncInterval,\n\t\t}\n\t}\n\n\t// Validate global heartbeat settings\n\tif c.HeartbeatURL != \"\" \u0026\u0026 !isValidHeartbeatURL(c.HeartbeatURL) {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidHeartbeatURL,\n\t\t\tField: \"heartbeat-url\",\n\t\t\tValue: c.HeartbeatURL,\n\t\t}\n\t}\n\tif c.HeartbeatInterval != nil \u0026\u0026 *c.HeartbeatInterval \u003c litestream.MinHeartbeatInterval {\n\t\treturn \u0026ConfigValidationError{\n\t\t\tErr: ErrInvalidHeartbeatInterval,\n\t\t\tField: \"heartbeat-interval\",\n\t\t\tValue: *c.HeartbeatInterval,\n\t\t}\n\t}\n\n\t// Validate compaction level intervals\n\tfor i, level := range c.Levels {\n\t\tif level.Interval \u003c= 0 {\n\t\t\treturn \u0026ConfigValidationError{\n\t\t\t\tErr: ErrInvalidCompactionInterval,\n\t\t\t\tField: fmt.Sprintf(\"levels[%d].interval\", i),\n\t\t\t\tValue: level.Interval,\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate database configs\n\tseenPaths := make(map[string]int) // cleaned path -\u003e 1-based config index\n\tfor idx, db := range c.DBs {\n\t\t// Validate that either path or dir is specified, but not both\n\t\tif db.Path != \"\" \u0026\u0026 db.Dir != \"\" {\n\t\t\treturn fmt.Errorf(\"database config #%d: cannot specify both 'path' and 'dir'\", idx+1)\n\t\t}\n\t\tif db.Path == \"\" \u0026\u0026 db.Dir == \"\" {\n\t\t\treturn fmt.Errorf(\"database config #%d: must specify either 'path' or 'dir'\", idx+1)\n\t\t}\n\n\t\t// Reject the same database path listed twice. The metadata directory is\n\t\t// derived from the path, so two entries would share it and race on the\n\t\t// same LTX temp files.\n\t\tif db.Path != \"\" {\n\t\t\tkey := filepath.Clean(db.Path)\n\t\t\tif first, ok := seenPaths[key]; ok {\n\t\t\t\treturn fmt.Errorf(\"database config #%d: duplicate path %q (already used by database config #%d); each database can be listed only once\", idx+1, db.Path, first)\n\t\t\t}\n\t\t\tseenPaths[key] = idx + 1\n\t\t}\n\n\t\t// When using dir, pattern must be specified\n\t\tif db.Dir != \"\" \u0026\u0026 db.Pattern == \"\" {\n\t\t\treturn fmt.Errorf(\"database config #%d: 'pattern' is required when using 'dir'\", idx+1)\n\t\t}\n\t\tif db.Watch \u0026\u0026 db.Dir == \"\" {\n\t\t\treturn fmt.Errorf(\"database config #%d: 'watch' can only be enabled with a directory\", idx+1)\n\t\t}\n\t\tif db.MetaDir != nil \u0026\u0026 db.Dir == \"\" {\n\t\t\treturn fmt.Errorf(\"database config #%d: 'meta-dir' can only be used with a directory\", idx+1)\n\t\t}\n\t\tif db.MetaPath != nil \u0026\u0026 db.MetaDir != nil {\n\t\t\treturn fmt.Errorf(\"database config #%d: cannot specify both 'meta-path' and 'meta-dir'\", idx+1)\n\t\t}\n\n\t\t// Use path or dir for identifying the config in error messages\n\t\tdbIdentifier := db.Path\n\t\tif dbIdentifier == \"\" {\n\t\t\tdbIdentifier = db.Dir\n\t\t}\n\n\t\tif db.Snapshot.Interval != nil \u0026\u0026 *db.Snapshot.Interval \u003c= 0 {\n\t\t\treturn \u0026ConfigValidationError{\n\t\t\t\tErr: ErrInvalidSnapshotInterval,\n\t\t\t\tField: fmt.Sprintf(\"dbs[%s].snapshot.interval\", dbIdentifier),\n\t\t\t\tValue: *db.Snapshot.Interval,\n\t\t\t}\n\t\t}\n\t\tif db.Snapshot.Retention != nil \u0026\u0026 *db.Snapshot.Retention \u003c= 0 {\n\t\t\treturn \u0026ConfigValidationError{\n\t\t\t\tErr: ErrInvalidSnapshotRetention,\n\t\t\t\tField: fmt.Sprintf(\"dbs[%s].snapshot.retention\", dbIdentifier),\n\t\t\t\tValue: *db.Snapshot.Retention,\n\t\t\t}\n\t\t}\n\n\t\t// Validate sync intervals for replicas\n\t\tif db.Replica != nil \u0026\u0026 db.Replica.SyncInterval != nil \u0026\u0026 *db.Replica.SyncInterval \u003c= 0 {\n\t\t\treturn \u0026ConfigValidationError{\n\t\t\t\tErr: ErrInvalidSyncInterval,\n\t\t\t\tField: fmt.Sprintf(\"dbs[%s].replica.sync-interval\", dbIdentifier),\n\t\t\t\tValue: *db.Replica.SyncInterval,\n\t\t\t}\n\t\t}\n\t\tfor i, replica := range db.Replicas {\n\t\t\tif replica.SyncInterval != nil \u0026\u0026 *replica.SyncInterval \u003c= 0 {\n\t\t\t\treturn \u0026ConfigValidationError{\n\t\t\t\t\tErr: ErrInvalidSyncInterval,\n\t\t\t\t\tField: fmt.Sprintf(\"dbs[%s].replicas[%d].sync-interval\", dbIdentifier, i),\n\t\t\t\t\tValue: *replica.SyncInterval,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CompactionLevels returns a full list of compaction levels include L0.\nfunc (c *Config) CompactionLevels() litestream.CompactionLevels {\n\tlevels := litestream.CompactionLevels{\n\t\t{Level: 0},\n\t}\n\n\tfor i, lvl := range c.Levels {\n\t\tlevels = append(levels, \u0026litestream.CompactionLevel{\n\t\t\tLevel: i + 1,\n\t\t\tInterval: lvl.Interval,\n\t\t})\n\t}\n\n\treturn levels\n}\n\n// DBConfig returns database configuration by path.\nfunc (c *Config) DBConfig(configPath string) *DBConfig {\n\tfor _, dbConfig := range c.DBs {\n\t\tif dbConfig.Path == configPath {\n\t\t\treturn dbConfig\n\t\t}\n\t}\n\treturn nil\n}\n\n// OpenConfigFile opens a configuration file and returns a reader.\n// Expands the filename path if needed.\nfunc OpenConfigFile(filename string) (io.ReadCloser, error) {\n\t// Expand filename, if necessary.\n\tfilename, err := expand(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Open configuration file.\n\tf, err := os.Open(filename)\n\tif os.IsNotExist(err) {\n\t\treturn nil, fmt.Errorf(\"%w: %s\", ErrConfigFileNotFound, filename)\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn f, nil\n}\n\n// ReadConfigFile unmarshals config from filename. Expands path if needed.\n// If expandEnv is true then environment variables are expanded in the config.\nfunc ReadConfigFile(filename string, expandEnv bool) (Config, error) {\n\tf, err := OpenConfigFile(filename)\n\tif err != nil {\n\t\treturn DefaultConfig(), err\n\t}\n\tdefer f.Close()\n\n\treturn ParseConfig(f, expandEnv)\n}\n\n// ParseConfig unmarshals config from a reader.\n// If expandEnv is true then environment variables are expanded in the config.\nfunc ParseConfig(r io.Reader, expandEnv bool) (_ Config, err error) {\n\tconfig := DefaultConfig()\n\n\t// Read configuration.\n\tbuf, err := io.ReadAll(r)\n\tif err != nil {\n\t\treturn config, err\n\t}\n\n\t// Expand environment variables, if enabled.\n\tif expandEnv {\n\t\tbuf = []byte(os.Expand(string(buf), func(key string) string {\n\t\t\tif key == \"PID\" {\n\t\t\t\treturn strconv.Itoa(os.Getpid())\n\t\t\t}\n\t\t\treturn os.Getenv(key)\n\t\t}))\n\t}\n\n\tvar raw struct {\n\t\tSnapshot *SnapshotConfig `yaml:\"snapshot\"`\n\t}\n\tif err := yaml.Unmarshal(buf, \u0026raw); err != nil {\n\t\treturn config, err\n\t}\n\tglobalSnapshotIntervalSet := raw.Snapshot != nil \u0026\u0026 raw.Snapshot.Interval != nil\n\tglobalSnapshotRetentionSet := raw.Snapshot != nil \u0026\u0026 raw.Snapshot.Retention != nil\n\n\t// Save defaults before unmarshaling\n\tdefaultSnapshotInterval := config.Snapshot.Interval\n\tdefaultSnapshotRetention := config.Snapshot.Retention\n\tdefaultL0Retention := config.L0Retention\n\tdefaultL0RetentionCheckInterval := config.L0RetentionCheckInterval\n\n\tif err := yaml.Unmarshal(buf, \u0026config); err != nil {\n\t\treturn config, err\n\t}\n\n\t// Restore defaults if they were overwritten with nil by empty YAML sections\n\tif config.Snapshot.Interval == nil {\n\t\tconfig.Snapshot.Interval = defaultSnapshotInterval\n\t}\n\tif config.Snapshot.Retention == nil {\n\t\tconfig.Snapshot.Retention = defaultSnapshotRetention\n\t}\n\tif config.L0Retention == nil {\n\t\tconfig.L0Retention = defaultL0Retention\n\t}\n\tif config.L0RetentionCheckInterval == nil {\n\t\tconfig.L0RetentionCheckInterval = defaultL0RetentionCheckInterval\n\t}\n\tif err := config.applyDBSnapshotConfig(globalSnapshotIntervalSet, globalSnapshotRetentionSet); err != nil {\n\t\treturn config, err\n\t}\n\n\t// Normalize paths.\n\tfor _, dbConfig := range config.DBs {\n\t\tif dbConfig.Path == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif dbConfig.Path, err = expand(dbConfig.Path); err != nil {\n\t\t\treturn config, err\n\t\t}\n\t}\n\n\t// Propagate settings from global config to individual configs.\n\tconfig.propagateGlobalSettings()\n\n\t// Validate configuration\n\tif err := config.Validate(); err != nil {\n\t\treturn config, err\n\t}\n\n\t// Configure logging.\n\tlogOutput := os.Stdout\n\tif config.Logging.Stderr {\n\t\tlogOutput = os.Stderr\n\t}\n\tif v := os.Getenv(\"LOG_LEVEL\"); v != \"\" {\n\t\tconfig.Logging.Level = v\n\t}\n\tinternal.InitLog(logOutput, config.Logging.Level, config.Logging.Type, config.Logging.Source)\n\n\treturn config, nil\n}\n\n// CompactionLevelConfig the configuration for a single level of compaction.\ntype CompactionLevelConfig struct {\n\tInterval time.Duration `yaml:\"interval\"`\n}\n\n// DBConfig represents the configuration for a single database or directory of databases.\ntype DBConfig struct {\n\tPath string `yaml:\"path\"`\n\tDir string `yaml:\"dir\"` // Directory to scan for databases\n\tPattern string `yaml:\"pattern\"` // File pattern to match (e.g., \"*.db\", \"*.sqlite\")\n\tRecursive bool `yaml:\"recursive\"` // Scan subdirectories recursively\n\tWatch bool `yaml:\"watch\"` // Enable directory monitoring for changes\n\tSnapshot SnapshotConfig `yaml:\"snapshot\"`\n\tMetaPath *string `yaml:\"meta-path\"`\n\tMetaDir *string `yaml:\"meta-dir\"`\n\tMonitorInterval *time.Duration `yaml:\"monitor-interval\"`\n\tCheckpointInterval *time.Duration `yaml:\"checkpoint-interval\"`\n\tBusyTimeout *time.Duration `yaml:\"busy-timeout\"`\n\tMinCheckpointPageN *int `yaml:\"min-checkpoint-page-count\"`\n\tTruncatePageN *int `yaml:\"truncate-page-n\"`\n\tMaxSyncWALBytes *int64 `yaml:\"max-sync-wal-bytes\"`\n\n\tRestoreIfDBNotExists bool `yaml:\"restore-if-db-not-exists\"`\n\n\tReplica *ReplicaConfig `yaml:\"replica\"`\n\tReplicas []*ReplicaConfig `yaml:\"replicas\"` // Deprecated\n}\n\n// NewDBFromConfig instantiates a DB based on a configuration.\nfunc NewDBFromConfig(dbc *DBConfig) (*litestream.DB, error) {\n\tif dbc.MetaDir != nil {\n\t\treturn nil, fmt.Errorf(\"'meta-dir' can only be used with a directory\")\n\t}\n\n\tconfigPath, err := expand(dbc.Path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Initialize database with given path.\n\tdb := litestream.NewDB(configPath)\n\n\t// Override default database settings if specified in configuration.\n\tif dbc.MetaPath != nil {\n\t\texpandedMetaPath, err := expand(*dbc.MetaPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to expand meta path: %w\", err)\n\t\t}\n\t\tdbc.MetaPath = \u0026expandedMetaPath\n\t\tdb.SetMetaPath(expandedMetaPath)\n\t}\n\tif dbc.MonitorInterval != nil {\n\t\tdb.MonitorInterval = *dbc.MonitorInterval\n\t}\n\tif dbc.CheckpointInterval != nil {\n\t\tdb.CheckpointInterval = *dbc.CheckpointInterval\n\t}\n\tif dbc.BusyTimeout != nil {\n\t\tdb.BusyTimeout = *dbc.BusyTimeout\n\t}\n\tif dbc.MinCheckpointPageN != nil {\n\t\tdb.MinCheckpointPageN = *dbc.MinCheckpointPageN\n\t}\n\tif dbc.TruncatePageN != nil {\n\t\tdb.TruncatePageN = *dbc.TruncatePageN\n\t}\n\tif dbc.MaxSyncWALBytes != nil {\n\t\tdb.MaxSyncWALBytes = *dbc.MaxSyncWALBytes\n\t}\n\n\t// Instantiate and attach replica.\n\t// v0.3.x and before supported multiple replicas but that was dropped to\n\t// ensure there's a single remote data authority.\n\tswitch {\n\tcase dbc.Replica == nil \u0026\u0026 len(dbc.Replicas) == 0:\n\t\treturn nil, fmt.Errorf(\"must specify replica for database\")\n\tcase dbc.Replica != nil \u0026\u0026 len(dbc.Replicas) \u003e 0:\n\t\treturn nil, fmt.Errorf(\"cannot specify 'replica' and 'replicas' on a database\")\n\tcase len(dbc.Replicas) \u003e 1:\n\t\treturn nil, fmt.Errorf(\"multiple replicas on a single database are no longer supported\")\n\t}\n\n\tvar rc *ReplicaConfig\n\tif dbc.Replica != nil {\n\t\trc = dbc.Replica\n\t} else {\n\t\trc = dbc.Replicas[0]\n\t}\n\n\tr, err := NewReplicaFromConfig(rc, db)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdb.Replica = r\n\n\treturn db, nil\n}\n\n// NewDBsFromDirectoryConfig scans a directory and creates DB instances for all SQLite databases found.\nfunc NewDBsFromDirectoryConfig(dbc *DBConfig) ([]*litestream.DB, error) {\n\tif dbc.Dir == \"\" {\n\t\treturn nil, fmt.Errorf(\"directory path is required for directory replication\")\n\t}\n\n\tif dbc.Pattern == \"\" {\n\t\treturn nil, fmt.Errorf(\"pattern is required for directory replication\")\n\t}\n\tif dbc.MetaPath != nil \u0026\u0026 dbc.MetaDir != nil {\n\t\treturn nil, fmt.Errorf(\"cannot specify both 'meta-path' and 'meta-dir'\")\n\t}\n\n\tdirPath, err := expand(dbc.Dir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Find all SQLite databases in the directory\n\tdbPaths, err := FindSQLiteDatabases(dirPath, dbc.Pattern, dbc.Recursive)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to scan directory %s: %w\", dirPath, err)\n\t}\n\n\tif len(dbPaths) == 0 \u0026\u0026 !dbc.Watch {\n\t\treturn nil, fmt.Errorf(\"no SQLite databases found in directory %s with pattern %s\", dirPath, dbc.Pattern)\n\t}\n\n\t// Create DB instances for each found database\n\tvar dbs []*litestream.DB\n\tmetaPaths := make(map[string]string)\n\n\tfor _, dbPath := range dbPaths {\n\t\tdb, err := newDBFromDirectoryEntry(dbc, dirPath, dbPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to create DB for %s: %w\", dbPath, err)\n\t\t}\n\n\t\t// Validate unique meta-path to prevent replication state corruption\n\t\tif mp := db.MetaPath(); mp != \"\" {\n\t\t\tif existingDB, exists := metaPaths[mp]; exists {\n\t\t\t\treturn nil, fmt.Errorf(\"meta-path collision: databases %s and %s would share meta-path %s, causing replication state corruption\", existingDB, dbPath, mp)\n\t\t\t}\n\t\t\tmetaPaths[mp] = dbPath\n\t\t}\n\n\t\tdbs = append(dbs, db)\n\t}\n\n\treturn dbs, nil\n}\n\n// newDBFromDirectoryEntry creates a DB instance for a database discovered via directory replication.\nfunc newDBFromDirectoryEntry(dbc *DBConfig, dirPath, dbPath string) (*litestream.DB, error) {\n\t// Calculate relative path from directory root\n\trelPath, err := filepath.Rel(dirPath, dbPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to calculate relative path for %s: %w\", dbPath, err)\n\t}\n\n\t// Create a copy of the config for the discovered database\n\tdbConfigCopy := *dbc\n\tdbConfigCopy.Path = dbPath\n\tdbConfigCopy.Dir = \"\" // Clear dir field for individual DB\n\tdbConfigCopy.Pattern = \"\" // Clear pattern field\n\tdbConfigCopy.Recursive = false // Clear recursive flag\n\tdbConfigCopy.Watch = false // Individual DBs do not watch directories\n\n\t// Ensure every database discovered beneath a directory receives a unique\n\t// metadata path. Without this, all databases share the same meta-path and\n\t// clobber each other's replication state.\n\tswitch {\n\tcase dbc.MetaDir != nil:\n\t\tbaseMetaDir, err := expand(*dbc.MetaDir)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to expand meta dir for %s: %w\", dbPath, err)\n\t\t}\n\t\tmetaPathCopy := filepath.Join(baseMetaDir, relPath+litestream.MetaDirSuffix)\n\t\tdbConfigCopy.MetaPath = \u0026metaPathCopy\n\t\tdbConfigCopy.MetaDir = nil\n\tcase dbc.MetaPath != nil:\n\t\tbaseMetaPath, err := expand(*dbc.MetaPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to expand meta path for %s: %w\", dbPath, err)\n\t\t}\n\t\tmetaPathCopy := deriveMetaPathForDirectoryEntry(baseMetaPath, relPath)\n\t\tdbConfigCopy.MetaPath = \u0026metaPathCopy\n\t\tdbConfigCopy.MetaDir = nil\n\t}\n\n\t// Deep copy replica config and make path unique per database.\n\t// This prevents all databases from writing to the same replica path.\n\tif dbc.Replica != nil {\n\t\treplicaCopy, err := cloneReplicaConfigWithRelativePath(dbc.Replica, relPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to configure replica for %s: %w\", dbPath, err)\n\t\t}\n\t\tdbConfigCopy.Replica = replicaCopy\n\t}\n\n\t// Also handle deprecated 'replicas' array field.\n\tif len(dbc.Replicas) \u003e 0 {\n\t\tdbConfigCopy.Replicas = make([]*ReplicaConfig, len(dbc.Replicas))\n\t\tfor i, replica := range dbc.Replicas {\n\t\t\treplicaCopy, err := cloneReplicaConfigWithRelativePath(replica, relPath)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to configure replica %d for %s: %w\", i, dbPath, err)\n\t\t\t}\n\t\t\tdbConfigCopy.Replicas[i] = replicaCopy\n\t\t}\n\t}\n\n\treturn NewDBFromConfig(\u0026dbConfigCopy)\n}\n\n// cloneReplicaConfigWithRelativePath returns a copy of the replica configuration with the\n// database-relative path appended to either the replica path or URL, depending on how the\n// replica was configured.\nfunc cloneReplicaConfigWithRelativePath(base *ReplicaConfig, relPath string) (*ReplicaConfig, error) {\n\tif base == nil {\n\t\treturn nil, nil\n\t}\n\n\treplicaCopy := *base\n\trelPath = filepath.ToSlash(relPath)\n\tif relPath == \"\" || relPath == \".\" {\n\t\treturn \u0026replicaCopy, nil\n\t}\n\n\tif replicaCopy.URL != \"\" {\n\t\tu, err := url.Parse(replicaCopy.URL)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parse replica url: %w\", err)\n\t\t}\n\t\tappendRelativePathToURL(u, relPath)\n\t\treplicaCopy.URL = u.String()\n\t\treturn \u0026replicaCopy, nil\n\t}\n\n\tswitch base.ReplicaType() {\n\tcase \"file\":\n\t\trelOSPath := filepath.FromSlash(relPath)\n\t\tif replicaCopy.Path != \"\" {\n\t\t\treplicaCopy.Path = filepath.Join(replicaCopy.Path, relOSPath)\n\t\t} else {\n\t\t\treplicaCopy.Path = relOSPath\n\t\t}\n\tdefault:\n\t\t// Normalize to forward slashes for cloud/object storage backends.\n\t\tbasePath := filepath.ToSlash(replicaCopy.Path)\n\t\tif basePath != \"\" {\n\t\t\treplicaCopy.Path = path.Join(basePath, relPath)\n\t\t} else {\n\t\t\treplicaCopy.Path = relPath\n\t\t}\n\t}\n\n\treturn \u0026replicaCopy, nil\n}\n\n// deriveMetaPathForDirectoryEntry returns a unique metadata directory for a\n// database discovered through directory replication by appending the database's\n// relative path and the standard Litestream suffix to the configured base path.\nfunc deriveMetaPathForDirectoryEntry(basePath, relPath string) string {\n\trelPath = filepath.Clean(relPath)\n\tif relPath == \".\" || relPath == \"\" {\n\t\treturn basePath\n\t}\n\n\trelDir, relFile := filepath.Split(relPath)\n\tif relFile == \"\" || relFile == \".\" {\n\t\treturn filepath.Join(basePath, relPath)\n\t}\n\n\tmetaDirName := \".\" + relFile + litestream.MetaDirSuffix\n\treturn filepath.Join(basePath, relDir, metaDirName)\n}\n\n// appendRelativePathToURL appends relPath to the URL's path component, ensuring\n// the result remains rooted and uses forward slashes.\nfunc appendRelativePathToURL(u *url.URL, relPath string) {\n\tcleanRel := strings.TrimPrefix(relPath, \"/\")\n\tif cleanRel == \"\" || cleanRel == \".\" {\n\t\treturn\n\t}\n\n\tbasePath := u.Path\n\tvar joined string\n\tif basePath == \"\" {\n\t\tjoined = cleanRel\n\t} else {\n\t\tjoined = path.Join(basePath, cleanRel)\n\t}\n\n\tjoined = \"/\" + strings.TrimPrefix(joined, \"/\")\n\tu.Path = joined\n}\n\n// FindSQLiteDatabases recursively finds all SQLite database files in a directory.\n// Exported for testing.\nfunc FindSQLiteDatabases(dir string, pattern string, recursive bool) ([]string, error) {\n\tvar dbPaths []string\n\n\terr := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Skip directories unless recursive\n\t\tif info.IsDir() {\n\t\t\tif !recursive \u0026\u0026 path != dir {\n\t\t\t\treturn filepath.SkipDir\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\t// Check if file matches pattern\n\t\tmatched, err := filepath.Match(pattern, filepath.Base(path))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !matched {\n\t\t\treturn nil\n\t\t}\n\n\t\t// Check if it's a SQLite database\n\t\tif IsSQLiteDatabase(path) {\n\t\t\tdbPaths = append(dbPaths, path)\n\t\t}\n\n\t\treturn nil\n\t})\n\n\treturn dbPaths, err\n}\n\n// IsSQLiteDatabase checks if a file is a SQLite database by reading its header.\n// Exported for testing.\nfunc IsSQLiteDatabase(path string) bool {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn false\n\t}\n\tdefer file.Close()\n\n\t// SQLite files start with \"SQLite format 3\\x00\"\n\theader := make([]byte, 16)\n\tif _, err := file.Read(header); err != nil {\n\t\treturn false\n\t}\n\n\treturn string(header) == \"SQLite format 3\\x00\"\n}\n\n// ByteSize is a custom type for parsing byte sizes from YAML.\n// It supports both SI units (KB, MB, GB using base 1000) and IEC units\n// (KiB, MiB, GiB using base 1024) as well as short forms (K, M, G).\ntype ByteSize int64\n\n// UnmarshalYAML implements yaml.Unmarshaler for ByteSize.\nfunc (b *ByteSize) UnmarshalYAML(unmarshal func(interface{}) error) error {\n\tvar s string\n\tif err := unmarshal(\u0026s); err != nil {\n\t\treturn err\n\t}\n\n\tsize, err := ParseByteSize(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*b = ByteSize(size)\n\treturn nil\n}\n\n// ParseByteSize parses a byte size string using github.com/dustin/go-humanize.\n// Supports both SI units (KB=1000, MB=1000², etc.) and IEC units (KiB=1024, MiB=1024², etc.).\n// Examples: \"1MB\", \"5MiB\", \"1.5GB\", \"100B\", \"1024KB\"\nfunc ParseByteSize(s string) (int64, error) {\n\ts = strings.TrimSpace(s)\n\tif s == \"\" {\n\t\treturn 0, fmt.Errorf(\"empty size string\")\n\t}\n\n\t// Use go-humanize to parse the byte size string\n\tbytes, err := humanize.ParseBytes(s)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"invalid size format: %w\", err)\n\t}\n\n\t// Check that the value fits in int64\n\tif bytes \u003e math.MaxInt64 {\n\t\treturn 0, fmt.Errorf(\"size %d exceeds maximum allowed value (%d)\", bytes, int64(math.MaxInt64))\n\t}\n\n\treturn int64(bytes), nil\n}\n\n// ReplicaSettings contains settings shared across replica configurations.\n// These can be set globally in Config or per-replica in ReplicaConfig.\ntype ReplicaSettings struct {\n\tSyncInterval *time.Duration `yaml:\"sync-interval\"`\n\tValidationInterval *time.Duration `yaml:\"validation-interval\"`\n\n\t// Maximum L0 files to upload in a single monitor sync run.\n\t// Set to zero to process all pending L0 files in one run.\n\tMaxSyncLTXFiles *int `yaml:\"max-sync-ltx-files\"`\n\n\t// If true, automatically reset local state when LTX errors are detected.\n\t// This allows recovery from corrupted/missing LTX files by forcing a fresh sync.\n\t// Disabled by default to prevent silent data loss scenarios.\n\tAutoRecover *bool `yaml:\"auto-recover\"`\n\n\t// S3 settings\n\tAccessKeyID string `yaml:\"access-key-id\"`\n\tSecretAccessKey string `yaml:\"secret-access-key\"`\n\tRegion string `yaml:\"region\"`\n\tBucket string `yaml:\"bucket\"`\n\tEndpoint string `yaml:\"endpoint\"`\n\tForcePathStyle *bool `yaml:\"force-path-style\"`\n\tSignPayload *bool `yaml:\"sign-payload\"`\n\tSignAcceptEncoding *bool `yaml:\"sign-accept-encoding\"`\n\tRequireContentMD5 *bool `yaml:\"require-content-md5\"`\n\tSkipVerify bool `yaml:\"skip-verify\"`\n\tStorageClass string `yaml:\"storage-class\"`\n\tPartSize *ByteSize `yaml:\"part-size\"`\n\tConcurrency *int `yaml:\"concurrency\"`\n\n\t// S3 Server-Side Encryption (SSE-C: Customer-provided keys)\n\tSSECustomerAlgorithm string `yaml:\"sse-customer-algorithm\"`\n\tSSECustomerKey string `yaml:\"sse-customer-key\"`\n\tSSECustomerKeyPath string `yaml:\"sse-customer-key-path\"`\n\n\t// S3 Server-Side Encryption (SSE-KMS: AWS Key Management Service)\n\tSSEKMSKeyID string `yaml:\"sse-kms-key-id\"`\n\n\t// ABS settings\n\tAccountName string `yaml:\"account-name\"`\n\tAccountKey string `yaml:\"account-key\"`\n\tSASToken string `yaml:\"sas-token\"`\n\n\t// SFTP settings\n\tHost string `yaml:\"host\"`\n\tUser string `yaml:\"user\"`\n\tPassword string `yaml:\"password\"`\n\tKeyPath string `yaml:\"key-path\"`\n\tConcurrentWrites *bool `yaml:\"concurrent-writes\"`\n\tHostKey string `yaml:\"host-key\"`\n\n\t// WebDAV settings\n\tWebDAVURL string `yaml:\"webdav-url\"`\n\tWebDAVUsername string `yaml:\"webdav-username\"`\n\tWebDAVPassword string `yaml:\"webdav-password\"`\n\n\t// NATS settings\n\tJWT string `yaml:\"jwt\"`\n\tSeed string `yaml:\"seed\"`\n\tCreds string `yaml:\"creds\"`\n\tNKey string `yaml:\"nkey\"`\n\tUsername string `yaml:\"username\"`\n\tToken string `yaml:\"token\"`\n\tTLS *bool `yaml:\"tls\"`\n\tRootCAs []string `yaml:\"root-cas\"`\n\tClientCert string `yaml:\"client-cert\"`\n\tClientKey string `yaml:\"client-key\"`\n\tMaxReconnects *int `yaml:\"max-reconnects\"`\n\tReconnectWait *time.Duration `yaml:\"reconnect-wait\"`\n\tTimeout *time.Duration `yaml:\"timeout\"`\n\n\t// Encryption identities and recipients\n\tAge struct {\n\t\tIdentities []string `yaml:\"identities\"`\n\t\tRecipients []string `yaml:\"recipients\"`\n\t} `yaml:\"age\"`\n}\n\n// SetDefaults merges default settings from src into the current ReplicaSettings.\n// Individual settings override defaults when already set.\nfunc (rs *ReplicaSettings) SetDefaults(src *ReplicaSettings) {\n\tif src == nil {\n\t\treturn\n\t}\n\n\t// Timing settings\n\tif rs.SyncInterval == nil \u0026\u0026 src.SyncInterval != nil {\n\t\trs.SyncInterval = src.SyncInterval\n\t}\n\tif rs.ValidationInterval == nil \u0026\u0026 src.ValidationInterval != nil {\n\t\trs.ValidationInterval = src.ValidationInterval\n\t}\n\tif rs.MaxSyncLTXFiles == nil \u0026\u0026 src.MaxSyncLTXFiles != nil {\n\t\trs.MaxSyncLTXFiles = src.MaxSyncLTXFiles\n\t}\n\n\t// Recovery settings\n\tif rs.AutoRecover == nil \u0026\u0026 src.AutoRecover != nil {\n\t\trs.AutoRecover = src.AutoRecover\n\t}\n\n\t// S3 settings\n\tif rs.AccessKeyID == \"\" {\n\t\trs.AccessKeyID = src.AccessKeyID\n\t}\n\tif rs.SecretAccessKey == \"\" {\n\t\trs.SecretAccessKey = src.SecretAccessKey\n\t}\n\tif rs.Region == \"\" {\n\t\trs.Region = src.Region\n\t}\n\tif rs.Bucket == \"\" {\n\t\trs.Bucket = src.Bucket\n\t}\n\tif rs.Endpoint == \"\" {\n\t\trs.Endpoint = src.Endpoint\n\t}\n\tif rs.ForcePathStyle == nil {\n\t\trs.ForcePathStyle = src.ForcePathStyle\n\t}\n\tif rs.SignPayload == nil {\n\t\trs.SignPayload = src.SignPayload\n\t}\n\tif rs.SignAcceptEncoding == nil {\n\t\trs.SignAcceptEncoding = src.SignAcceptEncoding\n\t}\n\tif rs.RequireContentMD5 == nil {\n\t\trs.RequireContentMD5 = src.RequireContentMD5\n\t}\n\tif src.SkipVerify {\n\t\trs.SkipVerify = true\n\t}\n\tif rs.StorageClass == \"\" {\n\t\trs.StorageClass = src.StorageClass\n\t}\n\n\t// S3 SSE settings\n\tif rs.SSECustomerAlgorithm == \"\" {\n\t\trs.SSECustomerAlgorithm = src.SSECustomerAlgorithm\n\t}\n\tif rs.SSECustomerKey == \"\" {\n\t\trs.SSECustomerKey = src.SSECustomerKey\n\t}\n\tif rs.SSECustomerKeyPath == \"\" {\n\t\trs.SSECustomerKeyPath = src.SSECustomerKeyPath\n\t}\n\tif rs.SSEKMSKeyID == \"\" {\n\t\trs.SSEKMSKeyID = src.SSEKMSKeyID\n\t}\n\n\t// ABS settings\n\tif rs.AccountName == \"\" {\n\t\trs.AccountName = src.AccountName\n\t}\n\tif rs.AccountKey == \"\" {\n\t\trs.AccountKey = src.AccountKey\n\t}\n\tif rs.SASToken == \"\" {\n\t\trs.SASToken = src.SASToken\n\t}\n\n\t// SFTP settings\n\tif rs.Host == \"\" {\n\t\trs.Host = src.Host\n\t}\n\tif rs.User == \"\" {\n\t\trs.User = src.User\n\t}\n\tif rs.Password == \"\" {\n\t\trs.Password = src.Password\n\t}\n\tif rs.KeyPath == \"\" {\n\t\trs.KeyPath = src.KeyPath\n\t}\n\tif rs.ConcurrentWrites == nil {\n\t\trs.ConcurrentWrites = src.ConcurrentWrites\n\t}\n\n\t// NATS settings\n\tif rs.JWT == \"\" {\n\t\trs.JWT = src.JWT\n\t}\n\tif rs.Seed == \"\" {\n\t\trs.Seed = src.Seed\n\t}\n\tif rs.Creds == \"\" {\n\t\trs.Creds = src.Creds\n\t}\n\tif rs.NKey == \"\" {\n\t\trs.NKey = src.NKey\n\t}\n\tif rs.Username == \"\" {\n\t\trs.Username = src.Username\n\t}\n\tif rs.Token == \"\" {\n\t\trs.Token = src.Token\n\t}\n\tif rs.TLS == nil {\n\t\trs.TLS = src.TLS\n\t}\n\tif len(rs.RootCAs) == 0 {\n\t\trs.RootCAs = src.RootCAs\n\t}\n\tif rs.ClientCert == \"\" {\n\t\trs.ClientCert = src.ClientCert\n\t}\n\tif rs.ClientKey == \"\" {\n\t\trs.ClientKey = src.ClientKey\n\t}\n\tif rs.MaxReconnects == nil {\n\t\trs.MaxReconnects = src.MaxReconnects\n\t}\n\tif rs.ReconnectWait == nil {\n\t\trs.ReconnectWait = src.ReconnectWait\n\t}\n\tif rs.Timeout == nil {\n\t\trs.Timeout = src.Timeout\n\t}\n\n\t// Age encryption settings\n\tif len(rs.Age.Identities) == 0 {\n\t\trs.Age.Identities = src.Age.Identities\n\t}\n\tif len(rs.Age.Recipients) == 0 {\n\t\trs.Age.Recipients = src.Age.Recipients\n\t}\n}\n\n// ReplicaConfig represents the configuration for a single replica in a database.\ntype ReplicaConfig struct {\n\tReplicaSettings `yaml:\",inline\"`\n\n\tType string `yaml:\"type\"` // \"file\", \"s3\"\n\tName string `yaml:\"name\"` // Deprecated\n\tPath string `yaml:\"path\"`\n\tURL string `yaml:\"url\"`\n}\n\n// NewReplicaFromConfig instantiates a replica for a DB based on a config.\nfunc NewReplicaFromConfig(c *ReplicaConfig, db *litestream.DB) (_ *litestream.Replica, err error) {\n\t// Ensure user did not specify URL in path.\n\tif litestream.IsURL(c.Path) {\n\t\treturn nil, fmt.Errorf(\"replica path cannot be a url, please use the 'url' field instead: %s\", c.Path)\n\t}\n\n\t// Reject age encryption configuration as it's currently non-functional.\n\t// Age encryption support was removed during the LTX storage layer refactor\n\t// and has not been reimplemented. Accepting this config would silently\n\t// write plaintext data to remote storage instead of encrypted data.\n\t// See: https://github.com/benbjohnson/litestream/issues/790\n\tif len(c.Age.Identities) \u003e 0 || len(c.Age.Recipients) \u003e 0 {\n\t\treturn nil, fmt.Errorf(\"age encryption is not currently supported, if you need encryption please revert back to Litestream v0.3.x\")\n\t}\n\n\t// Build replica.\n\tr := litestream.NewReplica(db)\n\tif v := c.SyncInterval; v != nil {\n\t\tr.SyncInterval = *v\n\t}\n\tif v := c.MaxSyncLTXFiles; v != nil {\n\t\tr.MaxSyncLTXFiles = *v\n\t}\n\tif v := c.AutoRecover; v != nil {\n\t\tr.AutoRecoverEnabled = *v\n\t}\n\n\t// Build and set client on replica.\n\tswitch c.ReplicaType() {\n\tcase \"file\":\n\t\tif r.Client, err = newFileReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"s3\":\n\t\tif r.Client, err = NewS3ReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"gs\":\n\t\tif r.Client, err = newGSReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"abs\":\n\t\tif r.Client, err = newABSReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"sftp\":\n\t\tif r.Client, err = newSFTPReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"webdav\":\n\t\tif r.Client, err = newWebDAVReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"nats\":\n\t\tif r.Client, err = newNATSReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase \"oss\":\n\t\tif r.Client, err = newOSSReplicaClientFromConfig(c, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown replica type in config: %q\", c.ReplicaType())\n\t}\n\n\tr.Client.SetLogger(r.Logger())\n\n\treturn r, nil\n}\n\n// newFileReplicaClientFromConfig returns a new instance of file.ReplicaClient built from config.\nfunc newFileReplicaClientFromConfig(c *ReplicaConfig, r *litestream.Replica) (_ *file.ReplicaClient, err error) {\n\t// Ensure URL \u0026 path are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for file replica\")\n\t}\n\n\t// Parse configPath from URL, if specified.\n\tconfigPath := c.Path\n\tif c.URL != \"\" {\n\t\tif _, _, configPath, err = litestream.ParseReplicaURL(c.URL); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Ensure path is set explicitly or derived from URL field.\n\tif configPath == \"\" {\n\t\treturn nil, fmt.Errorf(\"file replica path required\")\n\t}\n\n\t// Expand home prefix and return absolute path.\n\tif configPath, err = expand(configPath); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Instantiate replica and apply time fields, if set.\n\tclient := file.NewReplicaClient(configPath)\n\tclient.Replica = r\n\treturn client, nil\n}\n\n// NewS3ReplicaClientFromConfig returns a new instance of s3.ReplicaClient built from config.\n// Exported for testing.\nfunc NewS3ReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *s3.ReplicaClient, err error) {\n\t// Ensure URL \u0026 constituent parts are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for s3 replica\")\n\t} else if c.URL != \"\" \u0026\u0026 c.Bucket != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 bucket for s3 replica\")\n\t}\n\n\tbucket, configPath := c.Bucket, c.Path\n\tregion, endpoint, skipVerify := c.Region, c.Endpoint, c.SkipVerify\n\tstorageClass := c.StorageClass\n\tsignSetting := newBoolSetting(true)\n\tif v := c.SignPayload; v != nil {\n\t\tsignSetting.Set(*v)\n\t}\n\tsignAcceptEncodingSetting := newBoolSetting(true)\n\tif v := c.SignAcceptEncoding; v != nil {\n\t\tsignAcceptEncodingSetting.Set(*v)\n\t}\n\trequireSetting := newBoolSetting(true)\n\tif v := c.RequireContentMD5; v != nil {\n\t\trequireSetting.Set(*v)\n\t}\n\n\t// Use path style if an endpoint is explicitly set. This works because the\n\t// only service to not use path style is AWS which does not use an endpoint.\n\tforcePathStyle := (endpoint != \"\")\n\tif v := c.ForcePathStyle; v != nil {\n\t\tforcePathStyle = *v\n\t}\n\n\t// Apply settings from URL, if specified.\n\tvar (\n\t\tendpointWasSet bool\n\t\tusignPayload bool\n\t\tusignPayloadSet bool\n\t\tusignAcceptEncoding bool\n\t\tusignAcceptEncodingSet bool\n\t\turequireContentMD5 bool\n\t\turequireContentMD5Set bool\n\t\tustorageClass string\n\t\tupartSize int64\n\t\tupartSizeSet bool\n\t\tuconcurrency int64\n\t\tuconcurrencySet bool\n\t)\n\tif endpoint != \"\" {\n\t\tendpointWasSet = true\n\t}\n\n\tif c.URL != \"\" {\n\t\t_, host, upath, query, _, err := litestream.ParseReplicaURLWithQuery(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar (\n\t\t\tubucket string\n\t\t\turegion string\n\t\t\tuendpoint string\n\t\t\tuforcePathStyle bool\n\t\t)\n\n\t\tif strings.HasPrefix(host, \"arn:\") {\n\t\t\tubucket = host\n\t\t\turegion = litestream.RegionFromS3ARN(host)\n\t\t} else {\n\t\t\tubucket, uregion, uendpoint, uforcePathStyle = s3.ParseHost(host)\n\t\t}\n\n\t\t// Override with query parameters if provided\n\t\tif qEndpoint := query.Get(\"endpoint\"); qEndpoint != \"\" {\n\t\t\t// Ensure endpoint has a scheme (defaults to https:// for cloud, http:// for local)\n\t\t\tqEndpoint, _ = litestream.EnsureEndpointScheme(qEndpoint)\n\t\t\tuendpoint = qEndpoint\n\t\t\t// Default to path style for custom endpoints unless explicitly set to false\n\t\t\tif query.Get(\"forcePathStyle\") != \"false\" {\n\t\t\t\tuforcePathStyle = true\n\t\t\t}\n\t\t\tendpointWasSet = true\n\t\t}\n\t\tif qRegion := query.Get(\"region\"); qRegion != \"\" {\n\t\t\turegion = qRegion\n\t\t}\n\t\tif qForcePathStyle := query.Get(\"forcePathStyle\"); qForcePathStyle != \"\" {\n\t\t\tuforcePathStyle = qForcePathStyle == \"true\"\n\t\t}\n\t\tif qSkipVerify := query.Get(\"skipVerify\"); qSkipVerify != \"\" {\n\t\t\tskipVerify = qSkipVerify == \"true\"\n\t\t}\n\t\tif v, ok := litestream.BoolQueryValue(query, \"signPayload\", \"sign-payload\"); ok {\n\t\t\tusignPayload = v\n\t\t\tusignPayloadSet = true\n\t\t}\n\t\tif v, ok := litestream.BoolQueryValue(query, \"signAcceptEncoding\", \"sign-accept-encoding\"); ok {\n\t\t\tusignAcceptEncoding = v\n\t\t\tusignAcceptEncodingSet = true\n\t\t}\n\t\tif v, ok := litestream.BoolQueryValue(query, \"requireContentMD5\", \"require-content-md5\"); ok {\n\t\t\turequireContentMD5 = v\n\t\t\turequireContentMD5Set = true\n\t\t}\n\t\tif v := query.Get(\"storageClass\"); v != \"\" {\n\t\t\tustorageClass = v\n\t\t} else if v := query.Get(\"storage-class\"); v != \"\" {\n\t\t\tustorageClass = v\n\t\t}\n\t\tif v, ok, err := litestream.IntQueryValue(query, \"partSize\", \"part-size\"); err != nil {\n\t\t\treturn nil, err\n\t\t} else if ok {\n\t\t\tupartSize = v\n\t\t\tupartSizeSet = true\n\t\t}\n\t\tif v, ok, err := litestream.IntQueryValue(query, \"concurrency\"); err != nil {\n\t\t\treturn nil, err\n\t\t} else if ok {\n\t\t\tuconcurrency = v\n\t\t\tuconcurrencySet = true\n\t\t}\n\n\t\t// Only apply URL parts to field that have not been overridden.\n\t\tif configPath == \"\" {\n\t\t\tconfigPath = upath\n\t\t}\n\t\tif bucket == \"\" {\n\t\t\tbucket = ubucket\n\t\t}\n\t\tif region == \"\" {\n\t\t\tregion = uregion\n\t\t}\n\t\tif endpoint == \"\" {\n\t\t\tendpoint = uendpoint\n\t\t}\n\t\tif storageClass == \"\" {\n\t\t\tstorageClass = ustorageClass\n\t\t}\n\t\tif !forcePathStyle {\n\t\t\tforcePathStyle = uforcePathStyle\n\t\t}\n\t\tif !signSetting.set \u0026\u0026 usignPayloadSet {\n\t\t\tsignSetting.Set(usignPayload)\n\t\t}\n\t\tif !signAcceptEncodingSetting.set \u0026\u0026 usignAcceptEncodingSet {\n\t\t\tsignAcceptEncodingSetting.Set(usignAcceptEncoding)\n\t\t}\n\t\tif !requireSetting.set \u0026\u0026 urequireContentMD5Set {\n\t\t\trequireSetting.Set(urequireContentMD5)\n\t\t}\n\t}\n\n\t// Ensure required settings are set.\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for s3 replica\")\n\t}\n\n\t// Detect S3-compatible provider endpoints for applying appropriate defaults.\n\t// These providers require specific settings to work correctly with AWS SDK v2.\n\tisHetzner := litestream.IsHetznerEndpoint(endpoint)\n\tisTigris := litestream.IsTigrisEndpoint(endpoint)\n\tif !isTigris \u0026\u0026 !endpointWasSet \u0026\u0026 litestream.IsTigrisEndpoint(c.Endpoint) {\n\t\tisTigris = true\n\t}\n\tisDigitalOcean := litestream.IsDigitalOceanEndpoint(endpoint)\n\tisBackblaze := litestream.IsBackblazeEndpoint(endpoint)\n\tisFilebase := litestream.IsFilebaseEndpoint(endpoint)\n\tisScaleway := litestream.IsScalewayEndpoint(endpoint)\n\tisMinIO := litestream.IsMinIOEndpoint(endpoint)\n\tisCloudflareR2 := litestream.IsCloudflareR2Endpoint(endpoint)\n\tisSupabase := litestream.IsSupabaseEndpoint(endpoint)\n\n\t// Track if forcePathStyle was explicitly set by user (config or URL query param).\n\tforcePathStyleSet := c.ForcePathStyle != nil\n\n\t// Apply provider-specific defaults for S3-compatible providers.\n\t// These settings ensure compatibility with each provider's S3 implementation.\n\tif isTigris {\n\t\t// Tigris: requires signed payloads, no MD5\n\t\tsignSetting.ApplyDefault(true)\n\t\trequireSetting.ApplyDefault(false)\n\t}\n\tif isHetzner || isDigitalOcean || isBackblaze || isFilebase || isScaleway || isCloudflareR2 || isMinIO || isSupabase {\n\t\t// All these providers require signed payloads (don't support UNSIGNED-PAYLOAD)\n\t\tsignSetting.ApplyDefault(true)\n\t}\n\tif !forcePathStyleSet {\n\t\t// Filebase, Backblaze B2, MinIO, and Supabase require path-style URLs\n\t\tif isFilebase || isBackblaze || isMinIO || isSupabase {\n\t\t\tforcePathStyle = true\n\t\t}\n\t}\n\n\t// Build replica.\n\tclient := s3.NewReplicaClient()\n\tclient.AccessKeyID = c.AccessKeyID\n\tclient.SecretAccessKey = c.SecretAccessKey\n\tclient.Bucket = bucket\n\tclient.Path = configPath\n\tclient.Region = region\n\tclient.Endpoint = endpoint\n\tclient.ForcePathStyle = forcePathStyle\n\tclient.SkipVerify = skipVerify\n\tclient.StorageClass = storageClass\n\n\tclient.SignPayload = signSetting.value\n\tclient.SignAcceptEncoding = signAcceptEncodingSetting.value\n\tclient.RequireContentMD5 = requireSetting.value\n\n\tif isCloudflareR2 {\n\t\tclient.Concurrency = s3.DefaultR2Concurrency\n\t}\n\tif isTigris {\n\t\tclient.Concurrency = s3.DefaultTigrisConcurrency\n\t\tclient.PartSize = s3.DefaultTigrisPartSize\n\t}\n\n\t// Apply upload configuration from URL query, then config overrides.\n\tif upartSizeSet {\n\t\tclient.PartSize = upartSize\n\t}\n\tif uconcurrencySet {\n\t\tclient.Concurrency = int(uconcurrency)\n\t}\n\tif c.PartSize != nil {\n\t\tclient.PartSize = int64(*c.PartSize)\n\t}\n\tif c.Concurrency != nil {\n\t\tclient.Concurrency = *c.Concurrency\n\t}\n\n\t// Apply SSE-C configuration if specified.\n\tif c.SSECustomerKey != \"\" || c.SSECustomerKeyPath != \"\" {\n\t\tclient.SSECustomerAlgorithm = c.SSECustomerAlgorithm\n\t\tif client.SSECustomerAlgorithm == \"\" {\n\t\t\tclient.SSECustomerAlgorithm = \"AES256\"\n\t\t}\n\n\t\t// Read key from file if path is specified, otherwise use direct value.\n\t\tif c.SSECustomerKeyPath != \"\" {\n\t\t\tkeyPath := c.SSECustomerKeyPath\n\t\t\t// Expand ~ to home directory\n\t\t\tif strings.HasPrefix(keyPath, \"~\") {\n\t\t\t\thome, err := os.UserHomeDir()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"cannot expand home directory for sse-customer-key-path: %w\", err)\n\t\t\t\t}\n\t\t\t\tkeyPath = home + keyPath[1:]\n\t\t\t}\n\t\t\tkeyData, err := os.ReadFile(keyPath)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot read sse-customer-key-path %q: %w\", c.SSECustomerKeyPath, err)\n\t\t\t}\n\t\t\tclient.SSECustomerKey = strings.TrimSpace(string(keyData))\n\t\t} else {\n\t\t\tclient.SSECustomerKey = c.SSECustomerKey\n\t\t}\n\t}\n\n\t// Apply SSE-KMS configuration if specified.\n\tif c.SSEKMSKeyID != \"\" {\n\t\tclient.SSEKMSKeyID = c.SSEKMSKeyID\n\t}\n\n\treturn client, nil\n}\n\n// newGSReplicaClientFromConfig returns a new instance of gs.ReplicaClient built from config.\nfunc newGSReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *gs.ReplicaClient, err error) {\n\t// Ensure URL \u0026 constituent parts are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for gs replica\")\n\t} else if c.URL != \"\" \u0026\u0026 c.Bucket != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 bucket for gs replica\")\n\t}\n\n\tbucket, configPath := c.Bucket, c.Path\n\n\t// Apply settings from URL, if specified.\n\tif c.URL != \"\" {\n\t\t_, uhost, upath, err := litestream.ParseReplicaURL(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Only apply URL parts to field that have not been overridden.\n\t\tif configPath == \"\" {\n\t\t\tconfigPath = upath\n\t\t}\n\t\tif bucket == \"\" {\n\t\t\tbucket = uhost\n\t\t}\n\t}\n\n\t// Ensure required settings are set.\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for gs replica\")\n\t}\n\n\t// Build replica.\n\tclient := gs.NewReplicaClient()\n\tclient.Bucket = bucket\n\tclient.Path = configPath\n\treturn client, nil\n}\n\n// newABSReplicaClientFromConfig returns a new instance of abs.ReplicaClient built from config.\nfunc newABSReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *abs.ReplicaClient, err error) {\n\t// Ensure URL \u0026 constituent parts are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for abs replica\")\n\t} else if c.URL != \"\" \u0026\u0026 c.Bucket != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 bucket for abs replica\")\n\t}\n\n\t// Build replica.\n\tclient := abs.NewReplicaClient()\n\tclient.AccountName = c.AccountName\n\tclient.AccountKey = c.AccountKey\n\tclient.SASToken = c.SASToken\n\tclient.Bucket = c.Bucket\n\tclient.Path = c.Path\n\tclient.Endpoint = c.Endpoint\n\n\t// Apply settings from URL, if specified.\n\tif c.URL != \"\" {\n\t\tu, err := url.Parse(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif client.AccountName == \"\" \u0026\u0026 u.User != nil {\n\t\t\tclient.AccountName = u.User.Username()\n\t\t}\n\t\tif client.Bucket == \"\" {\n\t\t\tclient.Bucket = u.Host\n\t\t}\n\t\tif client.Path == \"\" {\n\t\t\tclient.Path = strings.TrimPrefix(path.Clean(u.Path), \"/\")\n\t\t}\n\t}\n\n\t// Ensure required settings are set.\n\tif client.Bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for abs replica\")\n\t}\n\n\treturn client, nil\n}\n\n// newSFTPReplicaClientFromConfig returns a new instance of sftp.ReplicaClient built from config.\nfunc newSFTPReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *sftp.ReplicaClient, err error) {\n\t// Ensure URL \u0026 constituent parts are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for sftp replica\")\n\t} else if c.URL != \"\" \u0026\u0026 c.Host != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 host for sftp replica\")\n\t}\n\n\thost, user, password, path := c.Host, c.User, c.Password, c.Path\n\n\t// Apply settings from URL, if specified.\n\tif c.URL != \"\" {\n\t\tu, err := url.Parse(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Only apply URL parts to field that have not been overridden.\n\t\tif host == \"\" {\n\t\t\thost = u.Host\n\t\t}\n\t\tif user == \"\" \u0026\u0026 u.User != nil {\n\t\t\tuser = u.User.Username()\n\t\t}\n\t\tif password == \"\" \u0026\u0026 u.User != nil {\n\t\t\tpassword, _ = u.User.Password()\n\t\t}\n\t\tif path == \"\" {\n\t\t\tpath = u.Path\n\t\t}\n\t}\n\n\t// Ensure required settings are set.\n\tif host == \"\" {\n\t\treturn nil, fmt.Errorf(\"host required for sftp replica\")\n\t} else if user == \"\" {\n\t\treturn nil, fmt.Errorf(\"user required for sftp replica\")\n\t}\n\n\t// Build replica.\n\tclient := sftp.NewReplicaClient()\n\tclient.Host = host\n\tclient.User = user\n\tclient.Password = password\n\tclient.Path = path\n\tclient.KeyPath = c.KeyPath\n\tclient.HostKey = c.HostKey\n\n\t// Set concurrent writes if specified, otherwise use default (true)\n\tif c.ConcurrentWrites != nil {\n\t\tclient.ConcurrentWrites = *c.ConcurrentWrites\n\t}\n\n\treturn client, nil\n}\n\n// newWebDAVReplicaClientFromConfig returns a new instance of webdav.ReplicaClient built from config.\nfunc newWebDAVReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *webdav.ReplicaClient, err error) {\n\t// Ensure URL \u0026 constituent parts are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for webdav replica\")\n\t} else if c.URL != \"\" \u0026\u0026 c.WebDAVURL != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 webdav-url for webdav replica\")\n\t}\n\n\twebdavURL, username, password, path := c.WebDAVURL, c.WebDAVUsername, c.WebDAVPassword, c.Path\n\n\t// Apply settings from URL, if specified.\n\tif c.URL != \"\" {\n\t\tu, err := url.Parse(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Build WebDAV URL from scheme and host\n\t\tscheme := \"http\"\n\t\tif u.Scheme == \"webdavs\" {\n\t\t\tscheme = \"https\"\n\t\t}\n\t\tif webdavURL == \"\" \u0026\u0026 u.Host != \"\" {\n\t\t\twebdavURL = fmt.Sprintf(\"%s://%s\", scheme, u.Host)\n\t\t}\n\n\t\t// Extract credentials from URL\n\t\tif username == \"\" \u0026\u0026 u.User != nil {\n\t\t\tusername = u.User.Username()\n\t\t}\n\t\tif password == \"\" \u0026\u0026 u.User != nil {\n\t\t\tpassword, _ = u.User.Password()\n\t\t}\n\t\tif path == \"\" {\n\t\t\tpath = u.Path\n\t\t}\n\t}\n\n\t// Ensure required settings are set.\n\tif webdavURL == \"\" {\n\t\treturn nil, fmt.Errorf(\"webdav-url required for webdav replica\")\n\t}\n\n\t// Build replica.\n\tclient := webdav.NewReplicaClient()\n\tclient.URL = webdavURL\n\tclient.Username = username\n\tclient.Password = password\n\tclient.Path = path\n\n\treturn client, nil\n}\n\n// newNATSReplicaClientFromConfig returns a new instance of nats.ReplicaClient built from config.\nfunc newNATSReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *nats.ReplicaClient, err error) {\n\t// Parse URL if provided to extract bucket name and server URL\n\tvar url, bucket string\n\tif c.URL != \"\" {\n\t\tscheme, host, bucketPath, err := litestream.ParseReplicaURL(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid NATS URL: %w\", err)\n\t\t}\n\t\tif scheme != \"nats\" {\n\t\t\treturn nil, fmt.Errorf(\"invalid scheme for NATS replica: %s\", scheme)\n\t\t}\n\n\t\t// Reconstruct URL without bucket path\n\t\tif host != \"\" {\n\t\t\turl = fmt.Sprintf(\"nats://%s\", host)\n\t\t}\n\n\t\t// Extract bucket name from path\n\t\tif bucketPath != \"\" {\n\t\t\tbucket = strings.Trim(bucketPath, \"/\")\n\t\t}\n\t}\n\n\t// Use bucket from config if not extracted from URL\n\tif bucket == \"\" {\n\t\tbucket = c.Bucket\n\t}\n\n\t// Ensure required settings are set\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for NATS replica\")\n\t}\n\n\t// Validate TLS configuration\n\t// Both client cert and key must be specified together\n\tif (c.ClientCert != \"\") != (c.ClientKey != \"\") {\n\t\treturn nil, fmt.Errorf(\"client-cert and client-key must both be specified for mutual TLS authentication\")\n\t}\n\n\t// Build replica client\n\tclient := nats.NewReplicaClient()\n\tclient.URL = url\n\tclient.BucketName = bucket\n\n\t// Set authentication options\n\tclient.JWT = c.JWT\n\tclient.Seed = c.Seed\n\tclient.Creds = c.Creds\n\tclient.NKey = c.NKey\n\tclient.Username = c.Username\n\tclient.Password = c.Password\n\tclient.Token = c.Token\n\n\t// Set TLS options\n\tif c.TLS != nil {\n\t\tclient.TLS = *c.TLS\n\t}\n\tclient.RootCAs = c.RootCAs\n\tclient.ClientCert = c.ClientCert\n\tclient.ClientKey = c.ClientKey\n\n\t// Set connection options with defaults\n\tif c.MaxReconnects != nil {\n\t\tclient.MaxReconnects = *c.MaxReconnects\n\t}\n\tif c.ReconnectWait != nil {\n\t\tclient.ReconnectWait = *c.ReconnectWait\n\t}\n\tif c.Timeout != nil {\n\t\tclient.Timeout = *c.Timeout\n\t}\n\n\treturn client, nil\n}\n\n// newOSSReplicaClientFromConfig returns a new instance of oss.ReplicaClient built from config.\nfunc newOSSReplicaClientFromConfig(c *ReplicaConfig, _ *litestream.Replica) (_ *oss.ReplicaClient, err error) {\n\t// Ensure URL \u0026 constituent parts are not both specified.\n\tif c.URL != \"\" \u0026\u0026 c.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 path for oss replica\")\n\t} else if c.URL != \"\" \u0026\u0026 c.Bucket != \"\" {\n\t\treturn nil, fmt.Errorf(\"cannot specify url \u0026 bucket for oss replica\")\n\t}\n\n\tbucket, configPath := c.Bucket, c.Path\n\tregion, endpoint := c.Region, c.Endpoint\n\n\t// Apply settings from URL, if specified.\n\tif c.URL != \"\" {\n\t\t_, host, upath, err := litestream.ParseReplicaURL(c.URL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar (\n\t\t\tubucket string\n\t\t\turegion string\n\t\t)\n\n\t\tubucket, uregion, _ = oss.ParseHost(host)\n\n\t\t// Only apply URL parts to fields that have not been overridden.\n\t\tif configPath == \"\" {\n\t\t\tconfigPath = upath\n\t\t}\n\t\tif bucket == \"\" {\n\t\t\tbucket = ubucket\n\t\t}\n\t\tif region == \"\" {\n\t\t\tregion = uregion\n\t\t}\n\t}\n\n\t// Ensure required settings are set.\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for oss replica\")\n\t}\n\n\t// Build replica client.\n\tclient := oss.NewReplicaClient()\n\tclient.AccessKeyID = c.AccessKeyID\n\tclient.AccessKeySecret = c.SecretAccessKey\n\tclient.Bucket = bucket\n\tclient.Path = configPath\n\tclient.Region = region\n\tclient.Endpoint = endpoint\n\n\t// Apply upload configuration if specified.\n\tif c.PartSize != nil {\n\t\tclient.PartSize = int64(*c.PartSize)\n\t}\n\tif c.Concurrency != nil {\n\t\tclient.Concurrency = *c.Concurrency\n\t}\n\n\treturn client, nil\n}\n\n// applyLitestreamEnv copies \"LITESTREAM\" prefixed environment variables to\n// their AWS counterparts as the \"AWS\" prefix can be confusing when using a\n// non-AWS S3-compatible service.\nfunc applyLitestreamEnv() {\n\tif v, ok := os.LookupEnv(\"LITESTREAM_ACCESS_KEY_ID\"); ok {\n\t\tif _, ok := os.LookupEnv(\"AWS_ACCESS_KEY_ID\"); !ok {\n\t\t\tos.Setenv(\"AWS_ACCESS_KEY_ID\", v)\n\t\t}\n\t}\n\tif v, ok := os.LookupEnv(\"LITESTREAM_SECRET_ACCESS_KEY\"); ok {\n\t\tif _, ok := os.LookupEnv(\"AWS_SECRET_ACCESS_KEY\"); !ok {\n\t\t\tos.Setenv(\"AWS_SECRET_ACCESS_KEY\", v)\n\t\t}\n\t}\n}\n\ntype boolSetting struct {\n\tvalue bool\n\tset bool\n}\n\nfunc newBoolSetting(defaultValue bool) boolSetting {\n\treturn boolSetting{value: defaultValue}\n}\n\nfunc (s *boolSetting) Set(value bool) {\n\ts.value = value\n\ts.set = true\n}\n\nfunc (s *boolSetting) ApplyDefault(value bool) {\n\tif !s.set {\n\t\ts.value = value\n\t}\n}\n\n// ReplicaType returns the type based on the type field or extracted from the URL.\nfunc (c *ReplicaConfig) ReplicaType() string {\n\tif replicaType := litestream.ReplicaTypeFromURL(c.URL); replicaType != \"\" {\n\t\treturn replicaType\n\t} else if c.Type != \"\" {\n\t\treturn c.Type\n\t}\n\treturn \"file\"\n}\n\n// DefaultConfigPath returns the default config path.\nfunc DefaultConfigPath() string {\n\tif v := os.Getenv(\"LITESTREAM_CONFIG\"); v != \"\" {\n\t\treturn v\n\t}\n\treturn defaultConfigPath\n}\n\nfunc registerConfigFlag(fs *flag.FlagSet) (configPath *string, noExpandEnv *bool) {\n\treturn fs.String(\"config\", \"\", \"config path\"),\n\t\tfs.Bool(\"no-expand-env\", false, \"do not expand env vars in config\")\n}\n\n// isValidHeartbeatURL checks if the URL is a valid HTTP or HTTPS URL.\nfunc isValidHeartbeatURL(u string) bool {\n\treturn strings.HasPrefix(u, \"http://\") || strings.HasPrefix(u, \"https://\")\n}\n\n// expand returns an absolute path for s.\n// It also strips SQLite connection string prefixes (sqlite://, sqlite3://).\nfunc expand(s string) (string, error) {\n\t// Strip SQLite connection string prefixes if present.\n\ts = StripSQLitePrefix(s)\n\n\t// Just expand to absolute path if there is no home directory prefix.\n\tprefix := \"~\" + string(os.PathSeparator)\n\tif s != \"~\" \u0026\u0026 !strings.HasPrefix(s, prefix) {\n\t\treturn filepath.Abs(s)\n\t}\n\n\t// Look up home directory.\n\tu, err := user.Current()\n\tif err != nil {\n\t\treturn \"\", err\n\t} else if u.HomeDir == \"\" {\n\t\treturn \"\", fmt.Errorf(\"cannot expand path %s, no home directory available\", s)\n\t}\n\n\t// Return path with tilde replaced by the home directory.\n\tif s == \"~\" {\n\t\treturn u.HomeDir, nil\n\t}\n\treturn filepath.Join(u.HomeDir, strings.TrimPrefix(s, prefix)), nil\n}\n\n// StripSQLitePrefix removes SQLite connection string prefixes (sqlite://, sqlite3://)\n// from the given path. This allows users to use standard connection string formats\n// across their tooling while Litestream extracts just the file path.\nfunc StripSQLitePrefix(s string) string {\n\tif len(s) \u003c 9 || s[0] != 's' {\n\t\treturn s\n\t}\n\tfor _, prefix := range []string{\"sqlite3://\", \"sqlite://\"} {\n\t\tif strings.HasPrefix(s, prefix) {\n\t\t\treturn strings.TrimPrefix(s, prefix)\n\t\t}\n\t}\n\treturn s\n}\n\n// txidVar allows the flag package to parse index flags as hex-formatted TXIDs\ntype txidVar ltx.TXID\n\n// Ensure type implements interface.\nvar _ flag.Value = (*txidVar)(nil)\n\n// String returns an 8-character hexadecimal value.\nfunc (v *txidVar) String() string {\n\treturn ltx.TXID(*v).String()\n}\n\n// Set parses s into an integer from a hexadecimal value.\nfunc (v *txidVar) Set(s string) error {\n\ttxID, err := ltx.ParseTXID(s)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid txid format\")\n\t}\n\t*v = txidVar(txID)\n\treturn nil\n}\n\n// levelAll is a sentinel value indicating all compaction levels should be shown.\nconst levelAll = -1\n\n// levelVar allows the flag package to parse compaction level flags.\n// Accepts integers 0-9 or \"all\" for all levels.\ntype levelVar int\n\nvar _ flag.Value = (*levelVar)(nil)\n\nfunc (v *levelVar) String() string {\n\tif *v == levelAll {\n\t\treturn \"all\"\n\t}\n\treturn strconv.Itoa(int(*v))\n}\n\nfunc (v *levelVar) Set(s string) error {\n\tif s == \"all\" {\n\t\t*v = levelAll\n\t\treturn nil\n\t}\n\tn, err := strconv.Atoi(s)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid level: must be 0-%d or \\\"all\\\"\", litestream.SnapshotLevel)\n\t}\n\tif n \u003c 0 || n \u003e litestream.SnapshotLevel {\n\t\treturn fmt.Errorf(\"level must be between 0 and %d\", litestream.SnapshotLevel)\n\t}\n\t*v = levelVar(n)\n\treturn nil\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"errors","path":"errors","span":{"start":[5,1],"end":[5,10],"bytes":[34,43]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[44,51]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[52,58]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[59,64]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[65,76]}},{"name":"math","path":"math","span":{"start":[10,1],"end":[10,8],"bytes":[77,84]}},{"name":"url","path":"net/url","span":{"start":[11,1],"end":[11,11],"bytes":[85,95]}},{"name":"os","path":"os","span":{"start":[12,1],"end":[12,6],"bytes":[96,101]}},{"name":"user","path":"os/user","span":{"start":[13,1],"end":[13,11],"bytes":[102,112]}},{"name":"path","path":"path","span":{"start":[14,1],"end":[14,8],"bytes":[113,120]}},{"name":"filepath","path":"path/filepath","span":{"start":[15,1],"end":[15,17],"bytes":[121,137]}},{"name":"debug","path":"runtime/debug","span":{"start":[16,1],"end":[16,17],"bytes":[138,154]}},{"name":"strconv","path":"strconv","span":{"start":[17,1],"end":[17,11],"bytes":[155,165]}},{"name":"strings","path":"strings","span":{"start":[18,1],"end":[18,11],"bytes":[166,176]}},{"name":"time","path":"time","span":{"start":[19,1],"end":[19,8],"bytes":[177,184]}},{"name":"go-humanize","path":"github.com/dustin/go-humanize","span":{"start":[21,1],"end":[21,33],"bytes":[186,218]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[22,1],"end":[22,27],"bytes":[219,245]}},{"name":"fallback","path":"golang.org/x/crypto/x509roots/fallback","alias":"_","span":{"start":[23,1],"end":[23,44],"bytes":[246,289]}},{"name":"yaml.v2","path":"gopkg.in/yaml.v2","span":{"start":[24,1],"end":[24,20],"bytes":[290,309]}},{"name":"sqlite","path":"modernc.org/sqlite","alias":"_","span":{"start":[25,1],"end":[25,24],"bytes":[310,333]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[27,1],"end":[27,37],"bytes":[335,371]}},{"name":"abs","path":"github.com/benbjohnson/litestream/abs","span":{"start":[28,1],"end":[28,41],"bytes":[372,412]}},{"name":"file","path":"github.com/benbjohnson/litestream/file","span":{"start":[29,1],"end":[29,42],"bytes":[413,454]}},{"name":"gs","path":"github.com/benbjohnson/litestream/gs","span":{"start":[30,1],"end":[30,40],"bytes":[455,494]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[31,1],"end":[31,46],"bytes":[495,540]}},{"name":"nats","path":"github.com/benbjohnson/litestream/nats","span":{"start":[32,1],"end":[32,42],"bytes":[541,582]}},{"name":"oss","path":"github.com/benbjohnson/litestream/oss","span":{"start":[33,1],"end":[33,41],"bytes":[583,623]}},{"name":"s3","path":"github.com/benbjohnson/litestream/s3","span":{"start":[34,1],"end":[34,40],"bytes":[624,663]}},{"name":"sftp","path":"github.com/benbjohnson/litestream/sftp","span":{"start":[35,1],"end":[35,42],"bytes":[664,705]}},{"name":"webdav","path":"github.com/benbjohnson/litestream/webdav","span":{"start":[36,1],"end":[36,44],"bytes":[706,749]}}],"types":{"ByteSize":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ByteSize","kind":"struct","span":{"start":[1071,1],"end":[1071,20],"bytes":[32518,32537]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ByteSize.UnmarshalYAML":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ByteSize/github.com/benbjohnson/litestream/cmd/litestream.ByteSize.UnmarshalYAML","kind":"method","span":{"start":[1074,1],"end":[1086,2],"bytes":[32598,32842]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ByteSize.UnmarshalYAML","parameters":[{"name":"unmarshal","type":"func(interface{}) error","span":{"start":[1074,1],"end":[1074,76],"bytes":[32598,32673]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"1076:12":{"kind":"call","span":{"start":[1076,12],"end":[1076,25],"bytes":[32699,32712]},"callee":null},"1080:15":{"kind":"call","span":{"start":[1080,15],"end":[1080,31],"bytes":[32758,32774]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseByteSize"},"1084:7":{"kind":"call","span":{"start":[1084,7],"end":[1084,21],"bytes":[32814,32828]},"callee":null}}}}},"CompactionLevelConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.CompactionLevelConfig","kind":"struct","span":{"start":[717,1],"end":[719,2],"bytes":[21344,21423]},"callables":{},"fields":{"Interval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.CompactionLevelConfig/Interval","kind":"field","type":"time.Duration","span":{"start":[718,1],"end":[718,42],"bytes":[21380,21421]}}}},"Config":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config","kind":"struct","span":{"start":[270,1],"end":[325,2],"bytes":[7596,9394]},"base_types":["github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings"],"callables":{"github.com/benbjohnson/litestream/cmd/litestream.Config.CompactionLevels":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.CompactionLevels","kind":"method","span":{"start":[571,1],"end":[584,2],"bytes":[17438,17721]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Config.CompactionLevels","parameters":[],"return_type":"github.com/benbjohnson/litestream.CompactionLevels","metrics":{"cyclomatic":2},"body":{"577:12":{"kind":"call","span":{"start":[577,12],"end":[580,5],"bytes":[17605,17700]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig","kind":"method","span":{"start":[587,1],"end":[594,2],"bytes":[17775,17940]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig","parameters":[{"name":"configPath","type":"string","span":{"start":[587,1],"end":[587,57],"bytes":[17775,17831]}}],"return_type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","metrics":{"cyclomatic":3},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream.Config.Validate":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.Validate","kind":"method","span":{"start":[419,1],"end":[568,2],"bytes":[12463,17363]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Config.Validate","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":26},"body":{"465:30":{"kind":"call","span":{"start":[465,30],"end":[465,65],"bytes":[13863,13898]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.isValidHeartbeatURL"},"485:12":{"kind":"call","span":{"start":[485,12],"end":[485,49],"bytes":[14450,14487]},"callee":null},"492:15":{"kind":"call","span":{"start":[492,15],"end":[492,35],"bytes":[14573,14593]},"callee":null},"496:11":{"kind":"call","span":{"start":[496,11],"end":[496,89],"bytes":[14776,14854]},"callee":null},"499:11":{"kind":"call","span":{"start":[499,11],"end":[499,88],"bytes":[14906,14983]},"callee":null},"506:11":{"kind":"call","span":{"start":[506,11],"end":[506,34],"bytes":[15195,15218]},"callee":null},"508:12":{"kind":"call","span":{"start":[508,12],"end":[508,164],"bytes":[15270,15422]},"callee":null},"515:11":{"kind":"call","span":{"start":[515,11],"end":[515,91],"bytes":[15558,15638]},"callee":null},"518:11":{"kind":"call","span":{"start":[518,11],"end":[518,97],"bytes":[15685,15771]},"callee":null},"521:11":{"kind":"call","span":{"start":[521,11],"end":[521,97],"bytes":[15827,15913]},"callee":null},"524:11":{"kind":"call","span":{"start":[524,11],"end":[524,99],"bytes":[15975,16063]},"callee":null},"536:12":{"kind":"call","span":{"start":[536,12],"end":[536,66],"bytes":[16366,16420]},"callee":null},"543:12":{"kind":"call","span":{"start":[543,12],"end":[543,67],"bytes":[16617,16672]},"callee":null},"552:12":{"kind":"call","span":{"start":[552,12],"end":[552,70],"bytes":[16933,16991]},"callee":null},"560:13":{"kind":"call","span":{"start":[560,13],"end":[560,79],"bytes":[17228,17294]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.Config.applyDBSnapshotConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.applyDBSnapshotConfig","kind":"method","span":{"start":[356,1],"end":[390,2],"bytes":[10206,11283]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Config.applyDBSnapshotConfig","parameters":[{"name":"globalIntervalSet","type":"bool","span":{"start":[356,1],"end":[356,91],"bytes":[10206,10296]}},{"name":"globalRetentionSet","type":"bool","span":{"start":[356,1],"end":[356,91],"bytes":[10206,10296]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"369:12":{"kind":"call","span":{"start":[369,12],"end":[369,139],"bytes":[10597,10724]},"callee":null},"376:12":{"kind":"call","span":{"start":[376,12],"end":[376,143],"bytes":[10902,11033]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.Config.propagateGlobalSettings":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.propagateGlobalSettings","kind":"method","span":{"start":[344,1],"end":[354,2],"bytes":[9909,10204]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Config.propagateGlobalSettings","parameters":[],"metrics":{"cyclomatic":4},"body":{"348:4":{"kind":"call","span":{"start":[348,4],"end":[348,47],"bytes":[10074,10117]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings.SetDefaults"},"351:4":{"kind":"call","span":{"start":[351,4],"end":[351,38],"bytes":[10161,10195]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings.SetDefaults"}}}},"fields":{"Addr":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Addr","kind":"field","type":"string","span":{"start":[275,1],"end":[275,27],"bytes":[7758,7784]}},"ConfigPath":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/ConfigPath","kind":"field","type":"string","span":{"start":[324,1],"end":[324,30],"bytes":[9363,9392]}},"DBs":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/DBs","kind":"field","type":"[]*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[306,1],"end":[306,30],"bytes":[8814,8843]}},"Exec":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Exec","kind":"field","type":"string","span":{"start":[310,1],"end":[310,27],"bytes":[8943,8969]}},"HeartbeatInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/HeartbeatInterval","kind":"field","type":"*time.Duration","span":{"start":[303,1],"end":[303,62],"bytes":[8718,8779]}},"HeartbeatURL":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/HeartbeatURL","kind":"field","type":"string","span":{"start":[302,1],"end":[302,57],"bytes":[8661,8717]}},"L0Retention":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/L0Retention","kind":"field","type":"*time.Duration","span":{"start":[291,1],"end":[291,63],"bytes":[8214,8276]}},"L0RetentionCheckInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/L0RetentionCheckInterval","kind":"field","type":"*time.Duration","span":{"start":[292,1],"end":[292,78],"bytes":[8277,8354]}},"Levels":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Levels","kind":"field","type":"[]*github.com/benbjohnson/litestream/cmd/litestream.CompactionLevelConfig","span":{"start":[282,1],"end":[282,49],"bytes":[7988,8036]}},"Logging":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Logging","kind":"field","type":"github.com/benbjohnson/litestream/internal.LoggingConfig","span":{"start":[313,1],"end":[313,49],"bytes":[8983,9031]}},"MCPAddr":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/MCPAddr","kind":"field","type":"string","span":{"start":[316,1],"end":[316,34],"bytes":[9056,9089]}},"Retention":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Retention","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.RetentionConfig","span":{"start":[299,1],"end":[299,46],"bytes":[8573,8618]}},"ShutdownSyncInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/ShutdownSyncInterval","kind":"field","type":"*time.Duration","span":{"start":[320,1],"end":[320,69],"bytes":[9192,9260]}},"ShutdownSyncTimeout":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/ShutdownSyncTimeout","kind":"field","type":"*time.Duration","span":{"start":[319,1],"end":[319,68],"bytes":[9124,9191]}},"Snapshot":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Snapshot","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.SnapshotConfig","span":{"start":[285,1],"end":[285,43],"bytes":[8065,8107]}},"Socket":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Socket","kind":"field","type":"github.com/benbjohnson/litestream.SocketConfig","span":{"start":[278,1],"end":[278,48],"bytes":[7833,7880]}},"Validation":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/Validation","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.ValidationConfig","span":{"start":[288,1],"end":[288,49],"bytes":[8138,8186]}},"VerifyCompaction":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/VerifyCompaction","kind":"field","type":"bool","span":{"start":[296,1],"end":[296,50],"bytes":[8494,8543]}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings","span":{"start":[272,1],"end":[272,34],"bytes":[7685,7718]}}}},"ConfigValidationError":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError","kind":"struct","span":{"start":[67,1],"end":[71,2],"bytes":[2273,2356]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError.Error":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError.Error","kind":"method","span":{"start":[73,1],"end":[78,2],"bytes":[2358,2543]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError.Error","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{"75:10":{"kind":"call","span":{"start":[75,10],"end":[75,65],"bytes":[2437,2492]},"callee":null},"77:9":{"kind":"call","span":{"start":[77,9],"end":[77,46],"bytes":[2504,2541]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError.Unwrap":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError.Unwrap","kind":"method","span":{"start":[80,1],"end":[82,2],"bytes":[2545,2609]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError.Unwrap","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}}},"fields":{"Err":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError/Err","kind":"field","type":"error","span":{"start":[68,1],"end":[68,13],"bytes":[2309,2321]}},"Field":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError/Field","kind":"field","type":"string","span":{"start":[69,1],"end":[69,14],"bytes":[2322,2335]}},"Value":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ConfigValidationError/Value","kind":"field","type":"interface{}","span":{"start":[70,1],"end":[70,19],"bytes":[2336,2354]}}}},"DBConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig","kind":"struct","span":{"start":[722,1],"end":[742,2],"bytes":[21515,22670]},"callables":{},"fields":{"BusyTimeout":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/BusyTimeout","kind":"field","type":"*time.Duration","span":{"start":[733,1],"end":[733,57],"bytes":[22253,22309]}},"CheckpointInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/CheckpointInterval","kind":"field","type":"*time.Duration","span":{"start":[732,1],"end":[732,64],"bytes":[22189,22252]}},"Dir":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Dir","kind":"field","type":"string","span":{"start":[724,1],"end":[724,89],"bytes":[21587,21675]}},"MaxSyncWALBytes":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/MaxSyncWALBytes","kind":"field","type":"*int64","span":{"start":[736,1],"end":[736,63],"bytes":[22440,22502]}},"MetaDir":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/MetaDir","kind":"field","type":"*string","span":{"start":[730,1],"end":[730,53],"bytes":[22075,22127]}},"MetaPath":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/MetaPath","kind":"field","type":"*string","span":{"start":[729,1],"end":[729,54],"bytes":[22021,22074]}},"MinCheckpointPageN":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/MinCheckpointPageN","kind":"field","type":"*int","span":{"start":[734,1],"end":[734,70],"bytes":[22310,22379]}},"MonitorInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/MonitorInterval","kind":"field","type":"*time.Duration","span":{"start":[731,1],"end":[731,61],"bytes":[22128,22188]}},"Path":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Path","kind":"field","type":"string","span":{"start":[723,1],"end":[723,49],"bytes":[21538,21586]}},"Pattern":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Pattern","kind":"field","type":"string","span":{"start":[725,1],"end":[725,106],"bytes":[21676,21781]}},"Recursive":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Recursive","kind":"field","type":"bool","span":{"start":[726,1],"end":[726,89],"bytes":[21782,21870]}},"Replica":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Replica","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[740,1],"end":[740,44],"bytes":[22566,22609]}},"Replicas":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Replicas","kind":"field","type":"[]*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[741,1],"end":[741,59],"bytes":[22610,22668]}},"RestoreIfDBNotExists":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/RestoreIfDBNotExists","kind":"field","type":"bool","span":{"start":[738,1],"end":[738,61],"bytes":[22504,22564]}},"Snapshot":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Snapshot","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.SnapshotConfig","span":{"start":[728,1],"end":[728,53],"bytes":[21968,22020]}},"TruncatePageN":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/TruncatePageN","kind":"field","type":"*int","span":{"start":[735,1],"end":[735,60],"bytes":[22380,22439]}},"Watch":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DBConfig/Watch","kind":"field","type":"bool","span":{"start":[727,1],"end":[727,97],"bytes":[21871,21967]}}}},"Main":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main","kind":"struct","span":{"start":[117,1],"end":[117,19],"bytes":[3367,3385]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.Main.Run":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","kind":"method","span":{"start":[125,1],"end":[239,2],"bytes":[3501,6631]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Main.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[125,1],"end":[125,69],"bytes":[3501,3569]}},{"name":"args","type":"[]string","span":{"start":[125,1],"end":[125,69],"bytes":[3501,3569]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":33},"body":{"127:23":{"kind":"call","span":{"start":[127,23],"end":[127,41],"bytes":[3657,3675]},"callee":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.isWindowsService"},"130:10":{"kind":"call","span":{"start":[130,10],"end":[130,32],"bytes":[3735,3757]},"callee":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.runWindowsService"},"134:2":{"kind":"call","span":{"start":[134,2],"end":[134,22],"bytes":[3809,3829]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv"},"138:5":{"kind":"call","span":{"start":[138,5],"end":[138,14],"bytes":[3877,3886]},"callee":null},"144:10":{"kind":"call","span":{"start":[144,10],"end":[144,46],"bytes":[3971,4007]},"callee":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run"},"146:8":{"kind":"call","span":{"start":[146,8],"end":[146,29],"bytes":[4034,4055]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicateCommand"},"147:13":{"kind":"call","span":{"start":[147,13],"end":[147,36],"bytes":[4068,4091]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags"},"152:15":{"kind":"call","span":{"start":[152,15],"end":[152,27],"bytes":[4166,4178]},"callee":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.signalChan"},"157:11":{"kind":"call","span":{"start":[157,11],"end":[157,30],"bytes":[4366,4385]},"callee":null},"158:3":{"kind":"call","span":{"start":[158,3],"end":[158,18],"bytes":[4388,4403]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.SetDone"},"160:13":{"kind":"call","span":{"start":[160,13],"end":[160,23],"bytes":[4417,4427]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run"},"168:5":{"kind":"call","span":{"start":[168,5],"end":[168,61],"bytes":[4560,4616]},"callee":null},"170:5":{"kind":"call","span":{"start":[170,5],"end":[170,64],"bytes":[4633,4692]},"callee":null},"173:4":{"kind":"call","span":{"start":[173,4],"end":[173,73],"bytes":[4727,4796]},"callee":null},"176:5":{"kind":"call","span":{"start":[176,5],"end":[176,48],"bytes":[4823,4866]},"callee":null},"177:15":{"kind":"call","span":{"start":[177,15],"end":[177,40],"bytes":[4881,4906]},"callee":null},"178:13":{"kind":"call","span":{"start":[178,13],"end":[178,62],"bytes":[4933,4982]},"callee":null},"181:5":{"kind":"call","span":{"start":[181,5],"end":[181,51],"bytes":[4994,5040]},"callee":null},"182:42":{"kind":"call","span":{"start":[182,42],"end":[182,83],"bytes":[5082,5123]},"callee":null},"182:60":{"kind":"call","span":{"start":[182,60],"end":[182,71],"bytes":[5100,5111]},"callee":null},"183:13":{"kind":"call","span":{"start":[183,13],"end":[183,64],"bytes":[5138,5189]},"callee":null},"188:7":{"kind":"call","span":{"start":[188,7],"end":[191,7],"bytes":[5282,5328]},"callee":null,"is_goroutine":true},"195:11":{"kind":"call","span":{"start":[195,11],"end":[195,23],"bytes":[5367,5379]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close"},"198:3":{"kind":"call","span":{"start":[198,3],"end":[198,36],"bytes":[5423,5456]},"callee":null},"202:10":{"kind":"call","span":{"start":[202,10],"end":[202,42],"bytes":[5495,5527]},"callee":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartCommand/github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run"},"204:10":{"kind":"call","span":{"start":[204,10],"end":[204,41],"bytes":[5551,5582]},"callee":"can://go/litestream/cmd/litestream/stop.go/github.com/benbjohnson/litestream/cmd/litestream.StopCommand/github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run"},"206:10":{"kind":"call","span":{"start":[206,10],"end":[206,45],"bytes":[5610,5645]},"callee":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run"},"208:10":{"kind":"call","span":{"start":[208,10],"end":[208,47],"bytes":[5675,5712]},"callee":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run"},"210:10":{"kind":"call","span":{"start":[210,10],"end":[210,42],"bytes":[5737,5769]},"callee":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run"},"212:10":{"kind":"call","span":{"start":[212,10],"end":[212,44],"bytes":[5796,5830]},"callee":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run"},"214:10":{"kind":"call","span":{"start":[214,10],"end":[214,43],"bytes":[5856,5889]},"callee":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run"},"216:10":{"kind":"call","span":{"start":[216,10],"end":[216,41],"bytes":[5913,5944]},"callee":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run"},"218:10":{"kind":"call","span":{"start":[218,10],"end":[218,41],"bytes":[5968,5999]},"callee":"can://go/litestream/cmd/litestream/list.go/github.com/benbjohnson/litestream/cmd/litestream.ListCommand/github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run"},"220:10":{"kind":"call","span":{"start":[220,10],"end":[220,41],"bytes":[6023,6054]},"callee":"can://go/litestream/cmd/litestream/info.go/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run"},"222:10":{"kind":"call","span":{"start":[222,10],"end":[222,44],"bytes":[6081,6115]},"callee":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Run"},"224:10":{"kind":"call","span":{"start":[224,10],"end":[224,40],"bytes":[6138,6168]},"callee":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run"},"227:3":{"kind":"call","span":{"start":[227,3],"end":[227,92],"bytes":[6233,6322]},"callee":null},"228:10":{"kind":"call","span":{"start":[228,10],"end":[228,40],"bytes":[6332,6362]},"callee":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run"},"231:4":{"kind":"call","span":{"start":[231,4],"end":[231,13],"bytes":[6449,6458]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Usage"},"233:26":{"kind":"call","span":{"start":[233,26],"end":[233,53],"bytes":[6498,6525]},"callee":null},"234:4":{"kind":"call","span":{"start":[234,4],"end":[234,13],"bytes":[6531,6540]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Usage"},"237:10":{"kind":"call","span":{"start":[237,10],"end":[237,59],"bytes":[6577,6626]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run/github.com/benbjohnson/litestream/cmd/litestream.Main.Run.closure_1","kind":"function","span":{"start":[188,1],"end":[191,7],"bytes":[5276,5328]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Main.Run.closure_1","parameters":[],"body":{"190:5":{"kind":"call","span":{"start":[190,5],"end":[190,16],"bytes":[5310,5321]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.Main.Usage":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Usage","kind":"method","span":{"start":[242,1],"end":[267,2],"bytes":[6676,7525]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.Main.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"243:2":{"kind":"call","span":{"start":[243,2],"end":[266,7],"bytes":[6702,7523]},"callee":null}}}}},"ReplicaConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","kind":"struct","span":{"start":[1340,1],"end":[1347,2],"bytes":[39984,40185]},"base_types":["github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings"],"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType","kind":"method","span":{"start":[2088,1],"end":[2095,2],"bytes":[61675,61881]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType","parameters":[],"return_type":"string","metrics":{"cyclomatic":3},"body":{"2089:20":{"kind":"call","span":{"start":[2089,20],"end":[2089,56],"bytes":[61741,61777]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ReplicaTypeFromURL"}}}},"fields":{"Name":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/Name","kind":"field","type":"string","span":{"start":[1344,1],"end":[1344,41],"bytes":[40090,40130]}},"Path":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/Path","kind":"field","type":"string","span":{"start":[1345,1],"end":[1345,27],"bytes":[40131,40157]}},"Type":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/Type","kind":"field","type":"string","span":{"start":[1343,1],"end":[1343,43],"bytes":[40047,40089]}},"URL":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/URL","kind":"field","type":"string","span":{"start":[1346,1],"end":[1346,26],"bytes":[40158,40183]}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings","span":{"start":[1341,1],"end":[1341,34],"bytes":[40012,40045]}}}},"ReplicaSettings":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings","kind":"struct","span":{"start":[1113,1],"end":[1187,2],"bytes":[33718,36725]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings.SetDefaults":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings.SetDefaults","kind":"method","span":{"start":[1191,1],"end":[1337,2],"bytes":[36868,39900]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings.SetDefaults","parameters":[{"name":"src","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings","span":{"start":[1191,1],"end":[1191,63],"bytes":[36868,36930]}}],"metrics":{"cyclomatic":44},"body":{"1311:5":{"kind":"call","span":{"start":[1311,5],"end":[1311,20],"bytes":[39342,39357]},"callee":null},"1331:5":{"kind":"call","span":{"start":[1331,5],"end":[1331,27],"bytes":[39747,39769]},"callee":null},"1334:5":{"kind":"call","span":{"start":[1334,5],"end":[1334,27],"bytes":[39825,39847]},"callee":null}}}},"fields":{"AccessKeyID":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/AccessKeyID","kind":"field","type":"string","span":{"start":[1127,1],"end":[1127,53],"bytes":[34322,34374]}},"AccountKey":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/AccountKey","kind":"field","type":"string","span":{"start":[1151,1],"end":[1151,41],"bytes":[35415,35455]}},"AccountName":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/AccountName","kind":"field","type":"string","span":{"start":[1150,1],"end":[1150,42],"bytes":[35373,35414]}},"Age":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Age","kind":"field","type":"struct{Identities []string \"yaml:\\\"identities\\\"\"; Recipients []string \"yaml:\\\"recipients\\\"\"}","span":{"start":[1183,1],"end":[1186,16],"bytes":[36610,36723]}},"AutoRecover":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/AutoRecover","kind":"field","type":"*bool","span":{"start":[1124,1],"end":[1124,41],"bytes":[34264,34304]}},"Bucket":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Bucket","kind":"field","type":"string","span":{"start":[1130,1],"end":[1130,46],"bytes":[34478,34523]}},"ClientCert":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/ClientCert","kind":"field","type":"string","span":{"start":[1176,1],"end":[1176,51],"bytes":[36312,36362]}},"ClientKey":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/ClientKey","kind":"field","type":"string","span":{"start":[1177,1],"end":[1177,50],"bytes":[36363,36412]}},"Concurrency":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Concurrency","kind":"field","type":"*int","span":{"start":[1139,1],"end":[1139,51],"bytes":[34952,35002]}},"ConcurrentWrites":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/ConcurrentWrites","kind":"field","type":"*bool","span":{"start":[1159,1],"end":[1159,52],"bytes":[35678,35729]}},"Creds":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Creds","kind":"field","type":"string","span":{"start":[1170,1],"end":[1170,45],"bytes":[36039,36083]}},"Endpoint":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Endpoint","kind":"field","type":"string","span":{"start":[1131,1],"end":[1131,48],"bytes":[34524,34571]}},"ForcePathStyle":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/ForcePathStyle","kind":"field","type":"*bool","span":{"start":[1132,1],"end":[1132,56],"bytes":[34572,34627]}},"Host":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Host","kind":"field","type":"string","span":{"start":[1155,1],"end":[1155,39],"bytes":[35514,35552]}},"HostKey":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/HostKey","kind":"field","type":"string","span":{"start":[1160,1],"end":[1160,43],"bytes":[35730,35772]}},"JWT":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/JWT","kind":"field","type":"string","span":{"start":[1168,1],"end":[1168,43],"bytes":[35952,35994]}},"KeyPath":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/KeyPath","kind":"field","type":"string","span":{"start":[1158,1],"end":[1158,43],"bytes":[35635,35677]}},"MaxReconnects":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/MaxReconnects","kind":"field","type":"*int","span":{"start":[1178,1],"end":[1178,54],"bytes":[36413,36466]}},"MaxSyncLTXFiles":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/MaxSyncLTXFiles","kind":"field","type":"*int","span":{"start":[1119,1],"end":[1119,50],"bytes":[33992,34041]}},"NKey":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/NKey","kind":"field","type":"string","span":{"start":[1171,1],"end":[1171,44],"bytes":[36084,36127]}},"PartSize":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/PartSize","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream.ByteSize","span":{"start":[1138,1],"end":[1138,49],"bytes":[34903,34951]}},"Password":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Password","kind":"field","type":"string","span":{"start":[1157,1],"end":[1157,43],"bytes":[35592,35634]}},"ReconnectWait":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/ReconnectWait","kind":"field","type":"*time.Duration","span":{"start":[1179,1],"end":[1179,54],"bytes":[36467,36520]}},"Region":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Region","kind":"field","type":"string","span":{"start":[1129,1],"end":[1129,46],"bytes":[34432,34477]}},"RequireContentMD5":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/RequireContentMD5","kind":"field","type":"*bool","span":{"start":[1135,1],"end":[1135,59],"bytes":[34740,34798]}},"RootCAs":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/RootCAs","kind":"field","type":"[]string","span":{"start":[1175,1],"end":[1175,48],"bytes":[36264,36311]}},"SASToken":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SASToken","kind":"field","type":"string","span":{"start":[1152,1],"end":[1152,39],"bytes":[35456,35494]}},"SSECustomerAlgorithm":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SSECustomerAlgorithm","kind":"field","type":"string","span":{"start":[1142,1],"end":[1142,61],"bytes":[35066,35126]}},"SSECustomerKey":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SSECustomerKey","kind":"field","type":"string","span":{"start":[1143,1],"end":[1143,55],"bytes":[35127,35181]}},"SSECustomerKeyPath":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SSECustomerKeyPath","kind":"field","type":"string","span":{"start":[1144,1],"end":[1144,60],"bytes":[35182,35241]}},"SSEKMSKeyID":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SSEKMSKeyID","kind":"field","type":"string","span":{"start":[1147,1],"end":[1147,44],"bytes":[35311,35354]}},"SecretAccessKey":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SecretAccessKey","kind":"field","type":"string","span":{"start":[1128,1],"end":[1128,57],"bytes":[34375,34431]}},"Seed":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Seed","kind":"field","type":"string","span":{"start":[1169,1],"end":[1169,44],"bytes":[35995,36038]}},"SignAcceptEncoding":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SignAcceptEncoding","kind":"field","type":"*bool","span":{"start":[1134,1],"end":[1134,60],"bytes":[34680,34739]}},"SignPayload":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SignPayload","kind":"field","type":"*bool","span":{"start":[1133,1],"end":[1133,52],"bytes":[34628,34679]}},"SkipVerify":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SkipVerify","kind":"field","type":"bool","span":{"start":[1136,1],"end":[1136,51],"bytes":[34799,34849]}},"StorageClass":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/StorageClass","kind":"field","type":"string","span":{"start":[1137,1],"end":[1137,53],"bytes":[34850,34902]}},"SyncInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/SyncInterval","kind":"field","type":"*time.Duration","span":{"start":[1114,1],"end":[1114,58],"bytes":[33748,33805]}},"TLS":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/TLS","kind":"field","type":"*bool","span":{"start":[1174,1],"end":[1174,43],"bytes":[36221,36263]}},"Timeout":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Timeout","kind":"field","type":"*time.Duration","span":{"start":[1180,1],"end":[1180,47],"bytes":[36521,36567]}},"Token":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Token","kind":"field","type":"string","span":{"start":[1173,1],"end":[1173,45],"bytes":[36176,36220]}},"User":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/User","kind":"field","type":"string","span":{"start":[1156,1],"end":[1156,39],"bytes":[35553,35591]}},"Username":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/Username","kind":"field","type":"string","span":{"start":[1172,1],"end":[1172,48],"bytes":[36128,36175]}},"ValidationInterval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/ValidationInterval","kind":"field","type":"*time.Duration","span":{"start":[1115,1],"end":[1115,64],"bytes":[33806,33869]}},"WebDAVPassword":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/WebDAVPassword","kind":"field","type":"string","span":{"start":[1165,1],"end":[1165,48],"bytes":[35885,35932]}},"WebDAVURL":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/WebDAVURL","kind":"field","type":"string","span":{"start":[1163,1],"end":[1163,43],"bytes":[35794,35836]}},"WebDAVUsername":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/WebDAVUsername","kind":"field","type":"string","span":{"start":[1164,1],"end":[1164,48],"bytes":[35837,35884]}}}},"RetentionConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.RetentionConfig","kind":"struct","span":{"start":[334,1],"end":[336,2],"bytes":[9619,9682]},"callables":{},"fields":{"Enabled":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.RetentionConfig/Enabled","kind":"field","type":"*bool","span":{"start":[335,1],"end":[335,32],"bytes":[9649,9680]}}}},"SnapshotConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.SnapshotConfig","kind":"struct","span":{"start":[328,1],"end":[331,2],"bytes":[9436,9555]},"callables":{},"fields":{"Interval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.SnapshotConfig/Interval","kind":"field","type":"*time.Duration","span":{"start":[329,1],"end":[329,44],"bytes":[9465,9508]}},"Retention":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.SnapshotConfig/Retention","kind":"field","type":"*time.Duration","span":{"start":[330,1],"end":[330,45],"bytes":[9509,9553]}}}},"ValidationConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ValidationConfig","kind":"struct","span":{"start":[339,1],"end":[341,2],"bytes":[9743,9818]},"callables":{},"fields":{"Interval":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ValidationConfig/Interval","kind":"field","type":"*time.Duration","span":{"start":[340,1],"end":[340,43],"bytes":[9774,9816]}}}},"boolSetting":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting","kind":"struct","span":{"start":[2067,1],"end":[2070,2],"bytes":[61282,61333]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault","kind":"method","span":{"start":[2081,1],"end":[2085,2],"bytes":[61506,61590]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault","parameters":[{"name":"value","type":"bool","span":{"start":[2081,1],"end":[2081,49],"bytes":[61506,61554]}}],"metrics":{"cyclomatic":2},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set","kind":"method","span":{"start":[2076,1],"end":[2079,2],"bytes":[61432,61504]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set","parameters":[{"name":"value","type":"bool","span":{"start":[2076,1],"end":[2076,40],"bytes":[61432,61471]}}],"metrics":{"cyclomatic":1},"body":{}}},"fields":{"set":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/set","kind":"field","type":"bool","span":{"start":[2069,1],"end":[2069,12],"bytes":[61320,61331]}},"value":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/value","kind":"field","type":"bool","span":{"start":[2068,1],"end":[2068,12],"bytes":[61308,61319]}}}},"levelVar":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.levelVar","kind":"struct","span":{"start":[2183,1],"end":[2183,18],"bytes":[64500,64517]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.levelVar.Set":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.levelVar/github.com/benbjohnson/litestream/cmd/litestream.levelVar.Set","kind":"method","span":{"start":[2194,1],"end":[2208,2],"bytes":[64665,65048]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.levelVar.Set","parameters":[{"name":"s","type":"string","span":{"start":[2194,1],"end":[2194,41],"bytes":[64665,64705]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"2199:12":{"kind":"call","span":{"start":[2199,12],"end":[2199,27],"bytes":[64766,64781]},"callee":null},"2201:10":{"kind":"call","span":{"start":[2201,10],"end":[2201,88],"bytes":[64808,64886]},"callee":null},"2204:10":{"kind":"call","span":{"start":[2204,10],"end":[2204,80],"bytes":[64943,65013]},"callee":null},"2206:7":{"kind":"call","span":{"start":[2206,7],"end":[2206,18],"bytes":[65023,65034]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.levelVar.String":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.levelVar/github.com/benbjohnson/litestream/cmd/litestream.levelVar.String","kind":"method","span":{"start":[2187,1],"end":[2192,2],"bytes":[64556,64663]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.levelVar.String","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{"2191:22":{"kind":"call","span":{"start":[2191,22],"end":[2191,29],"bytes":[64653,64660]},"callee":null},"2191:9":{"kind":"call","span":{"start":[2191,9],"end":[2191,30],"bytes":[64640,64661]},"callee":null}}}}},"txidVar":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.txidVar","kind":"struct","span":{"start":[2158,1],"end":[2158,22],"bytes":[63835,63856]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.txidVar.Set":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.txidVar/github.com/benbjohnson/litestream/cmd/litestream.txidVar.Set","kind":"method","span":{"start":[2169,1],"end":[2176,2],"bytes":[64110,64277]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.txidVar.Set","parameters":[{"name":"s","type":"string","span":{"start":[2169,1],"end":[2169,40],"bytes":[64110,64149]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"2170:15":{"kind":"call","span":{"start":[2170,15],"end":[2170,31],"bytes":[64164,64180]},"callee":null},"2172:10":{"kind":"call","span":{"start":[2172,10],"end":[2172,43],"bytes":[64207,64240]},"callee":null},"2174:7":{"kind":"call","span":{"start":[2174,7],"end":[2174,20],"bytes":[64250,64263]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.txidVar.String":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.txidVar/github.com/benbjohnson/litestream/cmd/litestream.txidVar.String","kind":"method","span":{"start":[2164,1],"end":[2166,2],"bytes":[63983,64050]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.txidVar.String","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{"2165:9":{"kind":"call","span":{"start":[2165,9],"end":[2165,21],"bytes":[64027,64039]},"callee":null}}}}},"usageError":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.usageError","kind":"struct","span":{"start":[107,1],"end":[110,2],"bytes":[3201,3259]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.usageError.Error":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.usageError/github.com/benbjohnson/litestream/cmd/litestream.usageError.Error","kind":"method","span":{"start":[112,1],"end":[114,2],"bytes":[3261,3318]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.usageError.Error","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}}},"fields":{"hint":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.usageError/hint","kind":"field","type":"string","span":{"start":[109,1],"end":[109,16],"bytes":[3242,3257]}},"message":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.usageError/message","kind":"field","type":"string","span":{"start":[108,1],"end":[108,16],"bytes":[3226,3241]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig","kind":"function","span":{"start":[393,1],"end":[416,2],"bytes":[11354,12395]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig","parameters":[],"return_type":"github.com/benbjohnson/litestream/cmd/litestream.Config","metrics":{"cyclomatic":1},"body":{"410:29":{"kind":"call","span":{"start":[410,29],"end":[410,61],"bytes":[12131,12163]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DefaultSocketConfig"}}},"github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","kind":"function","span":{"start":[2098,1],"end":[2103,2],"bytes":[61937,62063]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{"2099:10":{"kind":"call","span":{"start":[2099,10],"end":[2099,40],"bytes":[61980,62010]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases","kind":"function","span":{"start":[1014,1],"end":[1048,2],"bytes":[31194,31886]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases","parameters":[{"name":"dir","type":"string","span":{"start":[1014,1],"end":[1014,89],"bytes":[31194,31282]}},{"name":"pattern","type":"string","span":{"start":[1014,1],"end":[1014,89],"bytes":[31194,31282]}},{"name":"recursive","type":"bool","span":{"start":[1014,1],"end":[1014,89],"bytes":[31194,31282]}}],"return_type":"([]string, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"1017:9":{"kind":"call","span":{"start":[1017,9],"end":[1045,4],"bytes":[31314,31862]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases/github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases.closure_1","kind":"function","span":{"start":[1017,1],"end":[1045,4],"bytes":[31306,31862]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases.closure_1","parameters":[{"name":"path","type":"string","span":{"start":[1017,1],"end":[1017,82],"bytes":[31306,31387]}},{"name":"info","type":"os.FileInfo","span":{"start":[1017,1],"end":[1017,82],"bytes":[31306,31387]}},{"name":"err","type":"error","span":{"start":[1017,1],"end":[1017,82],"bytes":[31306,31387]}}],"return_type":"error","error_channel":["error"],"body":{"1023:6":{"kind":"call","span":{"start":[1023,6],"end":[1023,18],"bytes":[31469,31481]},"callee":null},"1031:19":{"kind":"call","span":{"start":[1031,19],"end":[1031,63],"bytes":[31623,31667]},"callee":null},"1031:43":{"kind":"call","span":{"start":[1031,43],"end":[1031,62],"bytes":[31647,31666]},"callee":null},"1040:6":{"kind":"call","span":{"start":[1040,6],"end":[1040,28],"bytes":[31781,31803]},"callee":null},"1041:14":{"kind":"call","span":{"start":[1041,14],"end":[1041,35],"bytes":[31819,31840]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.IsSQLiteDatabase":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.IsSQLiteDatabase","kind":"function","span":{"start":[1052,1],"end":[1066,2],"bytes":[31994,32312]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.IsSQLiteDatabase","parameters":[{"name":"path","type":"string","span":{"start":[1052,1],"end":[1052,42],"bytes":[31994,32035]}}],"return_type":"bool","metrics":{"cyclomatic":3},"body":{"1053:15":{"kind":"call","span":{"start":[1053,15],"end":[1053,28],"bytes":[32050,32063]},"callee":null},"1057:8":{"kind":"call","span":{"start":[1057,8],"end":[1057,20],"bytes":[32106,32118]},"callee":null},"1060:12":{"kind":"call","span":{"start":[1060,12],"end":[1060,28],"bytes":[32181,32197]},"callee":null},"1061:15":{"kind":"call","span":{"start":[1061,15],"end":[1061,32],"bytes":[32212,32229]},"callee":null},"1065:9":{"kind":"call","span":{"start":[1065,9],"end":[1065,23],"bytes":[32271,32285]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","kind":"function","span":{"start":[745,1],"end":[812,2],"bytes":[22735,24597]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","parameters":[{"name":"dbc","type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[745,1],"end":[745,62],"bytes":[22735,22796]}}],"return_type":"(*github.com/benbjohnson/litestream.DB, error)","error_channel":["error"],"metrics":{"cyclomatic":17},"body":{"747:15":{"kind":"call","span":{"start":[747,15],"end":[747,73],"bytes":[22836,22894]},"callee":null},"750:21":{"kind":"call","span":{"start":[750,21],"end":[750,37],"bytes":[22919,22935]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"756:8":{"kind":"call","span":{"start":[756,8],"end":[756,36],"bytes":[23023,23051]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB"},"760:28":{"kind":"call","span":{"start":[760,28],"end":[760,49],"bytes":[23176,23197]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"762:16":{"kind":"call","span":{"start":[762,16],"end":[762,65],"bytes":[23231,23280]},"callee":null},"765:3":{"kind":"call","span":{"start":[765,3],"end":[765,35],"bytes":[23322,23354]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetMetaPath"},"790:29":{"kind":"call","span":{"start":[790,29],"end":[790,46],"bytes":[24038,24055]},"callee":null},"791:15":{"kind":"call","span":{"start":[791,15],"end":[791,62],"bytes":[24076,24123]},"callee":null},"792:29":{"kind":"call","span":{"start":[792,29],"end":[792,46],"bytes":[24152,24169]},"callee":null},"793:15":{"kind":"call","span":{"start":[793,15],"end":[793,82],"bytes":[24189,24256]},"callee":null},"794:7":{"kind":"call","span":{"start":[794,7],"end":[794,24],"bytes":[24263,24280]},"callee":null},"795:15":{"kind":"call","span":{"start":[795,15],"end":[795,91],"bytes":[24300,24376]},"callee":null},"805:12":{"kind":"call","span":{"start":[805,12],"end":[805,40],"bytes":[24496,24524]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig"}}},"github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","kind":"function","span":{"start":[815,1],"end":[864,2],"bytes":[24703,26250]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","parameters":[{"name":"dbc","type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[815,1],"end":[815,74],"bytes":[24703,24776]}}],"return_type":"([]*github.com/benbjohnson/litestream.DB, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"817:15":{"kind":"call","span":{"start":[817,15],"end":[817,81],"bytes":[24811,24877]},"callee":null},"821:15":{"kind":"call","span":{"start":[821,15],"end":[821,74],"bytes":[24920,24979]},"callee":null},"824:15":{"kind":"call","span":{"start":[824,15],"end":[824,75],"bytes":[25045,25105]},"callee":null},"827:18":{"kind":"call","span":{"start":[827,18],"end":[827,33],"bytes":[25127,25142]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"833:18":{"kind":"call","span":{"start":[833,18],"end":[833,74],"bytes":[25246,25302]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases"},"835:15":{"kind":"call","span":{"start":[835,15],"end":[835,74],"bytes":[25334,25393]},"callee":null},"838:5":{"kind":"call","span":{"start":[838,5],"end":[838,17],"bytes":[25402,25414]},"callee":null},"839:15":{"kind":"call","span":{"start":[839,15],"end":[839,108],"bytes":[25450,25543]},"callee":null},"844:15":{"kind":"call","span":{"start":[844,15],"end":[844,38],"bytes":[25636,25659]},"callee":null},"847:14":{"kind":"call","span":{"start":[847,14],"end":[847,59],"bytes":[25708,25753]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry"},"849:16":{"kind":"call","span":{"start":[849,16],"end":[849,73],"bytes":[25787,25844]},"callee":null},"853:12":{"kind":"call","span":{"start":[853,12],"end":[853,25],"bytes":[25932,25945]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MetaPath"},"855:17":{"kind":"call","span":{"start":[855,17],"end":[855,158],"bytes":[26026,26167]},"callee":null},"860:9":{"kind":"call","span":{"start":[860,9],"end":[860,24],"bytes":[26212,26227]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.NewMain":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewMain","kind":"function","span":{"start":[120,1],"end":[122,2],"bytes":[3430,3470]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewMain","parameters":[],"return_type":"*github.com/benbjohnson/litestream/cmd/litestream.Main","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","kind":"function","span":{"start":[1350,1],"end":[1418,2],"bytes":[40262,42418]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1350,1],"end":[1350,100],"bytes":[40262,40361]}},{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[1350,1],"end":[1350,100],"bytes":[40262,40361]}}],"return_type":"(*github.com/benbjohnson/litestream.Replica, error)","error_channel":["error"],"metrics":{"cyclomatic":24},"body":{"1352:5":{"kind":"call","span":{"start":[1352,5],"end":[1352,29],"bytes":[40411,40435]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL"},"1353:15":{"kind":"call","span":{"start":[1353,15],"end":[1353,105],"bytes":[40452,40542]},"callee":null},"1361:34":{"kind":"call","span":{"start":[1361,34],"end":[1361,55],"bytes":[40936,40957]},"callee":null},"1361:5":{"kind":"call","span":{"start":[1361,5],"end":[1361,26],"bytes":[40907,40928]},"callee":null},"1362:15":{"kind":"call","span":{"start":[1362,15],"end":[1362,134],"bytes":[40978,41097]},"callee":null},"1366:7":{"kind":"call","span":{"start":[1366,7],"end":[1366,32],"bytes":[41127,41152]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica"},"1378:9":{"kind":"call","span":{"start":[1378,9],"end":[1378,24],"bytes":[41393,41408]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType"},"1380:22":{"kind":"call","span":{"start":[1380,22],"end":[1380,58],"bytes":[41446,41482]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig"},"1384:22":{"kind":"call","span":{"start":[1384,22],"end":[1384,56],"bytes":[41553,41587]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig"},"1388:22":{"kind":"call","span":{"start":[1388,22],"end":[1388,56],"bytes":[41658,41692]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig"},"1392:22":{"kind":"call","span":{"start":[1392,22],"end":[1392,57],"bytes":[41764,41799]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newABSReplicaClientFromConfig"},"1396:22":{"kind":"call","span":{"start":[1396,22],"end":[1396,58],"bytes":[41872,41908]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newSFTPReplicaClientFromConfig"},"1400:22":{"kind":"call","span":{"start":[1400,22],"end":[1400,60],"bytes":[41983,42021]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newWebDAVReplicaClientFromConfig"},"1404:22":{"kind":"call","span":{"start":[1404,22],"end":[1404,58],"bytes":[42094,42130]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig"},"1408:22":{"kind":"call","span":{"start":[1408,22],"end":[1408,57],"bytes":[42202,42237]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig"},"1412:15":{"kind":"call","span":{"start":[1412,15],"end":[1412,80],"bytes":[42299,42364]},"callee":null},"1412:64":{"kind":"call","span":{"start":[1412,64],"end":[1412,79],"bytes":[42348,42363]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType"},"1415:2":{"kind":"call","span":{"start":[1415,2],"end":[1415,32],"bytes":[42370,42400]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.SetLogger"},"1415:21":{"kind":"call","span":{"start":[1415,21],"end":[1415,31],"bytes":[42389,42399]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger"}}},"github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","kind":"function","span":{"start":[1453,1],"end":[1716,2],"bytes":[43507,51740]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1453,1],"end":[1453,110],"bytes":[43507,43616]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1453,1],"end":[1453,110],"bytes":[43507,43616]}}],"return_type":"(*github.com/benbjohnson/litestream/s3.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":53},"body":{"1456:15":{"kind":"call","span":{"start":[1456,15],"end":[1456,69],"bytes":[43724,43778]},"callee":null},"1458:15":{"kind":"call","span":{"start":[1458,15],"end":[1458,71],"bytes":[43836,43892]},"callee":null},"1464:17":{"kind":"call","span":{"start":[1464,17],"end":[1464,37],"bytes":[44053,44073]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting"},"1466:3":{"kind":"call","span":{"start":[1466,3],"end":[1466,22],"bytes":[44111,44130]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set"},"1468:31":{"kind":"call","span":{"start":[1468,31],"end":[1468,51],"bytes":[44164,44184]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting"},"1470:3":{"kind":"call","span":{"start":[1470,3],"end":[1470,36],"bytes":[44229,44262]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set"},"1472:20":{"kind":"call","span":{"start":[1472,20],"end":[1472,40],"bytes":[44285,44305]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting"},"1474:3":{"kind":"call","span":{"start":[1474,3],"end":[1474,25],"bytes":[44349,44371]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set"},"1504:36":{"kind":"call","span":{"start":[1504,36],"end":[1504,78],"bytes":[45149,45191]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery"},"1516:6":{"kind":"call","span":{"start":[1516,6],"end":[1516,37],"bytes":[45354,45385]},"callee":null},"1518:14":{"kind":"call","span":{"start":[1518,14],"end":[1518,46],"bytes":[45419,45451]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegionFromS3ARN"},"1520:51":{"kind":"call","span":{"start":[1520,51],"end":[1520,69],"bytes":[45513,45531]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost"},"1524:19":{"kind":"call","span":{"start":[1524,19],"end":[1524,40],"bytes":[45603,45624]},"callee":null},"1526:19":{"kind":"call","span":{"start":[1526,19],"end":[1526,61],"bytes":[45749,45791]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme"},"1529:7":{"kind":"call","span":{"start":[1529,7],"end":[1529,34],"bytes":[45903,45930]},"callee":null},"1534:17":{"kind":"call","span":{"start":[1534,17],"end":[1534,36],"bytes":[46021,46040]},"callee":null},"1537:25":{"kind":"call","span":{"start":[1537,25],"end":[1537,52],"bytes":[46107,46134]},"callee":null},"1540:21":{"kind":"call","span":{"start":[1540,21],"end":[1540,44],"bytes":[46231,46254]},"callee":null},"1543:15":{"kind":"call","span":{"start":[1543,15],"end":[1543,78],"bytes":[46332,46395]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"1547:15":{"kind":"call","span":{"start":[1547,15],"end":[1547,93],"bytes":[46466,46544]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"1551:15":{"kind":"call","span":{"start":[1551,15],"end":[1551,91],"bytes":[46629,46705]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"1555:11":{"kind":"call","span":{"start":[1555,11],"end":[1555,36],"bytes":[46784,46809]},"callee":null},"1557:18":{"kind":"call","span":{"start":[1557,18],"end":[1557,44],"bytes":[46859,46885]},"callee":null},"1560:20":{"kind":"call","span":{"start":[1560,20],"end":[1560,76],"bytes":[46941,46997]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue"},"1566:20":{"kind":"call","span":{"start":[1566,20],"end":[1566,66],"bytes":[47111,47157]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue"},"1593:4":{"kind":"call","span":{"start":[1593,4],"end":[1593,33],"bytes":[47684,47713]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set"},"1596:4":{"kind":"call","span":{"start":[1596,4],"end":[1596,54],"bytes":[47785,47835]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set"},"1599:4":{"kind":"call","span":{"start":[1599,4],"end":[1599,42],"bytes":[47895,47933]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set"},"1605:15":{"kind":"call","span":{"start":[1605,15],"end":[1605,59],"bytes":[48013,48057]},"callee":null},"1610:15":{"kind":"call","span":{"start":[1610,15],"end":[1610,53],"bytes":[48236,48274]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsHetznerEndpoint"},"1611:14":{"kind":"call","span":{"start":[1611,14],"end":[1611,51],"bytes":[48288,48325]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsTigrisEndpoint"},"1612:37":{"kind":"call","span":{"start":[1612,37],"end":[1612,76],"bytes":[48362,48401]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsTigrisEndpoint"},"1615:20":{"kind":"call","span":{"start":[1615,20],"end":[1615,63],"bytes":[48444,48487]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsDigitalOceanEndpoint"},"1616:17":{"kind":"call","span":{"start":[1616,17],"end":[1616,57],"bytes":[48504,48544]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsBackblazeEndpoint"},"1617:16":{"kind":"call","span":{"start":[1617,16],"end":[1617,55],"bytes":[48560,48599]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsFilebaseEndpoint"},"1618:16":{"kind":"call","span":{"start":[1618,16],"end":[1618,55],"bytes":[48615,48654]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsScalewayEndpoint"},"1619:13":{"kind":"call","span":{"start":[1619,13],"end":[1619,49],"bytes":[48667,48703]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsMinIOEndpoint"},"1620:20":{"kind":"call","span":{"start":[1620,20],"end":[1620,63],"bytes":[48723,48766]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsCloudflareR2Endpoint"},"1621:16":{"kind":"call","span":{"start":[1621,16],"end":[1621,55],"bytes":[48782,48821]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsSupabaseEndpoint"},"1630:3":{"kind":"call","span":{"start":[1630,3],"end":[1630,33],"bytes":[49163,49193]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault"},"1631:3":{"kind":"call","span":{"start":[1631,3],"end":[1631,37],"bytes":[49196,49230]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault"},"1635:3":{"kind":"call","span":{"start":[1635,3],"end":[1635,33],"bytes":[49438,49468]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault"},"1645:12":{"kind":"call","span":{"start":[1645,12],"end":[1645,33],"bytes":[49691,49712]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient"},"1673:24":{"kind":"call","span":{"start":[1673,24],"end":[1673,41],"bytes":[50508,50525]},"callee":null},"1676:21":{"kind":"call","span":{"start":[1676,21],"end":[1676,39],"bytes":[50573,50591]},"callee":null},"1693:7":{"kind":"call","span":{"start":[1693,7],"end":[1693,38],"bytes":[51092,51123]},"callee":null},"1694:18":{"kind":"call","span":{"start":[1694,18],"end":[1694,34],"bytes":[51143,51159]},"callee":null},"1696:18":{"kind":"call","span":{"start":[1696,18],"end":[1696,95],"bytes":[51197,51274]},"callee":null},"1700:20":{"kind":"call","span":{"start":[1700,20],"end":[1700,40],"bytes":[51338,51358]},"callee":null},"1702:17":{"kind":"call","span":{"start":[1702,17],"end":[1702,98],"bytes":[51394,51475]},"callee":null},"1704:28":{"kind":"call","span":{"start":[1704,28],"end":[1704,62],"bytes":[51508,51542]},"callee":null},"1704:46":{"kind":"call","span":{"start":[1704,46],"end":[1704,61],"bytes":[51526,51541]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.OpenConfigFile":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.OpenConfigFile","kind":"function","span":{"start":[598,1],"end":[614,2],"bytes":[18049,18433]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.OpenConfigFile","parameters":[{"name":"filename","type":"string","span":{"start":[598,1],"end":[598,62],"bytes":[18049,18110]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"600:19":{"kind":"call","span":{"start":[600,19],"end":[600,35],"bytes":[18164,18180]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"606:12":{"kind":"call","span":{"start":[606,12],"end":[606,29],"bytes":[18260,18277]},"callee":null},"607:5":{"kind":"call","span":{"start":[607,5],"end":[607,23],"bytes":[18282,18300]},"callee":null},"608:15":{"kind":"call","span":{"start":[608,15],"end":[608,68],"bytes":[18317,18370]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ParseByteSize":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseByteSize","kind":"function","span":{"start":[1091,1],"end":[1109,2],"bytes":[33075,33569]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ParseByteSize","parameters":[{"name":"s","type":"string","span":{"start":[1091,1],"end":[1091,46],"bytes":[33075,33120]}}],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1092:6":{"kind":"call","span":{"start":[1092,6],"end":[1092,26],"bytes":[33126,33146]},"callee":null},"1094:13":{"kind":"call","span":{"start":[1094,13],"end":[1094,44],"bytes":[33173,33204]},"callee":null},"1098:16":{"kind":"call","span":{"start":[1098,16],"end":[1098,38],"bytes":[33274,33296]},"callee":null},"1100:13":{"kind":"call","span":{"start":[1100,13],"end":[1100,55],"bytes":[33326,33368]},"callee":null},"1105:13":{"kind":"call","span":{"start":[1105,13],"end":[1105,98],"bytes":[33452,33537]},"callee":null},"1105:77":{"kind":"call","span":{"start":[1105,77],"end":[1105,97],"bytes":[33516,33536]},"callee":null},"1108:9":{"kind":"call","span":{"start":[1108,9],"end":[1108,21],"bytes":[33550,33562]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ParseConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","kind":"function","span":{"start":[630,1],"end":[714,2],"bytes":[18928,21265]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","parameters":[{"name":"r","type":"io.Reader","span":{"start":[630,1],"end":[630,70],"bytes":[18928,18997]}},{"name":"expandEnv","type":"bool","span":{"start":[630,1],"end":[630,70],"bytes":[18928,18997]}}],"return_type":"(github.com/benbjohnson/litestream/cmd/litestream.Config, error)","error_channel":["error"],"metrics":{"cyclomatic":17},"body":{"631:12":{"kind":"call","span":{"start":[631,12],"end":[631,27],"bytes":[19009,19024]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig"},"634:14":{"kind":"call","span":{"start":[634,14],"end":[634,27],"bytes":[19063,19076]},"callee":null},"641:16":{"kind":"call","span":{"start":[641,16],"end":[646,5],"bytes":[19196,19337]},"callee":null},"641:26":{"kind":"call","span":{"start":[641,26],"end":[641,37],"bytes":[19206,19217]},"callee":null},"641:9":{"kind":"call","span":{"start":[641,9],"end":[646,6],"bytes":[19189,19338]},"callee":null},"652:12":{"kind":"call","span":{"start":[652,12],"end":[652,37],"bytes":[19420,19445]},"callee":null},"664:12":{"kind":"call","span":{"start":[664,12],"end":[664,40],"bytes":[19919,19947]},"callee":null},"681:12":{"kind":"call","span":{"start":[681,12],"end":[681,95],"bytes":[20460,20543]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.applyDBSnapshotConfig"},"690:27":{"kind":"call","span":{"start":[690,27],"end":[690,48],"bytes":[20712,20733]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"696:2":{"kind":"call","span":{"start":[696,2],"end":[696,34],"bytes":[20844,20876]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.propagateGlobalSettings"},"699:12":{"kind":"call","span":{"start":[699,12],"end":[699,29],"bytes":[20916,20933]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.Validate"},"708:10":{"kind":"call","span":{"start":[708,10],"end":[708,32],"bytes":[21084,21106]},"callee":null},"711:2":{"kind":"call","span":{"start":[711,2],"end":[711,95],"bytes":[21149,21242]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig.closure_1","kind":"function","span":{"start":[641,1],"end":[646,6],"bytes":[19181,19338]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ParseConfig.closure_1","parameters":[{"name":"key","type":"string","span":{"start":[641,1],"end":[641,64],"bytes":[19181,19244]}}],"return_type":"string","body":{"643:12":{"kind":"call","span":{"start":[643,12],"end":[643,37],"bytes":[19277,19302]},"callee":null},"643:25":{"kind":"call","span":{"start":[643,25],"end":[643,36],"bytes":[19290,19301]},"callee":null},"645:11":{"kind":"call","span":{"start":[645,11],"end":[645,25],"bytes":[19318,19332]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","kind":"function","span":{"start":[618,1],"end":[626,2],"bytes":[18589,18799]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","parameters":[{"name":"filename","type":"string","span":{"start":[618,1],"end":[618,71],"bytes":[18589,18659]}},{"name":"expandEnv","type":"bool","span":{"start":[618,1],"end":[618,71],"bytes":[18589,18659]}}],"return_type":"(github.com/benbjohnson/litestream/cmd/litestream.Config, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"619:12":{"kind":"call","span":{"start":[619,12],"end":[619,36],"bytes":[18671,18695]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.OpenConfigFile"},"621:10":{"kind":"call","span":{"start":[621,10],"end":[621,25],"bytes":[18722,18737]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig"},"623:8":{"kind":"call","span":{"start":[623,8],"end":[623,17],"bytes":[18753,18762]},"callee":null},"625:9":{"kind":"call","span":{"start":[625,9],"end":[625,34],"bytes":[18772,18797]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig"}}},"github.com/benbjohnson/litestream/cmd/litestream.StripSQLitePrefix":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.StripSQLitePrefix","kind":"function","span":{"start":[2145,1],"end":[2155,2],"bytes":[63510,63754]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StripSQLitePrefix","parameters":[{"name":"s","type":"string","span":{"start":[2145,1],"end":[2145,42],"bytes":[63510,63551]}}],"return_type":"string","metrics":{"cyclomatic":4},"body":{"2146:5":{"kind":"call","span":{"start":[2146,5],"end":[2146,11],"bytes":[63556,63562]},"callee":null},"2150:6":{"kind":"call","span":{"start":[2150,6],"end":[2150,34],"bytes":[63665,63693]},"callee":null},"2151:11":{"kind":"call","span":{"start":[2151,11],"end":[2151,40],"bytes":[63706,63735]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.appendRelativePathToURL":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.appendRelativePathToURL","kind":"function","span":{"start":[994,1],"end":[1010,2],"bytes":[30725,31084]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.appendRelativePathToURL","parameters":[{"name":"u","type":"*net/url.URL","span":{"start":[994,1],"end":[994,59],"bytes":[30725,30783]}},{"name":"relPath","type":"string","span":{"start":[994,1],"end":[994,59],"bytes":[30725,30783]}}],"metrics":{"cyclomatic":3},"body":{"1005:12":{"kind":"call","span":{"start":[1005,12],"end":[1005,41],"bytes":[30984,31013]},"callee":null},"1008:17":{"kind":"call","span":{"start":[1008,17],"end":[1008,48],"bytes":[31034,31065]},"callee":null},"995:14":{"kind":"call","span":{"start":[995,14],"end":[995,46],"bytes":[30797,30829]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv","kind":"function","span":{"start":[2054,1],"end":[2065,2],"bytes":[60921,61280]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv","parameters":[],"metrics":{"cyclomatic":5},"body":{"2055:14":{"kind":"call","span":{"start":[2055,14],"end":[2055,54],"bytes":[60962,61002]},"callee":null},"2056:15":{"kind":"call","span":{"start":[2056,15],"end":[2056,48],"bytes":[61023,61056]},"callee":null},"2057:4":{"kind":"call","span":{"start":[2057,4],"end":[2057,37],"bytes":[61067,61100]},"callee":null},"2060:14":{"kind":"call","span":{"start":[2060,14],"end":[2060,58],"bytes":[61121,61165]},"callee":null},"2061:15":{"kind":"call","span":{"start":[2061,15],"end":[2061,52],"bytes":[61186,61223]},"callee":null},"2062:4":{"kind":"call","span":{"start":[2062,4],"end":[2062,41],"bytes":[61234,61271]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath","kind":"function","span":{"start":[932,1],"end":[972,2],"bytes":[28919,29940]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath","parameters":[{"name":"base","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[932,1],"end":[932,103],"bytes":[28919,29021]}},{"name":"relPath","type":"string","span":{"start":[932,1],"end":[932,103],"bytes":[28919,29021]}}],"return_type":"(*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig, error)","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"938:12":{"kind":"call","span":{"start":[938,12],"end":[938,37],"bytes":[29095,29120]},"callee":null},"944:13":{"kind":"call","span":{"start":[944,13],"end":[944,39],"bytes":[29230,29256]},"callee":null},"946:16":{"kind":"call","span":{"start":[946,16],"end":[946,56],"bytes":[29290,29330]},"callee":null},"948:3":{"kind":"call","span":{"start":[948,3],"end":[948,38],"bytes":[29337,29372]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.appendRelativePathToURL"},"949:21":{"kind":"call","span":{"start":[949,21],"end":[949,31],"bytes":[29393,29403]},"callee":null},"953:9":{"kind":"call","span":{"start":[953,9],"end":[953,27],"bytes":[29443,29461]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType"},"955:16":{"kind":"call","span":{"start":[955,16],"end":[955,43],"bytes":[29493,29520]},"callee":null},"957:23":{"kind":"call","span":{"start":[957,23],"end":[957,65],"bytes":[29573,29615]},"callee":null},"963:15":{"kind":"call","span":{"start":[963,15],"end":[963,49],"bytes":[29756,29790]},"callee":null},"965:23":{"kind":"call","span":{"start":[965,23],"end":[965,51],"bytes":[29835,29863]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.deriveMetaPathForDirectoryEntry":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.deriveMetaPathForDirectoryEntry","kind":"function","span":{"start":[977,1],"end":[990,2],"bytes":[30181,30587]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.deriveMetaPathForDirectoryEntry","parameters":[{"name":"basePath","type":"string","span":{"start":[977,1],"end":[977,72],"bytes":[30181,30252]}},{"name":"relPath","type":"string","span":{"start":[977,1],"end":[977,72],"bytes":[30181,30252]}}],"return_type":"string","metrics":{"cyclomatic":3},"body":{"978:12":{"kind":"call","span":{"start":[978,12],"end":[978,35],"bytes":[30264,30287]},"callee":null},"983:21":{"kind":"call","span":{"start":[983,21],"end":[983,44],"bytes":[30368,30391]},"callee":null},"985:10":{"kind":"call","span":{"start":[985,10],"end":[985,42],"bytes":[30439,30471]},"callee":null},"989:9":{"kind":"call","span":{"start":[989,9],"end":[989,53],"bytes":[30541,30585]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.expand":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","kind":"function","span":{"start":[2117,1],"end":[2140,2],"bytes":[62581,63267]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.expand","parameters":[{"name":"s","type":"string","span":{"start":[2117,1],"end":[2117,40],"bytes":[62581,62620]}}],"return_type":"(string, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"2119:6":{"kind":"call","span":{"start":[2119,6],"end":[2119,26],"bytes":[62682,62702]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.StripSQLitePrefix"},"2122:18":{"kind":"call","span":{"start":[2122,18],"end":[2122,42],"bytes":[62792,62816]},"callee":null},"2123:18":{"kind":"call","span":{"start":[2123,18],"end":[2123,46],"bytes":[62834,62862]},"callee":null},"2124:10":{"kind":"call","span":{"start":[2124,10],"end":[2124,25],"bytes":[62874,62889]},"callee":null},"2128:12":{"kind":"call","span":{"start":[2128,12],"end":[2128,26],"bytes":[62933,62947]},"callee":null},"2132:14":{"kind":"call","span":{"start":[2132,14],"end":[2132,81],"bytes":[63024,63091]},"callee":null},"2139:34":{"kind":"call","span":{"start":[2139,34],"end":[2139,63],"bytes":[63230,63259]},"callee":null},"2139:9":{"kind":"call","span":{"start":[2139,9],"end":[2139,64],"bytes":[63205,63260]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.init":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.init","kind":"function","span":{"start":[43,1],"end":[46,2],"bytes":[937,1023]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"44:11":{"kind":"call","span":{"start":[44,11],"end":[44,32],"bytes":[961,982]},"callee":null},"45:12":{"kind":"call","span":{"start":[45,12],"end":[45,39],"bytes":[994,1021]},"callee":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion"}}},"github.com/benbjohnson/litestream/cmd/litestream.isValidHeartbeatURL":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.isValidHeartbeatURL","kind":"function","span":{"start":[2111,1],"end":[2113,2],"bytes":[62341,62460]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.isValidHeartbeatURL","parameters":[{"name":"u","type":"string","span":{"start":[2111,1],"end":[2111,42],"bytes":[62341,62382]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"2112:44":{"kind":"call","span":{"start":[2112,44],"end":[2112,76],"bytes":[62426,62458]},"callee":null},"2112:9":{"kind":"call","span":{"start":[2112,9],"end":[2112,40],"bytes":[62391,62422]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.main":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.main","kind":"function","span":{"start":[84,1],"end":[105,2],"bytes":[2611,3199]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.main","parameters":[],"metrics":{"cyclomatic":7},"body":{"100:6":{"kind":"call","span":{"start":[100,6],"end":[100,31],"bytes":[3066,3091]},"callee":null},"101:11":{"kind":"call","span":{"start":[101,11],"end":[101,61],"bytes":[3127,3177]},"callee":null},"103:3":{"kind":"call","span":{"start":[103,3],"end":[103,13],"bytes":[3184,3194]},"callee":null},"85:2":{"kind":"call","span":{"start":[85,2],"end":[85,52],"bytes":[2626,2676]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"},"87:7":{"kind":"call","span":{"start":[87,7],"end":[87,16],"bytes":[2684,2693]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewMain"},"88:12":{"kind":"call","span":{"start":[88,12],"end":[88,52],"bytes":[2705,2745]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run"},"88:18":{"kind":"call","span":{"start":[88,18],"end":[88,38],"bytes":[2711,2731]},"callee":null},"88:54":{"kind":"call","span":{"start":[88,54],"end":[88,77],"bytes":[2747,2770]},"callee":null},"89:3":{"kind":"call","span":{"start":[89,3],"end":[89,13],"bytes":[2775,2785]},"callee":null},"90:12":{"kind":"call","span":{"start":[90,12],"end":[90,40],"bytes":[2797,2825]},"callee":null},"93:5":{"kind":"call","span":{"start":[93,5],"end":[93,15],"bytes":[2925,2935]},"callee":null},"96:3":{"kind":"call","span":{"start":[96,3],"end":[96,13],"bytes":[2947,2957]},"callee":null},"98:10":{"kind":"call","span":{"start":[98,10],"end":[98,52],"bytes":[2991,3033]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.newABSReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newABSReplicaClientFromConfig","kind":"function","span":{"start":[1758,1],"end":[1799,2],"bytes":[52933,54086]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newABSReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1758,1],"end":[1758,112],"bytes":[52933,53044]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1758,1],"end":[1758,112],"bytes":[52933,53044]}}],"return_type":"(*github.com/benbjohnson/litestream/abs.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"1761:15":{"kind":"call","span":{"start":[1761,15],"end":[1761,70],"bytes":[53152,53207]},"callee":null},"1763:15":{"kind":"call","span":{"start":[1763,15],"end":[1763,72],"bytes":[53265,53322]},"callee":null},"1767:12":{"kind":"call","span":{"start":[1767,12],"end":[1767,34],"bytes":[53357,53379]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient"},"1777:13":{"kind":"call","span":{"start":[1777,13],"end":[1777,29],"bytes":[53632,53648]},"callee":null},"1783:25":{"kind":"call","span":{"start":[1783,25],"end":[1783,42],"bytes":[53764,53781]},"callee":null},"1789:18":{"kind":"call","span":{"start":[1789,18],"end":[1789,61],"bytes":[53885,53928]},"callee":null},"1789:37":{"kind":"call","span":{"start":[1789,37],"end":[1789,55],"bytes":[53904,53922]},"callee":null},"1795:15":{"kind":"call","span":{"start":[1795,15],"end":[1795,60],"bytes":[54015,54060]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting","kind":"function","span":{"start":[2072,1],"end":[2074,2],"bytes":[61335,61430]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting","parameters":[{"name":"defaultValue","type":"bool","span":{"start":[2072,1],"end":[2072,53],"bytes":[61335,61387]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream.boolSetting","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","kind":"function","span":{"start":[867,1],"end":[927,2],"bytes":[26354,28708]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","parameters":[{"name":"dbc","type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[867,1],"end":[867,94],"bytes":[26354,26447]}},{"name":"dirPath","type":"string","span":{"start":[867,1],"end":[867,94],"bytes":[26354,26447]}},{"name":"dbPath","type":"string","span":{"start":[867,1],"end":[867,94],"bytes":[26354,26447]}}],"return_type":"(*github.com/benbjohnson/litestream.DB, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"869:18":{"kind":"call","span":{"start":[869,18],"end":[869,47],"bytes":[26513,26542]},"callee":null},"871:15":{"kind":"call","span":{"start":[871,15],"end":[871,86],"bytes":[26574,26645]},"callee":null},"887:23":{"kind":"call","span":{"start":[887,23],"end":[887,43],"bytes":[27269,27289]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"889:16":{"kind":"call","span":{"start":[889,16],"end":[889,79],"bytes":[27323,27386]},"callee":null},"891:19":{"kind":"call","span":{"start":[891,19],"end":[891,79],"bytes":[27409,27469]},"callee":null},"895:24":{"kind":"call","span":{"start":[895,24],"end":[895,45],"bytes":[27589,27610]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"897:16":{"kind":"call","span":{"start":[897,16],"end":[897,80],"bytes":[27644,27708]},"callee":null},"899:19":{"kind":"call","span":{"start":[899,19],"end":[899,73],"bytes":[27731,27785]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.deriveMetaPathForDirectoryEntry"},"907:23":{"kind":"call","span":{"start":[907,23],"end":[907,79],"bytes":[28041,28097]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath"},"909:16":{"kind":"call","span":{"start":[909,16],"end":[909,81],"bytes":[28131,28196]},"callee":null},"915:5":{"kind":"call","span":{"start":[915,5],"end":[915,22],"bytes":[28297,28314]},"callee":null},"916:27":{"kind":"call","span":{"start":[916,27],"end":[916,68],"bytes":[28347,28388]},"callee":null},"916:50":{"kind":"call","span":{"start":[916,50],"end":[916,67],"bytes":[28370,28387]},"callee":null},"918:24":{"kind":"call","span":{"start":[918,24],"end":[918,76],"bytes":[28453,28505]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath"},"920:17":{"kind":"call","span":{"start":[920,17],"end":[920,88],"bytes":[28541,28612]},"callee":null},"926:9":{"kind":"call","span":{"start":[926,9],"end":[926,39],"bytes":[28676,28706]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"}}},"github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig","kind":"function","span":{"start":[1421,1],"end":[1449,2],"bytes":[42518,43386]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1421,1],"end":[1421,114],"bytes":[42518,42631]}},{"name":"r","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1421,1],"end":[1421,114],"bytes":[42518,42631]}}],"return_type":"(*github.com/benbjohnson/litestream/file.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"1424:15":{"kind":"call","span":{"start":[1424,15],"end":[1424,71],"bytes":[42726,42782]},"callee":null},"1430:30":{"kind":"call","span":{"start":[1430,30],"end":[1430,63],"bytes":[42901,42934]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL"},"1437:15":{"kind":"call","span":{"start":[1437,15],"end":[1437,55],"bytes":[43074,43114]},"callee":null},"1441:23":{"kind":"call","span":{"start":[1441,23],"end":[1441,41],"bytes":[43190,43208]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"1446:12":{"kind":"call","span":{"start":[1446,12],"end":[1446,45],"bytes":[43311,43344]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient"}}},"github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig","kind":"function","span":{"start":[1719,1],"end":[1755,2],"bytes":[51836,52835]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1719,1],"end":[1719,110],"bytes":[51836,51945]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1719,1],"end":[1719,110],"bytes":[51836,51945]}}],"return_type":"(*github.com/benbjohnson/litestream/gs.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"1722:15":{"kind":"call","span":{"start":[1722,15],"end":[1722,69],"bytes":[52053,52107]},"callee":null},"1724:15":{"kind":"call","span":{"start":[1724,15],"end":[1724,71],"bytes":[52165,52221]},"callee":null},"1731:27":{"kind":"call","span":{"start":[1731,27],"end":[1731,60],"bytes":[52354,52387]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL"},"1747:15":{"kind":"call","span":{"start":[1747,15],"end":[1747,59],"bytes":[52663,52707]},"callee":null},"1751:12":{"kind":"call","span":{"start":[1751,12],"end":[1751,33],"bytes":[52742,52763]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient"}}},"github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig","kind":"function","span":{"start":[1913,1],"end":[1986,2],"bytes":[57244,59128]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1913,1],"end":[1913,114],"bytes":[57244,57357]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1913,1],"end":[1913,114],"bytes":[57244,57357]}}],"return_type":"(*github.com/benbjohnson/litestream/nats.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"1917:36":{"kind":"call","span":{"start":[1917,36],"end":[1917,69],"bytes":[57499,57532]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL"},"1919:16":{"kind":"call","span":{"start":[1919,16],"end":[1919,55],"bytes":[57566,57605]},"callee":null},"1922:16":{"kind":"call","span":{"start":[1922,16],"end":[1922,73],"bytes":[57649,57706]},"callee":null},"1927:10":{"kind":"call","span":{"start":[1927,10],"end":[1927,40],"bytes":[57780,57810]},"callee":null},"1932:13":{"kind":"call","span":{"start":[1932,13],"end":[1932,42],"bytes":[57887,57916]},"callee":null},"1943:15":{"kind":"call","span":{"start":[1943,15],"end":[1943,61],"bytes":[58091,58137]},"callee":null},"1949:15":{"kind":"call","span":{"start":[1949,15],"end":[1949,108],"bytes":[58293,58386]},"callee":null},"1953:12":{"kind":"call","span":{"start":[1953,12],"end":[1953,35],"bytes":[58427,58450]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient"}}},"github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig","kind":"function","span":{"start":[1989,1],"end":[2049,2],"bytes":[59226,60733]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1989,1],"end":[1989,112],"bytes":[59226,59337]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1989,1],"end":[1989,112],"bytes":[59226,59337]}}],"return_type":"(*github.com/benbjohnson/litestream/oss.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"1992:15":{"kind":"call","span":{"start":[1992,15],"end":[1992,70],"bytes":[59445,59500]},"callee":null},"1994:15":{"kind":"call","span":{"start":[1994,15],"end":[1994,72],"bytes":[59558,59615]},"callee":null},"2002:26":{"kind":"call","span":{"start":[2002,26],"end":[2002,59],"bytes":[59789,59822]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL"},"2012:25":{"kind":"call","span":{"start":[2012,25],"end":[2012,44],"bytes":[59938,59957]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost"},"2028:15":{"kind":"call","span":{"start":[2028,15],"end":[2028,60],"bytes":[60239,60284]},"callee":null},"2032:12":{"kind":"call","span":{"start":[2032,12],"end":[2032,34],"bytes":[60326,60348]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient"},"2042:21":{"kind":"call","span":{"start":[2042,21],"end":[2042,39],"bytes":[60621,60639]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.newSFTPReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newSFTPReplicaClientFromConfig","kind":"function","span":{"start":[1802,1],"end":[1856,2],"bytes":[54186,55646]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newSFTPReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1802,1],"end":[1802,114],"bytes":[54186,54299]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1802,1],"end":[1802,114],"bytes":[54186,54299]}}],"return_type":"(*github.com/benbjohnson/litestream/sftp.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"1805:15":{"kind":"call","span":{"start":[1805,15],"end":[1805,71],"bytes":[54407,54463]},"callee":null},"1807:15":{"kind":"call","span":{"start":[1807,15],"end":[1807,71],"bytes":[54519,54575]},"callee":null},"1814:13":{"kind":"call","span":{"start":[1814,13],"end":[1814,29],"bytes":[54720,54736]},"callee":null},"1824:11":{"kind":"call","span":{"start":[1824,11],"end":[1824,28],"bytes":[54929,54946]},"callee":null},"1827:18":{"kind":"call","span":{"start":[1827,18],"end":[1827,35],"bytes":[55007,55024]},"callee":null},"1836:15":{"kind":"call","span":{"start":[1836,15],"end":[1836,59],"bytes":[55141,55185]},"callee":null},"1838:15":{"kind":"call","span":{"start":[1838,15],"end":[1838,59],"bytes":[55224,55268]},"callee":null},"1842:12":{"kind":"call","span":{"start":[1842,12],"end":[1842,35],"bytes":[55303,55326]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient"}}},"github.com/benbjohnson/litestream/cmd/litestream.newWebDAVReplicaClientFromConfig":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newWebDAVReplicaClientFromConfig","kind":"function","span":{"start":[1859,1],"end":[1910,2],"bytes":[55750,57144]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.newWebDAVReplicaClientFromConfig","parameters":[{"name":"c","type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig","span":{"start":[1859,1],"end":[1859,118],"bytes":[55750,55867]}},{"name":"_","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[1859,1],"end":[1859,118],"bytes":[55750,55867]}}],"return_type":"(*github.com/benbjohnson/litestream/webdav.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"1862:15":{"kind":"call","span":{"start":[1862,15],"end":[1862,73],"bytes":[55975,56033]},"callee":null},"1864:15":{"kind":"call","span":{"start":[1864,15],"end":[1864,79],"bytes":[56094,56158]},"callee":null},"1871:13":{"kind":"call","span":{"start":[1871,13],"end":[1871,29],"bytes":[56333,56349]},"callee":null},"1882:16":{"kind":"call","span":{"start":[1882,16],"end":[1882,54],"bytes":[56561,56599]},"callee":null},"1887:15":{"kind":"call","span":{"start":[1887,15],"end":[1887,32],"bytes":[56692,56709]},"callee":null},"1890:18":{"kind":"call","span":{"start":[1890,18],"end":[1890,35],"bytes":[56770,56787]},"callee":null},"1899:15":{"kind":"call","span":{"start":[1899,15],"end":[1899,67],"bytes":[56909,56961]},"callee":null},"1903:12":{"kind":"call","span":{"start":[1903,12],"end":[1903,37],"bytes":[56996,57021]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient"}}},"github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag":{"id":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","kind":"function","span":{"start":[2105,1],"end":[2108,2],"bytes":[62065,62268]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","parameters":[{"name":"fs","type":"*flag.FlagSet","span":{"start":[2105,1],"end":[2105,84],"bytes":[62065,62148]}}],"return_type":"(*string, *bool)","metrics":{"cyclomatic":1},"body":{"2106:9":{"kind":"call","span":{"start":[2106,9],"end":[2106,47],"bytes":[62157,62195]},"callee":null},"2107:3":{"kind":"call","span":{"start":[2107,3],"end":[2107,70],"bytes":[62199,62266]},"callee":null}}}},"content_hash":"51dcf1279e9042b62f269d2b622f9f7fcf39650907d9e2c10f654c2b328a4ff6"},"cmd/litestream/main_notwindows.go":{"id":"can://go/litestream/cmd/litestream/main_notwindows.go","kind":"module","span":{"start":[1,1],"end":[27,1],"bytes":[0,440]},"package":"main","source":"//go:build !windows\n\npackage main\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n)\n\nconst defaultConfigPath = \"/etc/litestream.yml\"\n\nfunc isWindowsService() (bool, error) {\n\treturn false, nil\n}\n\nfunc runWindowsService(ctx context.Context) error {\n\tpanic(\"cannot run windows service as unix process\")\n}\n\nfunc signalChan() \u003c-chan os.Signal {\n\tch := make(chan os.Signal, 2)\n\tsignal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)\n\treturn ch\n}\n","imports":[{"name":"context","path":"context","span":{"start":[6,1],"end":[6,11],"bytes":[44,54]}},{"name":"os","path":"os","span":{"start":[7,1],"end":[7,6],"bytes":[55,60]}},{"name":"signal","path":"os/signal","span":{"start":[8,1],"end":[8,13],"bytes":[61,73]}},{"name":"syscall","path":"syscall","span":{"start":[9,1],"end":[9,11],"bytes":[74,84]}}],"types":{},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.isWindowsService":{"id":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.isWindowsService","kind":"function","span":{"start":[14,1],"end":[16,2],"bytes":[137,197]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.isWindowsService","parameters":[],"return_type":"(bool, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream.runWindowsService":{"id":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.runWindowsService","kind":"function","span":{"start":[18,1],"end":[20,2],"bytes":[199,305]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.runWindowsService","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[18,1],"end":[18,52],"bytes":[199,250]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"19:2":{"kind":"call","span":{"start":[19,2],"end":[19,53],"bytes":[252,303]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.signalChan":{"id":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.signalChan","kind":"function","span":{"start":[22,1],"end":[26,2],"bytes":[307,439]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.signalChan","parameters":[],"return_type":"\u003c-chan os.Signal","metrics":{"cyclomatic":1},"body":{"23:8":{"kind":"call","span":{"start":[23,8],"end":[23,31],"bytes":[351,374]},"callee":null},"24:2":{"kind":"call","span":{"start":[24,2],"end":[24,52],"bytes":[376,426]},"callee":null}}}},"content_hash":"63ed2fa53604bc509016c51dbc1552a4e4618d1a981a15c1301942a52a501bf3"},"cmd/litestream/mcp.go":{"id":"can://go/litestream/cmd/litestream/mcp.go","kind":"module","span":{"start":[1,1],"end":[347,1],"bytes":[0,12226]},"package":"main","source":"package main\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/MadAppGang/httplog\"\n\t\"github.com/mark3labs/mcp-go/mcp\"\n\t\"github.com/mark3labs/mcp-go/server\"\n)\n\ntype MCPServer struct {\n\tctx context.Context\n\tmux *http.ServeMux\n\thttpServer *http.Server\n\tconfigPath string\n}\n\nfunc NewMCP(ctx context.Context, configPath string) (*MCPServer, error) {\n\ts := \u0026MCPServer{\n\t\tctx: ctx,\n\t\tconfigPath: configPath,\n\t}\n\n\tmcpServer := server.NewMCPServer(\n\t\t\"Litestream MCP Server\",\n\t\t\"1.0.0\",\n\t\tserver.WithToolCapabilities(false),\n\t\tserver.WithRecovery(),\n\t\tserver.WithLogging(),\n\t)\n\t// Add the tools to the server\n\tmcpServer.AddTool(InfoTool(configPath))\n\tmcpServer.AddTool(DatabasesTool(configPath))\n\tmcpServer.AddTool(RestoreTool(configPath))\n\tmcpServer.AddTool(LTXTool(configPath))\n\tmcpServer.AddTool(VersionTool())\n\tmcpServer.AddTool(StatusTool(configPath))\n\tmcpServer.AddTool(ResetTool(configPath))\n\n\ts.mux = http.NewServeMux()\n\ts.mux.Handle(\"/\", httplog.Logger(server.NewStreamableHTTPServer(mcpServer)))\n\treturn s, nil\n}\n\nfunc (s *MCPServer) Start(addr string) {\n\ts.httpServer = \u0026http.Server{\n\t\tAddr: addr,\n\t\tHandler: s.mux,\n\t\tReadHeaderTimeout: 30 * time.Second,\n\t}\n\tgo func() {\n\t\tslog.Info(\"Starting MCP Streamable HTTP server\", \"addr\", addr)\n\t\tif err := s.httpServer.ListenAndServe(); err != nil {\n\t\t\tslog.Error(\"MCP server error\", \"error\", err)\n\t\t}\n\t}()\n}\n\nfunc (s *MCPServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\ts.mux.ServeHTTP(w, r)\n}\n\n// Close attempts to gracefully shutdown the server.\nfunc (s *MCPServer) Close() error {\n\tctx, cancel := context.WithTimeout(s.ctx, 10*time.Second)\n\tdefer cancel()\n\treturn s.httpServer.Shutdown(ctx)\n}\n\n// isReplicaURL returns true if the path looks like a replica URL (s3://, gs://, etc.)\n// rather than a local database path. The CLI rejects -config when using replica URLs.\nfunc isReplicaURL(path string) bool {\n\treturn strings.Contains(path, \"://\")\n}\n\nfunc DatabasesTool(configPath string) (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_databases\",\n\t\tmcp.WithDescription(\"List databases and their replicas as defined in the Litestream config file. The default path is /etc/litestream.yml but is not required.\"),\n\t\tmcp.WithString(\"config\", mcp.Description(\"Path to the Litestream config file. Optional.\")),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\targs := []string{\"databases\"}\n\t\tconfig := configPath\n\t\tif configVal, err := req.RequireString(\"config\"); err == nil {\n\t\t\tconfig = configVal\n\t\t}\n\t\targs = append(args, \"-config\", config)\n\t\tcmd := exec.CommandContext(ctx, \"litestream\", args...)\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn mcp.NewToolResultError(strings.TrimSpace(string(output)) + \": \" + err.Error()), nil\n\t\t}\n\t\treturn mcp.NewToolResultText(string(output)), nil\n\t}\n}\n\nfunc InfoTool(configPath string) (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_info\",\n\t\tmcp.WithDescription(\"Get a comprehensive summary of Litestream's current status including databases, LTX files, and version information.\"),\n\t\tmcp.WithString(\"config\", mcp.Description(\"Path to the Litestream config file. Optional.\")),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\tvar summary strings.Builder\n\t\tsummary.WriteString(\"=== Litestream Status Report ===\\n\\n\")\n\n\t\t// Get version info\n\t\tversionCmd := exec.CommandContext(ctx, \"litestream\", \"version\")\n\t\tversionOutput, err := versionCmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\tslog.Error(\"Failed to get version info\", \"error\", err)\n\t\t\treturn mcp.NewToolResultError(\"Failed to get version info: \" + err.Error()), nil\n\t\t}\n\t\tsummary.WriteString(\"Version Information:\\n\")\n\t\tsummary.WriteString(string(versionOutput))\n\t\tsummary.WriteString(\"\\n\")\n\n\t\t// Get databases info\n\t\targs := []string{\"databases\"}\n\t\tconfig := configPath\n\t\tif configVal, err := req.RequireString(\"config\"); err == nil {\n\t\t\tconfig = configVal\n\t\t}\n\t\tsummary.WriteString(\"Current Config Path:\\n\")\n\t\tsummary.WriteString(config + \"\\n\\n\")\n\n\t\targs = append(args, \"-config\", config)\n\t\tdbCmd := exec.CommandContext(ctx, \"litestream\", args...)\n\t\tdbOutput, err := dbCmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\tslog.Error(\"Failed to get databases info\", \"error\", err)\n\t\t\treturn mcp.NewToolResultError(\"Failed to get databases info: \" + err.Error()), nil\n\t\t}\n\n\t\tsummary.WriteString(\"Databases:\\n\")\n\t\tsummary.WriteString(string(dbOutput))\n\t\tsummary.WriteString(\"\\n\")\n\n\t\t// Parse database paths from output\n\t\tscanner := bufio.NewScanner(strings.NewReader(string(dbOutput)))\n\t\t// Skip header line\n\t\tscanner.Scan()\n\t\tvar dbPaths []string\n\t\tfor scanner.Scan() {\n\t\t\tfields := strings.Fields(scanner.Text())\n\t\t\tif len(fields) \u003e 0 {\n\t\t\t\tdbPaths = append(dbPaths, fields[0])\n\t\t\t}\n\t\t}\n\n\t\t// Get LTX files info for each database\n\t\tsummary.WriteString(\"LTX Files:\\n\")\n\t\tfor _, dbPath := range dbPaths {\n\t\t\tltxArgs := []string{\"ltx\"}\n\t\t\tif config != \"\" {\n\t\t\t\tltxArgs = append(ltxArgs, \"-config\", config)\n\t\t\t}\n\t\t\tltxArgs = append(ltxArgs, dbPath)\n\t\t\tltxCmd := exec.CommandContext(ctx, \"litestream\", ltxArgs...)\n\t\t\tltxOutput, err := ltxCmd.CombinedOutput()\n\t\t\tif err != nil {\n\t\t\t\tsummary.WriteString(\"Failed to get LTX files for \" + dbPath + \": \" + err.Error() + \"\\n\")\n\t\t\t\tsummary.WriteString(string(ltxOutput))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsummary.WriteString(\"Database: \" + dbPath + \"\\n\")\n\t\t\tsummary.WriteString(string(ltxOutput))\n\t\t\tsummary.WriteString(\"\\n\")\n\t\t}\n\n\t\treturn mcp.NewToolResultText(summary.String()), nil\n\t}\n}\n\nfunc RestoreTool(configPath string) (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_restore\",\n\t\tmcp.WithDescription(\"Restore a database from a Litestream replica.\"),\n\t\tmcp.WithString(\"path\", mcp.Required(), mcp.Description(\"Database path or replica URL.\")),\n\t\tmcp.WithString(\"o\", mcp.Description(\"Output path for the restored database. Optional.\")),\n\t\tmcp.WithString(\"config\", mcp.Description(\"Path to the Litestream config file. Optional.\")),\n\t\tmcp.WithString(\"txid\", mcp.Description(\"Restore up to a specific transaction ID. Optional.\")),\n\t\tmcp.WithString(\"timestamp\", mcp.Description(\"Restore to a specific point-in-time (RFC3339). Optional.\")),\n\t\tmcp.WithString(\"parallelism\", mcp.Description(\"Number of WAL files to download in parallel. Optional.\")),\n\t\tmcp.WithBoolean(\"if_db_not_exists\", mcp.Description(\"Return 0 if the database already exists. Optional.\")),\n\t\tmcp.WithBoolean(\"if_replica_exists\", mcp.Description(\"Return 0 if no backups found. Optional.\")),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\targs := []string{\"restore\"}\n\t\tif o, err := req.RequireString(\"o\"); err == nil {\n\t\t\targs = append(args, \"-o\", o)\n\t\t}\n\n\t\t// Get path first to determine if it's a replica URL\n\t\tpath, _ := req.RequireString(\"path\")\n\n\t\t// Only add -config for database paths, not replica URLs\n\t\t// The CLI rejects -config when restoring from a replica URL\n\t\tif !isReplicaURL(path) {\n\t\t\tconfig := configPath\n\t\t\tif configVal, err := req.RequireString(\"config\"); err == nil {\n\t\t\t\tconfig = configVal\n\t\t\t}\n\t\t\tif config != \"\" {\n\t\t\t\targs = append(args, \"-config\", config)\n\t\t\t}\n\t\t}\n\n\t\tif txid, err := req.RequireString(\"txid\"); err == nil {\n\t\t\targs = append(args, \"-txid\", txid)\n\t\t}\n\t\tif timestamp, err := req.RequireString(\"timestamp\"); err == nil {\n\t\t\targs = append(args, \"-timestamp\", timestamp)\n\t\t}\n\t\tif parallelism, err := req.RequireString(\"parallelism\"); err == nil {\n\t\t\targs = append(args, \"-parallelism\", parallelism)\n\t\t}\n\t\tif ifDBNotExists, err := req.RequireBool(\"if_db_not_exists\"); err == nil {\n\t\t\targs = append(args, \"-if-db-not-exists\", strconv.FormatBool(ifDBNotExists))\n\t\t}\n\t\tif ifReplicaExists, err := req.RequireBool(\"if_replica_exists\"); err == nil {\n\t\t\targs = append(args, \"-if-replica-exists\", strconv.FormatBool(ifReplicaExists))\n\t\t}\n\t\tif path != \"\" {\n\t\t\targs = append(args, path)\n\t\t}\n\t\tcmd := exec.CommandContext(ctx, \"litestream\", args...)\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn mcp.NewToolResultError(strings.TrimSpace(string(output)) + \": \" + err.Error()), nil\n\t\t}\n\t\treturn mcp.NewToolResultText(string(output)), nil\n\t}\n}\n\nfunc VersionTool() (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_version\",\n\t\tmcp.WithDescription(\"Print the Litestream binary version.\"),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\tcmd := exec.CommandContext(ctx, \"litestream\", \"version\")\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn mcp.NewToolResultError(strings.TrimSpace(string(output)) + \": \" + err.Error()), nil\n\t\t}\n\t\treturn mcp.NewToolResultText(string(output)), nil\n\t}\n}\n\nfunc LTXTool(configPath string) (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_ltx\",\n\t\tmcp.WithDescription(\"List all LTX files for a database or replica URL.\"),\n\t\tmcp.WithString(\"path\", mcp.Required(), mcp.Description(\"Database path or replica URL.\")),\n\t\tmcp.WithString(\"config\", mcp.Description(\"Path to the Litestream config file. Optional, ignored for replica URLs.\")),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\targs := []string{\"ltx\"}\n\n\t\t// Get path first to determine if it's a replica URL\n\t\tpath, _ := req.RequireString(\"path\")\n\n\t\t// Only add -config for database paths, not replica URLs\n\t\t// The CLI rejects -config when using a replica URL\n\t\tif !isReplicaURL(path) {\n\t\t\tconfig := configPath\n\t\t\tif configVal, err := req.RequireString(\"config\"); err == nil {\n\t\t\t\tconfig = configVal\n\t\t\t}\n\t\t\tif config != \"\" {\n\t\t\t\targs = append(args, \"-config\", config)\n\t\t\t}\n\t\t}\n\n\t\tif path != \"\" {\n\t\t\targs = append(args, path)\n\t\t}\n\t\tcmd := exec.CommandContext(ctx, \"litestream\", args...)\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn mcp.NewToolResultError(strings.TrimSpace(string(output)) + \": \" + err.Error()), nil\n\t\t}\n\t\treturn mcp.NewToolResultText(string(output)), nil\n\t}\n}\n\nfunc StatusTool(configPath string) (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_status\",\n\t\tmcp.WithDescription(\"Display replication status including database path, status, local transaction ID, and WAL size.\"),\n\t\tmcp.WithString(\"config\", mcp.Description(\"Path to the Litestream config file. Optional.\")),\n\t\tmcp.WithString(\"path\", mcp.Description(\"Filter to a specific database path. Optional.\")),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\targs := []string{\"status\"}\n\t\tconfig := configPath\n\t\tif configVal, err := req.RequireString(\"config\"); err == nil {\n\t\t\tconfig = configVal\n\t\t}\n\t\targs = append(args, \"-config\", config)\n\t\tif path, err := req.RequireString(\"path\"); err == nil {\n\t\t\targs = append(args, path)\n\t\t}\n\t\tcmd := exec.CommandContext(ctx, \"litestream\", args...)\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn mcp.NewToolResultError(strings.TrimSpace(string(output)) + \": \" + err.Error()), nil\n\t\t}\n\t\treturn mcp.NewToolResultText(string(output)), nil\n\t}\n}\n\nfunc ResetTool(configPath string) (mcp.Tool, server.ToolHandlerFunc) {\n\ttool := mcp.NewTool(\"litestream_reset\",\n\t\tmcp.WithDescription(\"Clear local Litestream state for a database. Removes local LTX files, forcing fresh snapshot on next sync. Database file is not modified.\"),\n\t\tmcp.WithString(\"path\", mcp.Required(), mcp.Description(\"Database path to reset.\")),\n\t\tmcp.WithString(\"config\", mcp.Description(\"Path to the Litestream config file. Optional.\")),\n\t)\n\n\treturn tool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {\n\t\targs := []string{\"reset\"}\n\t\tconfig := configPath\n\t\tif configVal, err := req.RequireString(\"config\"); err == nil {\n\t\t\tconfig = configVal\n\t\t}\n\t\targs = append(args, \"-config\", config)\n\t\tif path, err := req.RequireString(\"path\"); err == nil {\n\t\t\targs = append(args, path)\n\t\t}\n\t\tcmd := exec.CommandContext(ctx, \"litestream\", args...)\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn mcp.NewToolResultError(strings.TrimSpace(string(output)) + \": \" + err.Error()), nil\n\t\t}\n\t\treturn mcp.NewToolResultText(string(output)), nil\n\t}\n}\n","imports":[{"name":"bufio","path":"bufio","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"slog","path":"log/slog","span":{"start":[6,1],"end":[6,12],"bytes":[43,54]}},{"name":"http","path":"net/http","span":{"start":[7,1],"end":[7,12],"bytes":[55,66]}},{"name":"exec","path":"os/exec","span":{"start":[8,1],"end":[8,11],"bytes":[67,77]}},{"name":"strconv","path":"strconv","span":{"start":[9,1],"end":[9,11],"bytes":[78,88]}},{"name":"strings","path":"strings","span":{"start":[10,1],"end":[10,11],"bytes":[89,99]}},{"name":"time","path":"time","span":{"start":[11,1],"end":[11,8],"bytes":[100,107]}},{"name":"httplog","path":"github.com/MadAppGang/httplog","span":{"start":[13,1],"end":[13,33],"bytes":[109,141]}},{"name":"mcp","path":"github.com/mark3labs/mcp-go/mcp","span":{"start":[14,1],"end":[14,35],"bytes":[142,176]}},{"name":"server","path":"github.com/mark3labs/mcp-go/server","span":{"start":[15,1],"end":[15,38],"bytes":[177,214]}}],"types":{"MCPServer":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer","kind":"struct","span":{"start":[18,1],"end":[23,2],"bytes":[218,342]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Close":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Close","kind":"method","span":{"start":[71,1],"end":[75,2],"bytes":[1608,1755]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"72:17":{"kind":"call","span":{"start":[72,17],"end":[72,59],"bytes":[1660,1702]},"callee":null},"73:8":{"kind":"call","span":{"start":[73,8],"end":[73,16],"bytes":[1710,1718]},"callee":null},"74:9":{"kind":"call","span":{"start":[74,9],"end":[74,35],"bytes":[1727,1753]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.ServeHTTP":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.ServeHTTP","kind":"method","span":{"start":[66,1],"end":[68,2],"bytes":[1457,1553]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.ServeHTTP","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[66,1],"end":[66,72],"bytes":[1457,1528]}},{"name":"r","type":"*net/http.Request","span":{"start":[66,1],"end":[66,72],"bytes":[1457,1528]}}],"metrics":{"cyclomatic":1},"body":{"67:2":{"kind":"call","span":{"start":[67,2],"end":[67,23],"bytes":[1530,1551]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start","kind":"method","span":{"start":[52,1],"end":[64,2],"bytes":[1095,1455]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start","parameters":[{"name":"addr","type":"string","span":{"start":[52,1],"end":[52,41],"bytes":[1095,1135]}}],"metrics":{"cyclomatic":2},"body":{"58:5":{"kind":"call","span":{"start":[58,5],"end":[63,5],"bytes":[1267,1453]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start.closure_1","kind":"function","span":{"start":[58,1],"end":[63,5],"bytes":[1263,1453]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start.closure_1","parameters":[],"body":{"59:3":{"kind":"call","span":{"start":[59,3],"end":[59,65],"bytes":[1278,1340]},"callee":null},"60:13":{"kind":"call","span":{"start":[60,13],"end":[60,42],"bytes":[1353,1382]},"callee":null},"61:4":{"kind":"call","span":{"start":[61,4],"end":[61,48],"bytes":[1400,1444]},"callee":null}}}}}},"fields":{"configPath":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/configPath","kind":"field","type":"string","span":{"start":[22,1],"end":[22,19],"bytes":[322,340]}},"ctx":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/ctx","kind":"field","type":"context.Context","span":{"start":[19,1],"end":[19,28],"bytes":[242,269]}},"httpServer":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/httpServer","kind":"field","type":"*net/http.Server","span":{"start":[21,1],"end":[21,25],"bytes":[297,321]}},"mux":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/mux","kind":"field","type":"*net/http.ServeMux","span":{"start":[20,1],"end":[20,27],"bytes":[270,296]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool","kind":"function","span":{"start":[83,1],"end":[103,2],"bytes":[2010,2941]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool","parameters":[{"name":"configPath","type":"string","span":{"start":[83,1],"end":[83,75],"bytes":[2010,2084]}}],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":3},"body":{"84:10":{"kind":"call","span":{"start":[84,10],"end":[87,3],"bytes":[2094,2389]},"callee":null},"85:3":{"kind":"call","span":{"start":[85,3],"end":[85,162],"bytes":[2132,2291]},"callee":null},"86:28":{"kind":"call","span":{"start":[86,28],"end":[86,92],"bytes":[2320,2384]},"callee":null},"86:3":{"kind":"call","span":{"start":[86,3],"end":[86,93],"bytes":[2295,2385]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool/github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool.closure_1","kind":"function","span":{"start":[89,1],"end":[102,3],"bytes":[2391,2939]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[89,1],"end":[89,96],"bytes":[2391,2486]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[89,1],"end":[89,96],"bytes":[2391,2486]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"101:10":{"kind":"call","span":{"start":[101,10],"end":[101,47],"bytes":[2894,2931]},"callee":null},"101:32":{"kind":"call","span":{"start":[101,32],"end":[101,46],"bytes":[2916,2930]},"callee":null},"92:24":{"kind":"call","span":{"start":[92,24],"end":[92,51],"bytes":[2565,2592]},"callee":null},"95:10":{"kind":"call","span":{"start":[95,10],"end":[95,41],"bytes":[2642,2673]},"callee":null},"96:10":{"kind":"call","span":{"start":[96,10],"end":[96,57],"bytes":[2683,2730]},"callee":null},"97:18":{"kind":"call","span":{"start":[97,18],"end":[97,38],"bytes":[2748,2768]},"callee":null},"99:11":{"kind":"call","span":{"start":[99,11],"end":[99,89],"bytes":[2797,2875]},"callee":null},"99:34":{"kind":"call","span":{"start":[99,34],"end":[99,67],"bytes":[2820,2853]},"callee":null},"99:52":{"kind":"call","span":{"start":[99,52],"end":[99,66],"bytes":[2838,2852]},"callee":null},"99:77":{"kind":"call","span":{"start":[99,77],"end":[99,88],"bytes":[2863,2874]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.InfoTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.InfoTool","kind":"function","span":{"start":[105,1],"end":[181,2],"bytes":[2943,5619]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.InfoTool","parameters":[{"name":"configPath","type":"string","span":{"start":[105,1],"end":[105,70],"bytes":[2943,3012]}}],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":9},"body":{"106:10":{"kind":"call","span":{"start":[106,10],"end":[109,3],"bytes":[3022,3291]},"callee":null},"107:3":{"kind":"call","span":{"start":[107,3],"end":[107,141],"bytes":[3055,3193]},"callee":null},"108:28":{"kind":"call","span":{"start":[108,28],"end":[108,92],"bytes":[3222,3286]},"callee":null},"108:3":{"kind":"call","span":{"start":[108,3],"end":[108,93],"bytes":[3197,3287]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.InfoTool/github.com/benbjohnson/litestream/cmd/litestream.InfoTool.closure_1","kind":"function","span":{"start":[111,1],"end":[180,3],"bytes":[3293,5617]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.InfoTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[111,1],"end":[111,96],"bytes":[3293,3388]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[111,1],"end":[111,96],"bytes":[3293,3388]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"113:3":{"kind":"call","span":{"start":[113,3],"end":[113,62],"bytes":[3421,3480]},"callee":null},"116:17":{"kind":"call","span":{"start":[116,17],"end":[116,66],"bytes":[3520,3569]},"callee":null},"117:25":{"kind":"call","span":{"start":[117,25],"end":[117,52],"bytes":[3594,3621]},"callee":null},"119:4":{"kind":"call","span":{"start":[119,4],"end":[119,58],"bytes":[3643,3697]},"callee":null},"120:11":{"kind":"call","span":{"start":[120,11],"end":[120,79],"bytes":[3708,3776]},"callee":null},"120:67":{"kind":"call","span":{"start":[120,67],"end":[120,78],"bytes":[3764,3775]},"callee":null},"122:3":{"kind":"call","span":{"start":[122,3],"end":[122,48],"bytes":[3788,3833]},"callee":null},"123:23":{"kind":"call","span":{"start":[123,23],"end":[123,44],"bytes":[3856,3877]},"callee":null},"123:3":{"kind":"call","span":{"start":[123,3],"end":[123,45],"bytes":[3836,3878]},"callee":null},"124:3":{"kind":"call","span":{"start":[124,3],"end":[124,28],"bytes":[3881,3906]},"callee":null},"129:24":{"kind":"call","span":{"start":[129,24],"end":[129,51],"bytes":[4010,4037]},"callee":null},"132:3":{"kind":"call","span":{"start":[132,3],"end":[132,48],"bytes":[4080,4125]},"callee":null},"133:3":{"kind":"call","span":{"start":[133,3],"end":[133,39],"bytes":[4128,4164]},"callee":null},"135:10":{"kind":"call","span":{"start":[135,10],"end":[135,41],"bytes":[4175,4206]},"callee":null},"136:12":{"kind":"call","span":{"start":[136,12],"end":[136,59],"bytes":[4218,4265]},"callee":null},"137:20":{"kind":"call","span":{"start":[137,20],"end":[137,42],"bytes":[4285,4307]},"callee":null},"139:4":{"kind":"call","span":{"start":[139,4],"end":[139,60],"bytes":[4329,4385]},"callee":null},"140:11":{"kind":"call","span":{"start":[140,11],"end":[140,81],"bytes":[4396,4466]},"callee":null},"140:69":{"kind":"call","span":{"start":[140,69],"end":[140,80],"bytes":[4454,4465]},"callee":null},"143:3":{"kind":"call","span":{"start":[143,3],"end":[143,38],"bytes":[4479,4514]},"callee":null},"144:23":{"kind":"call","span":{"start":[144,23],"end":[144,39],"bytes":[4537,4553]},"callee":null},"144:3":{"kind":"call","span":{"start":[144,3],"end":[144,40],"bytes":[4517,4554]},"callee":null},"145:3":{"kind":"call","span":{"start":[145,3],"end":[145,28],"bytes":[4557,4582]},"callee":null},"148:14":{"kind":"call","span":{"start":[148,14],"end":[148,67],"bytes":[4635,4688]},"callee":null},"148:31":{"kind":"call","span":{"start":[148,31],"end":[148,66],"bytes":[4652,4687]},"callee":null},"148:49":{"kind":"call","span":{"start":[148,49],"end":[148,65],"bytes":[4670,4686]},"callee":null},"150:3":{"kind":"call","span":{"start":[150,3],"end":[150,17],"bytes":[4713,4727]},"callee":null},"152:7":{"kind":"call","span":{"start":[152,7],"end":[152,21],"bytes":[4757,4771]},"callee":null},"153:14":{"kind":"call","span":{"start":[153,14],"end":[153,44],"bytes":[4787,4817]},"callee":null},"153:29":{"kind":"call","span":{"start":[153,29],"end":[153,43],"bytes":[4802,4816]},"callee":null},"154:7":{"kind":"call","span":{"start":[154,7],"end":[154,18],"bytes":[4824,4835]},"callee":null},"155:15":{"kind":"call","span":{"start":[155,15],"end":[155,41],"bytes":[4856,4882]},"callee":null},"160:3":{"kind":"call","span":{"start":[160,3],"end":[160,38],"bytes":[4937,4972]},"callee":null},"164:15":{"kind":"call","span":{"start":[164,15],"end":[164,49],"bytes":[5073,5107]},"callee":null},"166:14":{"kind":"call","span":{"start":[166,14],"end":[166,37],"bytes":[5126,5149]},"callee":null},"167:14":{"kind":"call","span":{"start":[167,14],"end":[167,64],"bytes":[5163,5213]},"callee":null},"168:22":{"kind":"call","span":{"start":[168,22],"end":[168,45],"bytes":[5235,5258]},"callee":null},"170:5":{"kind":"call","span":{"start":[170,5],"end":[170,93],"bytes":[5282,5370]},"callee":null},"170:74":{"kind":"call","span":{"start":[170,74],"end":[170,85],"bytes":[5351,5362]},"callee":null},"171:25":{"kind":"call","span":{"start":[171,25],"end":[171,42],"bytes":[5395,5412]},"callee":null},"171:5":{"kind":"call","span":{"start":[171,5],"end":[171,43],"bytes":[5375,5413]},"callee":null},"174:4":{"kind":"call","span":{"start":[174,4],"end":[174,53],"bytes":[5435,5484]},"callee":null},"175:24":{"kind":"call","span":{"start":[175,24],"end":[175,41],"bytes":[5508,5525]},"callee":null},"175:4":{"kind":"call","span":{"start":[175,4],"end":[175,42],"bytes":[5488,5526]},"callee":null},"176:4":{"kind":"call","span":{"start":[176,4],"end":[176,29],"bytes":[5530,5555]},"callee":null},"179:10":{"kind":"call","span":{"start":[179,10],"end":[179,49],"bytes":[5570,5609]},"callee":null},"179:32":{"kind":"call","span":{"start":[179,32],"end":[179,48],"bytes":[5592,5608]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.LTXTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.LTXTool","kind":"function","span":{"start":[259,1],"end":[294,2],"bytes":[8792,10060]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.LTXTool","parameters":[{"name":"configPath","type":"string","span":{"start":[259,1],"end":[259,69],"bytes":[8792,8860]}}],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":6},"body":{"260:10":{"kind":"call","span":{"start":[260,10],"end":[264,3],"bytes":[8870,9190]},"callee":null},"261:3":{"kind":"call","span":{"start":[261,3],"end":[261,75],"bytes":[8902,8974]},"callee":null},"262:26":{"kind":"call","span":{"start":[262,26],"end":[262,40],"bytes":[9001,9015]},"callee":null},"262:3":{"kind":"call","span":{"start":[262,3],"end":[262,91],"bytes":[8978,9066]},"callee":null},"262:42":{"kind":"call","span":{"start":[262,42],"end":[262,90],"bytes":[9017,9065]},"callee":null},"263:28":{"kind":"call","span":{"start":[263,28],"end":[263,118],"bytes":[9095,9185]},"callee":null},"263:3":{"kind":"call","span":{"start":[263,3],"end":[263,119],"bytes":[9070,9186]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.LTXTool/github.com/benbjohnson/litestream/cmd/litestream.LTXTool.closure_1","kind":"function","span":{"start":[266,1],"end":[293,3],"bytes":[9192,10058]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.LTXTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[266,1],"end":[266,96],"bytes":[9192,9287]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[266,1],"end":[266,96],"bytes":[9192,9287]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"270:14":{"kind":"call","span":{"start":[270,14],"end":[270,39],"bytes":[9383,9408]},"callee":null},"274:7":{"kind":"call","span":{"start":[274,7],"end":[274,25],"bytes":[9529,9547]},"callee":null},"276:25":{"kind":"call","span":{"start":[276,25],"end":[276,52],"bytes":[9598,9625]},"callee":null},"280:12":{"kind":"call","span":{"start":[280,12],"end":[280,43],"bytes":[9700,9731]},"callee":null},"285:11":{"kind":"call","span":{"start":[285,11],"end":[285,29],"bytes":[9770,9788]},"callee":null},"287:10":{"kind":"call","span":{"start":[287,10],"end":[287,57],"bytes":[9802,9849]},"callee":null},"288:18":{"kind":"call","span":{"start":[288,18],"end":[288,38],"bytes":[9867,9887]},"callee":null},"290:11":{"kind":"call","span":{"start":[290,11],"end":[290,89],"bytes":[9916,9994]},"callee":null},"290:34":{"kind":"call","span":{"start":[290,34],"end":[290,67],"bytes":[9939,9972]},"callee":null},"290:52":{"kind":"call","span":{"start":[290,52],"end":[290,66],"bytes":[9957,9971]},"callee":null},"290:77":{"kind":"call","span":{"start":[290,77],"end":[290,88],"bytes":[9982,9993]},"callee":null},"292:10":{"kind":"call","span":{"start":[292,10],"end":[292,47],"bytes":[10013,10050]},"callee":null},"292:32":{"kind":"call","span":{"start":[292,32],"end":[292,46],"bytes":[10035,10049]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.NewMCP":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","kind":"function","span":{"start":[25,1],"end":[50,2],"bytes":[344,1093]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewMCP","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[25,1],"end":[25,74],"bytes":[344,417]}},{"name":"configPath","type":"string","span":{"start":[25,1],"end":[25,74],"bytes":[344,417]}}],"return_type":"(*github.com/benbjohnson/litestream/cmd/litestream.MCPServer, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"31:15":{"kind":"call","span":{"start":[31,15],"end":[37,3],"bytes":[499,647]},"callee":null},"34:3":{"kind":"call","span":{"start":[34,3],"end":[34,37],"bytes":[560,594]},"callee":null},"35:3":{"kind":"call","span":{"start":[35,3],"end":[35,24],"bytes":[598,619]},"callee":null},"36:3":{"kind":"call","span":{"start":[36,3],"end":[36,23],"bytes":[623,643]},"callee":null},"39:2":{"kind":"call","span":{"start":[39,2],"end":[39,41],"bytes":[681,720]},"callee":null},"39:20":{"kind":"call","span":{"start":[39,20],"end":[39,40],"bytes":[699,719]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.InfoTool"},"40:2":{"kind":"call","span":{"start":[40,2],"end":[40,46],"bytes":[722,766]},"callee":null},"40:20":{"kind":"call","span":{"start":[40,20],"end":[40,45],"bytes":[740,765]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool"},"41:2":{"kind":"call","span":{"start":[41,2],"end":[41,44],"bytes":[768,810]},"callee":null},"41:20":{"kind":"call","span":{"start":[41,20],"end":[41,43],"bytes":[786,809]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool"},"42:2":{"kind":"call","span":{"start":[42,2],"end":[42,40],"bytes":[812,850]},"callee":null},"42:20":{"kind":"call","span":{"start":[42,20],"end":[42,39],"bytes":[830,849]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.LTXTool"},"43:2":{"kind":"call","span":{"start":[43,2],"end":[43,34],"bytes":[852,884]},"callee":null},"43:20":{"kind":"call","span":{"start":[43,20],"end":[43,33],"bytes":[870,883]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.VersionTool"},"44:2":{"kind":"call","span":{"start":[44,2],"end":[44,43],"bytes":[886,927]},"callee":null},"44:20":{"kind":"call","span":{"start":[44,20],"end":[44,42],"bytes":[904,926]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.StatusTool"},"45:2":{"kind":"call","span":{"start":[45,2],"end":[45,42],"bytes":[929,969]},"callee":null},"45:20":{"kind":"call","span":{"start":[45,20],"end":[45,41],"bytes":[947,968]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.ResetTool"},"47:10":{"kind":"call","span":{"start":[47,10],"end":[47,28],"bytes":[980,998]},"callee":null},"48:2":{"kind":"call","span":{"start":[48,2],"end":[48,78],"bytes":[1000,1076]},"callee":null},"48:20":{"kind":"call","span":{"start":[48,20],"end":[48,77],"bytes":[1018,1075]},"callee":null},"48:35":{"kind":"call","span":{"start":[48,35],"end":[48,76],"bytes":[1033,1074]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ResetTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.ResetTool","kind":"function","span":{"start":[322,1],"end":[346,2],"bytes":[11128,12225]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ResetTool","parameters":[{"name":"configPath","type":"string","span":{"start":[322,1],"end":[322,71],"bytes":[11128,11198]}}],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":4},"body":{"323:10":{"kind":"call","span":{"start":[323,10],"end":[327,3],"bytes":[11208,11586]},"callee":null},"324:3":{"kind":"call","span":{"start":[324,3],"end":[324,163],"bytes":[11242,11402]},"callee":null},"325:26":{"kind":"call","span":{"start":[325,26],"end":[325,40],"bytes":[11429,11443]},"callee":null},"325:3":{"kind":"call","span":{"start":[325,3],"end":[325,85],"bytes":[11406,11488]},"callee":null},"325:42":{"kind":"call","span":{"start":[325,42],"end":[325,84],"bytes":[11445,11487]},"callee":null},"326:28":{"kind":"call","span":{"start":[326,28],"end":[326,92],"bytes":[11517,11581]},"callee":null},"326:3":{"kind":"call","span":{"start":[326,3],"end":[326,93],"bytes":[11492,11582]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.ResetTool/github.com/benbjohnson/litestream/cmd/litestream.ResetTool.closure_1","kind":"function","span":{"start":[329,1],"end":[345,3],"bytes":[11588,12223]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ResetTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[329,1],"end":[329,96],"bytes":[11588,11683]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[329,1],"end":[329,96],"bytes":[11588,11683]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"332:24":{"kind":"call","span":{"start":[332,24],"end":[332,51],"bytes":[11758,11785]},"callee":null},"335:10":{"kind":"call","span":{"start":[335,10],"end":[335,41],"bytes":[11835,11866]},"callee":null},"336:19":{"kind":"call","span":{"start":[336,19],"end":[336,44],"bytes":[11885,11910]},"callee":null},"337:11":{"kind":"call","span":{"start":[337,11],"end":[337,29],"bytes":[11935,11953]},"callee":null},"339:10":{"kind":"call","span":{"start":[339,10],"end":[339,57],"bytes":[11967,12014]},"callee":null},"340:18":{"kind":"call","span":{"start":[340,18],"end":[340,38],"bytes":[12032,12052]},"callee":null},"342:11":{"kind":"call","span":{"start":[342,11],"end":[342,89],"bytes":[12081,12159]},"callee":null},"342:34":{"kind":"call","span":{"start":[342,34],"end":[342,67],"bytes":[12104,12137]},"callee":null},"342:52":{"kind":"call","span":{"start":[342,52],"end":[342,66],"bytes":[12122,12136]},"callee":null},"342:77":{"kind":"call","span":{"start":[342,77],"end":[342,88],"bytes":[12147,12158]},"callee":null},"344:10":{"kind":"call","span":{"start":[344,10],"end":[344,47],"bytes":[12178,12215]},"callee":null},"344:32":{"kind":"call","span":{"start":[344,32],"end":[344,46],"bytes":[12200,12214]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool","kind":"function","span":{"start":[183,1],"end":[242,2],"bytes":[5621,8257]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreTool","parameters":[{"name":"configPath","type":"string","span":{"start":[183,1],"end":[183,73],"bytes":[5621,5693]}}],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":12},"body":{"184:10":{"kind":"call","span":{"start":[184,10],"end":[194,3],"bytes":[5703,6612]},"callee":null},"185:3":{"kind":"call","span":{"start":[185,3],"end":[185,71],"bytes":[5739,5807]},"callee":null},"186:26":{"kind":"call","span":{"start":[186,26],"end":[186,40],"bytes":[5834,5848]},"callee":null},"186:3":{"kind":"call","span":{"start":[186,3],"end":[186,91],"bytes":[5811,5899]},"callee":null},"186:42":{"kind":"call","span":{"start":[186,42],"end":[186,90],"bytes":[5850,5898]},"callee":null},"187:23":{"kind":"call","span":{"start":[187,23],"end":[187,90],"bytes":[5923,5990]},"callee":null},"187:3":{"kind":"call","span":{"start":[187,3],"end":[187,91],"bytes":[5903,5991]},"callee":null},"188:28":{"kind":"call","span":{"start":[188,28],"end":[188,92],"bytes":[6020,6084]},"callee":null},"188:3":{"kind":"call","span":{"start":[188,3],"end":[188,93],"bytes":[5995,6085]},"callee":null},"189:26":{"kind":"call","span":{"start":[189,26],"end":[189,95],"bytes":[6112,6181]},"callee":null},"189:3":{"kind":"call","span":{"start":[189,3],"end":[189,96],"bytes":[6089,6182]},"callee":null},"190:3":{"kind":"call","span":{"start":[190,3],"end":[190,107],"bytes":[6186,6290]},"callee":null},"190:31":{"kind":"call","span":{"start":[190,31],"end":[190,106],"bytes":[6214,6289]},"callee":null},"191:3":{"kind":"call","span":{"start":[191,3],"end":[191,107],"bytes":[6294,6398]},"callee":null},"191:33":{"kind":"call","span":{"start":[191,33],"end":[191,106],"bytes":[6324,6397]},"callee":null},"192:3":{"kind":"call","span":{"start":[192,3],"end":[192,109],"bytes":[6402,6508]},"callee":null},"192:39":{"kind":"call","span":{"start":[192,39],"end":[192,108],"bytes":[6438,6507]},"callee":null},"193:3":{"kind":"call","span":{"start":[193,3],"end":[193,99],"bytes":[6512,6608]},"callee":null},"193:40":{"kind":"call","span":{"start":[193,40],"end":[193,98],"bytes":[6549,6607]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool.closure_1","kind":"function","span":{"start":[196,1],"end":[241,3],"bytes":[6614,8255]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[196,1],"end":[196,96],"bytes":[6614,6709]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[196,1],"end":[196,96],"bytes":[6614,6709]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"198:16":{"kind":"call","span":{"start":[198,16],"end":[198,38],"bytes":[6755,6777]},"callee":null},"199:11":{"kind":"call","span":{"start":[199,11],"end":[199,32],"bytes":[6802,6823]},"callee":null},"203:14":{"kind":"call","span":{"start":[203,14],"end":[203,39],"bytes":[6897,6922]},"callee":null},"207:7":{"kind":"call","span":{"start":[207,7],"end":[207,25],"bytes":[7052,7070]},"callee":null},"209:25":{"kind":"call","span":{"start":[209,25],"end":[209,52],"bytes":[7121,7148]},"callee":null},"213:12":{"kind":"call","span":{"start":[213,12],"end":[213,43],"bytes":[7223,7254]},"callee":null},"217:19":{"kind":"call","span":{"start":[217,19],"end":[217,44],"bytes":[7283,7308]},"callee":null},"218:11":{"kind":"call","span":{"start":[218,11],"end":[218,38],"bytes":[7333,7360]},"callee":null},"220:24":{"kind":"call","span":{"start":[220,24],"end":[220,54],"bytes":[7388,7418]},"callee":null},"221:11":{"kind":"call","span":{"start":[221,11],"end":[221,48],"bytes":[7443,7480]},"callee":null},"223:26":{"kind":"call","span":{"start":[223,26],"end":[223,58],"bytes":[7510,7542]},"callee":null},"224:11":{"kind":"call","span":{"start":[224,11],"end":[224,52],"bytes":[7567,7608]},"callee":null},"226:28":{"kind":"call","span":{"start":[226,28],"end":[226,63],"bytes":[7640,7675]},"callee":null},"227:11":{"kind":"call","span":{"start":[227,11],"end":[227,79],"bytes":[7700,7768]},"callee":null},"227:45":{"kind":"call","span":{"start":[227,45],"end":[227,78],"bytes":[7734,7767]},"callee":null},"229:30":{"kind":"call","span":{"start":[229,30],"end":[229,66],"bytes":[7802,7838]},"callee":null},"230:11":{"kind":"call","span":{"start":[230,11],"end":[230,82],"bytes":[7863,7934]},"callee":null},"230:46":{"kind":"call","span":{"start":[230,46],"end":[230,81],"bytes":[7898,7933]},"callee":null},"233:11":{"kind":"call","span":{"start":[233,11],"end":[233,29],"bytes":[7967,7985]},"callee":null},"235:10":{"kind":"call","span":{"start":[235,10],"end":[235,57],"bytes":[7999,8046]},"callee":null},"236:18":{"kind":"call","span":{"start":[236,18],"end":[236,38],"bytes":[8064,8084]},"callee":null},"238:11":{"kind":"call","span":{"start":[238,11],"end":[238,89],"bytes":[8113,8191]},"callee":null},"238:34":{"kind":"call","span":{"start":[238,34],"end":[238,67],"bytes":[8136,8169]},"callee":null},"238:52":{"kind":"call","span":{"start":[238,52],"end":[238,66],"bytes":[8154,8168]},"callee":null},"238:77":{"kind":"call","span":{"start":[238,77],"end":[238,88],"bytes":[8179,8190]},"callee":null},"240:10":{"kind":"call","span":{"start":[240,10],"end":[240,47],"bytes":[8210,8247]},"callee":null},"240:32":{"kind":"call","span":{"start":[240,32],"end":[240,46],"bytes":[8232,8246]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.StatusTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.StatusTool","kind":"function","span":{"start":[296,1],"end":[320,2],"bytes":[10062,11126]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StatusTool","parameters":[{"name":"configPath","type":"string","span":{"start":[296,1],"end":[296,72],"bytes":[10062,10133]}}],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":4},"body":{"297:10":{"kind":"call","span":{"start":[297,10],"end":[301,3],"bytes":[10143,10486]},"callee":null},"298:3":{"kind":"call","span":{"start":[298,3],"end":[298,121],"bytes":[10178,10296]},"callee":null},"299:28":{"kind":"call","span":{"start":[299,28],"end":[299,92],"bytes":[10325,10389]},"callee":null},"299:3":{"kind":"call","span":{"start":[299,3],"end":[299,93],"bytes":[10300,10390]},"callee":null},"300:26":{"kind":"call","span":{"start":[300,26],"end":[300,90],"bytes":[10417,10481]},"callee":null},"300:3":{"kind":"call","span":{"start":[300,3],"end":[300,91],"bytes":[10394,10482]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.StatusTool/github.com/benbjohnson/litestream/cmd/litestream.StatusTool.closure_1","kind":"function","span":{"start":[303,1],"end":[319,3],"bytes":[10488,11124]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StatusTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[303,1],"end":[303,96],"bytes":[10488,10583]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[303,1],"end":[303,96],"bytes":[10488,10583]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"306:24":{"kind":"call","span":{"start":[306,24],"end":[306,51],"bytes":[10659,10686]},"callee":null},"309:10":{"kind":"call","span":{"start":[309,10],"end":[309,41],"bytes":[10736,10767]},"callee":null},"310:19":{"kind":"call","span":{"start":[310,19],"end":[310,44],"bytes":[10786,10811]},"callee":null},"311:11":{"kind":"call","span":{"start":[311,11],"end":[311,29],"bytes":[10836,10854]},"callee":null},"313:10":{"kind":"call","span":{"start":[313,10],"end":[313,57],"bytes":[10868,10915]},"callee":null},"314:18":{"kind":"call","span":{"start":[314,18],"end":[314,38],"bytes":[10933,10953]},"callee":null},"316:11":{"kind":"call","span":{"start":[316,11],"end":[316,89],"bytes":[10982,11060]},"callee":null},"316:34":{"kind":"call","span":{"start":[316,34],"end":[316,67],"bytes":[11005,11038]},"callee":null},"316:52":{"kind":"call","span":{"start":[316,52],"end":[316,66],"bytes":[11023,11037]},"callee":null},"316:77":{"kind":"call","span":{"start":[316,77],"end":[316,88],"bytes":[11048,11059]},"callee":null},"318:10":{"kind":"call","span":{"start":[318,10],"end":[318,47],"bytes":[11079,11116]},"callee":null},"318:32":{"kind":"call","span":{"start":[318,32],"end":[318,46],"bytes":[11101,11115]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.VersionTool":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.VersionTool","kind":"function","span":{"start":[244,1],"end":[257,2],"bytes":[8259,8790]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.VersionTool","parameters":[],"return_type":"(github.com/mark3labs/mcp-go/mcp.Tool, github.com/mark3labs/mcp-go/server.ToolHandlerFunc)","metrics":{"cyclomatic":2},"body":{"245:10":{"kind":"call","span":{"start":[245,10],"end":[247,3],"bytes":[8324,8423]},"callee":null},"246:3":{"kind":"call","span":{"start":[246,3],"end":[246,62],"bytes":[8360,8419]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.VersionTool/github.com/benbjohnson/litestream/cmd/litestream.VersionTool.closure_1","kind":"function","span":{"start":[249,1],"end":[256,3],"bytes":[8425,8788]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.VersionTool.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[249,1],"end":[249,96],"bytes":[8425,8520]}},{"name":"req","type":"github.com/mark3labs/mcp-go/mcp.CallToolRequest","span":{"start":[249,1],"end":[249,96],"bytes":[8425,8520]}}],"return_type":"(*github.com/mark3labs/mcp-go/mcp.CallToolResult, error)","error_channel":["error"],"body":{"250:10":{"kind":"call","span":{"start":[250,10],"end":[250,59],"bytes":[8530,8579]},"callee":null},"251:18":{"kind":"call","span":{"start":[251,18],"end":[251,38],"bytes":[8597,8617]},"callee":null},"253:11":{"kind":"call","span":{"start":[253,11],"end":[253,89],"bytes":[8646,8724]},"callee":null},"253:34":{"kind":"call","span":{"start":[253,34],"end":[253,67],"bytes":[8669,8702]},"callee":null},"253:52":{"kind":"call","span":{"start":[253,52],"end":[253,66],"bytes":[8687,8701]},"callee":null},"253:77":{"kind":"call","span":{"start":[253,77],"end":[253,88],"bytes":[8712,8723]},"callee":null},"255:10":{"kind":"call","span":{"start":[255,10],"end":[255,47],"bytes":[8743,8780]},"callee":null},"255:32":{"kind":"call","span":{"start":[255,32],"end":[255,46],"bytes":[8765,8779]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.isReplicaURL":{"id":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.isReplicaURL","kind":"function","span":{"start":[79,1],"end":[81,2],"bytes":[1931,2008]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.isReplicaURL","parameters":[{"name":"path","type":"string","span":{"start":[79,1],"end":[79,38],"bytes":[1931,1968]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"80:9":{"kind":"call","span":{"start":[80,9],"end":[80,38],"bytes":[1977,2006]},"callee":null}}}},"content_hash":"8cec3283fc0c78fde1799fdc8062ab78364af351093c2e6f302fa2bc67bb60a7"},"cmd/litestream/register.go":{"id":"can://go/litestream/cmd/litestream/register.go","kind":"module","span":{"start":[1,1],"end":[170,1],"bytes":[0,4462]},"package":"main","source":"package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\ntype RegisterCommand struct{}\n\nfunc (c *RegisterCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-register\", flag.ContinueOnError)\n\ttimeout := fs.Int(\"timeout\", 30, \"timeout in seconds\")\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\treplicaFlag := fs.String(\"replica\", \"\", \"replica URL (e.g., s3://bucket/prefix, file:///backup/path)\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() == 0 {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path required\",\n\t\t\thint: \"litestream register -replica s3://bucket/prefix /path/to/db\",\n\t\t}\n\t}\n\tif fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\tif *replicaFlag == \"\" {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"-replica is required\",\n\t\t\thint: \"litestream register -replica s3://bucket/prefix /path/to/db\",\n\t\t}\n\t}\n\tif *timeout \u003c= 0 {\n\t\treturn fmt.Errorf(\"timeout must be greater than 0\")\n\t}\n\n\tdbPath := fs.Arg(0)\n\treplicaURL := *replicaFlag\n\n\t// Create HTTP client that connects via Unix socket with timeout.\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\treq := litestream.RegisterDatabaseRequest{\n\t\tPath: dbPath,\n\t\tReplicaURL: replicaURL,\n\t}\n\treqBody, err := json.Marshal(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\tresp, err := client.Post(\"http://localhost/register\", \"application/json\", bytes.NewReader(reqBody))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"register failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"register failed: %s\", string(body))\n\t}\n\n\tvar result litestream.RegisterDatabaseResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tconfirmation := RegisterResult{\n\t\tStatus: result.Status,\n\t\tDBPath: result.Path,\n\t\tReplica: replicaURL,\n\t\tSocket: *socketPath,\n\t}\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(confirmation, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"status: %s\\n\", registerDisplayStatus(confirmation.Status))\n\tfmt.Printf(\"db_path: %s\\n\", confirmation.DBPath)\n\tfmt.Printf(\"replica: %s\\n\", confirmation.Replica)\n\tfmt.Printf(\"socket: %s\\n\", confirmation.Socket)\n\n\treturn nil\n}\n\ntype RegisterResult struct {\n\tStatus string `json:\"status\"`\n\tDBPath string `json:\"db_path\"`\n\tReplica string `json:\"replica\"`\n\tSocket string `json:\"socket\"`\n}\n\nfunc registerDisplayStatus(status string) string {\n\tif status == \"already_registered\" {\n\t\treturn \"already registered\"\n\t}\n\treturn status\n}\n\nfunc (c *RegisterCommand) Usage() {\n\tfmt.Println(`\nusage: litestream register [OPTIONS] DB_PATH\n\nRegister a database for replication.\n\nArguments:\n DB_PATH Path to the SQLite database file.\n\nOptions:\n -replica URL\n Replica destination URL (e.g., s3://bucket/prefix, file:///backup/path).\n Required.\n\n -timeout SECONDS\n Maximum time to wait in seconds (default: 30).\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -json\n Output raw JSON instead of human-readable text.\n\nExamples:\n # Register a database with an S3 replica.\n $ litestream register -replica s3://mybucket/db /path/to/db\n\n # Register a database with a file replica.\n $ litestream register -replica file:///backup/path /path/to/db\n\n # Register using a non-default control socket.\n $ litestream register -socket /tmp/litestream.sock -replica s3://mybucket/db /path/to/db\n\n # Register and emit a JSON confirmation.\n $ litestream register -json -replica s3://mybucket/db /path/to/db\n`[1:])\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"json","path":"encoding/json","span":{"start":[6,1],"end":[6,17],"bytes":[43,59]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[60,67]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[68,74]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[75,80]}},{"name":"net","path":"net","span":{"start":[10,1],"end":[10,7],"bytes":[81,87]}},{"name":"http","path":"net/http","span":{"start":[11,1],"end":[11,12],"bytes":[88,99]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[100,107]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[14,1],"end":[14,37],"bytes":[109,145]}}],"types":{"RegisterCommand":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand","kind":"struct","span":{"start":[17,1],"end":[17,30],"bytes":[149,178]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run","kind":"method","span":{"start":[19,1],"end":[117,2],"bytes":[180,3136]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[19,1],"end":[19,74],"bytes":[180,253]}},{"name":"args","type":"[]string","span":{"start":[19,1],"end":[19,74],"bytes":[180,253]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":14},"body":{"103:18":{"kind":"call","span":{"start":[103,18],"end":[103,60],"bytes":[2729,2771]},"callee":null},"105:11":{"kind":"call","span":{"start":[105,11],"end":[105,59],"bytes":[2800,2848]},"callee":null},"107:15":{"kind":"call","span":{"start":[107,15],"end":[107,29],"bytes":[2867,2881]},"callee":null},"107:3":{"kind":"call","span":{"start":[107,3],"end":[107,30],"bytes":[2855,2882]},"callee":null},"111:2":{"kind":"call","span":{"start":[111,2],"end":[111,72],"bytes":[2901,2971]},"callee":null},"111:29":{"kind":"call","span":{"start":[111,29],"end":[111,71],"bytes":[2928,2970]},"callee":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.registerDisplayStatus"},"112:2":{"kind":"call","span":{"start":[112,2],"end":[112,50],"bytes":[2973,3021]},"callee":null},"113:2":{"kind":"call","span":{"start":[113,2],"end":[113,51],"bytes":[3023,3072]},"callee":null},"114:2":{"kind":"call","span":{"start":[114,2],"end":[114,49],"bytes":[3074,3121]},"callee":null},"20:8":{"kind":"call","span":{"start":[20,8],"end":[20,68],"bytes":[261,321]},"callee":null},"21:13":{"kind":"call","span":{"start":[21,13],"end":[21,56],"bytes":[334,377]},"callee":null},"22:16":{"kind":"call","span":{"start":[22,16],"end":[22,86],"bytes":[393,463]},"callee":null},"23:17":{"kind":"call","span":{"start":[23,17],"end":[23,104],"bytes":[480,567]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,57],"bytes":[583,624]},"callee":null},"26:12":{"kind":"call","span":{"start":[26,12],"end":[26,26],"bytes":[656,670]},"callee":null},"30:5":{"kind":"call","span":{"start":[30,5],"end":[30,14],"bytes":[706,715]},"callee":null},"36:5":{"kind":"call","span":{"start":[36,5],"end":[36,14],"bytes":[869,878]},"callee":null},"37:10":{"kind":"call","span":{"start":[37,10],"end":[37,42],"bytes":[894,926]},"callee":null},"46:10":{"kind":"call","span":{"start":[46,10],"end":[46,54],"bytes":[1124,1168]},"callee":null},"49:12":{"kind":"call","span":{"start":[49,12],"end":[49,21],"bytes":[1184,1193]},"callee":null},"53:19":{"kind":"call","span":{"start":[53,19],"end":[53,42],"bytes":[1308,1331]},"callee":null},"67:18":{"kind":"call","span":{"start":[67,18],"end":[67,35],"bytes":[1690,1707]},"callee":null},"69:10":{"kind":"call","span":{"start":[69,10],"end":[69,58],"bytes":[1734,1782]},"callee":null},"72:15":{"kind":"call","span":{"start":[72,15],"end":[72,101],"bytes":[1801,1887]},"callee":null},"72:76":{"kind":"call","span":{"start":[72,76],"end":[72,100],"bytes":[1862,1886]},"callee":null},"74:10":{"kind":"call","span":{"start":[74,10],"end":[74,68],"bytes":[1914,1972]},"callee":null},"76:8":{"kind":"call","span":{"start":[76,8],"end":[76,25],"bytes":[1983,2000]},"callee":null},"78:15":{"kind":"call","span":{"start":[78,15],"end":[78,36],"bytes":[2016,2037]},"callee":null},"80:10":{"kind":"call","span":{"start":[80,10],"end":[80,56],"bytes":[2064,2110]},"callee":null},"85:13":{"kind":"call","span":{"start":[85,13],"end":[85,43],"bytes":[2205,2235]},"callee":null},"86:11":{"kind":"call","span":{"start":[86,11],"end":[86,59],"bytes":[2283,2331]},"callee":null},"88:10":{"kind":"call","span":{"start":[88,10],"end":[88,57],"bytes":[2345,2392]},"callee":null},"88:44":{"kind":"call","span":{"start":[88,44],"end":[88,56],"bytes":[2379,2391]},"callee":null},"92:12":{"kind":"call","span":{"start":[92,12],"end":[92,41],"bytes":[2456,2485]},"callee":null},"93:10":{"kind":"call","span":{"start":[93,10],"end":[93,57],"bytes":[2509,2556]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run.closure_1","kind":"function","span":{"start":[57,1],"end":[59,6],"bytes":[1427,1568]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[57,1],"end":[57,73],"bytes":[1427,1499]}},{"name":"_","type":"string","span":{"start":[57,1],"end":[57,73],"bytes":[1427,1499]}},{"name":"_","type":"string","span":{"start":[57,1],"end":[57,73],"bytes":[1427,1499]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"58:12":{"kind":"call","span":{"start":[58,12],"end":[58,63],"bytes":[1511,1562]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Usage":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Usage","kind":"method","span":{"start":[133,1],"end":[169,2],"bytes":[3439,4461]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"134:2":{"kind":"call","span":{"start":[134,2],"end":[168,7],"bytes":[3476,4459]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv"}}}}},"RegisterResult":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterResult","kind":"struct","span":{"start":[119,1],"end":[124,2],"bytes":[3138,3298]},"callables":{},"fields":{"DBPath":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterResult/DBPath","kind":"field","type":"string","span":{"start":[121,1],"end":[121,33],"bytes":[3199,3231]}},"Replica":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterResult/Replica","kind":"field","type":"string","span":{"start":[122,1],"end":[122,33],"bytes":[3232,3264]}},"Socket":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterResult/Socket","kind":"field","type":"string","span":{"start":[123,1],"end":[123,32],"bytes":[3265,3296]}},"Status":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterResult/Status","kind":"field","type":"string","span":{"start":[120,1],"end":[120,32],"bytes":[3167,3198]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.registerDisplayStatus":{"id":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.registerDisplayStatus","kind":"function","span":{"start":[126,1],"end":[131,2],"bytes":[3300,3437]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.registerDisplayStatus","parameters":[{"name":"status","type":"string","span":{"start":[126,1],"end":[126,51],"bytes":[3300,3350]}}],"return_type":"string","metrics":{"cyclomatic":2},"body":{}}},"content_hash":"bf7bcf0236ce1cfa7d72cbccf088d6c7625953264d19f1ec781e8b562b17b80e"},"cmd/litestream/replicate.go":{"id":"can://go/litestream/cmd/litestream/replicate.go","kind":"module","span":{"start":[1,1],"end":[576,1],"bytes":[0,18077]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"net\"\n\t\"net/http\"\n\t_ \"net/http/pprof\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"github.com/mattn/go-shellwords\"\n\t\"github.com/prometheus/client_golang/prometheus/promhttp\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/abs\"\n\t\"github.com/benbjohnson/litestream/file\"\n\t\"github.com/benbjohnson/litestream/gs\"\n\t\"github.com/benbjohnson/litestream/internal\"\n\t\"github.com/benbjohnson/litestream/nats\"\n\t\"github.com/benbjohnson/litestream/oss\"\n\t\"github.com/benbjohnson/litestream/s3\"\n\t\"github.com/benbjohnson/litestream/sftp\"\n)\n\n// ReplicateCommand represents a command that continuously replicates SQLite databases.\ntype ReplicateCommand struct {\n\tcmd *exec.Cmd // subcommand\n\texecCh chan error // subcommand error channel\n\n\t// One-shot replication flags\n\tonce bool // replicate once and exit\n\tforceSnapshot bool // force snapshot to all replicas\n\tenforceRetention bool // enforce retention of old snapshots\n\n\tConfig Config\n\n\t// MCP server\n\tMCP *MCPServer\n\n\t// Server for IPC control commands.\n\tServer *litestream.Server\n\n\t// Manages the set of databases \u0026 compaction levels.\n\tStore *litestream.Store\n\n\t// Directory monitors for dynamic database discovery.\n\tdirectoryMonitors []*DirectoryMonitor\n\n\t// Done channel for interrupt handling during shutdown. When closed,\n\t// the shutdown sync retry loop exits and any in-flight sync is cancelled.\n\tdone \u003c-chan struct{}\n}\n\nfunc NewReplicateCommand() *ReplicateCommand {\n\treturn \u0026ReplicateCommand{\n\t\texecCh: make(chan error),\n\t}\n}\n\n// ParseFlags parses the CLI flags and loads the configuration file.\nfunc (c *ReplicateCommand) ParseFlags(_ context.Context, args []string) (err error) {\n\tfs := flag.NewFlagSet(\"litestream-replicate\", flag.ContinueOnError)\n\texecFlag := fs.String(\"exec\", \"\", \"execute subcommand\")\n\tlogLevelFlag := fs.String(\"log-level\", \"\", \"log level (trace, debug, info, warn, error)\")\n\trestoreIfDBNotExists := fs.Bool(\"restore-if-db-not-exists\", false, \"restore from replica if database doesn't exist\")\n\tonceFlag := fs.Bool(\"once\", false, \"replicate once and exit\")\n\tforceSnapshotFlag := fs.Bool(\"force-snapshot\", false, \"force snapshot when replicating once\")\n\tenforceRetentionFlag := fs.Bool(\"enforce-retention\", false, \"enforce retention of old snapshots when replicating once\")\n\tconfigPath, noExpandEnv := registerConfigFlag(fs)\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\t// Load configuration or use CLI args to build db/replica.\n\tswitch fs.NArg() {\n\tcase 0:\n\t\t// No arguments provided, use config file\n\t\tif *configPath == \"\" {\n\t\t\t*configPath = DefaultConfigPath()\n\t\t}\n\t\tif c.Config, err = ReadConfigFile(*configPath, !*noExpandEnv); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Override log level if CLI flag provided (takes precedence over env var)\n\t\tif *logLevelFlag != \"\" {\n\t\t\tc.Config.Logging.Level = *logLevelFlag\n\t\t\t// Set env var so initLog sees CLI flag as highest priority\n\t\t\tos.Setenv(\"LOG_LEVEL\", *logLevelFlag)\n\t\t\tlogOutput := os.Stdout\n\t\t\tif c.Config.Logging.Stderr {\n\t\t\t\tlogOutput = os.Stderr\n\t\t\t}\n\t\t\tinternal.InitLog(logOutput, c.Config.Logging.Level, c.Config.Logging.Type, c.Config.Logging.Source)\n\t\t}\n\n\tcase 1:\n\t\t// Only database path provided, missing replica URL\n\t\treturn fmt.Errorf(\"must specify at least one replica URL for %s\", fs.Arg(0))\n\n\tdefault:\n\t\t// Database path and replica URLs provided via CLI\n\t\tif *configPath != \"\" {\n\t\t\treturn fmt.Errorf(\"cannot specify a replica URL and the -config flag\")\n\t\t}\n\n\t\t// Initialize config with defaults when using command-line arguments\n\t\tc.Config = DefaultConfig()\n\t\tlogLevel := \"INFO\"\n\t\tif *logLevelFlag != \"\" {\n\t\t\tlogLevel = *logLevelFlag\n\t\t\t// Set env var so initLog sees CLI flag as highest priority\n\t\t\tos.Setenv(\"LOG_LEVEL\", *logLevelFlag)\n\t\t}\n\t\tc.Config.Logging.Level = logLevel\n\t\tinternal.InitLog(os.Stdout, logLevel, \"text\", false)\n\n\t\tdbConfig := \u0026DBConfig{\n\t\t\tPath: fs.Arg(0),\n\t\t\tRestoreIfDBNotExists: *restoreIfDBNotExists,\n\t\t}\n\t\tfor _, u := range fs.Args()[1:] {\n\t\t\t// Check if this looks like a flag that was placed after positional arguments\n\t\t\tif strings.HasPrefix(u, \"-\") {\n\t\t\t\treturn fmt.Errorf(\"flag %q must be positioned before DB_PATH and REPLICA_URL arguments\", u)\n\t\t\t}\n\t\t\tsyncInterval := litestream.DefaultSyncInterval\n\t\t\tdbConfig.Replicas = append(dbConfig.Replicas, \u0026ReplicaConfig{\n\t\t\t\tURL: u,\n\t\t\t\tReplicaSettings: ReplicaSettings{\n\t\t\t\t\tSyncInterval: \u0026syncInterval,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\tc.Config.DBs = []*DBConfig{dbConfig}\n\t}\n\n\tc.Config.ConfigPath = *configPath\n\n\t// Override config exec command, if specified.\n\tif *execFlag != \"\" {\n\t\tc.Config.Exec = *execFlag\n\t}\n\n\t// Apply restore-if-db-not-exists flag to all databases if specified.\n\t// This allows the CLI flag to work with config files.\n\tif *restoreIfDBNotExists {\n\t\tfor _, dbConfig := range c.Config.DBs {\n\t\t\tdbConfig.RestoreIfDBNotExists = true\n\t\t}\n\t}\n\n\t// Set one-shot replication flags and validate their usage.\n\tc.once = *onceFlag\n\tc.forceSnapshot = *forceSnapshotFlag\n\tc.enforceRetention = *enforceRetentionFlag\n\n\t// Validate flag combinations.\n\tif c.once \u0026\u0026 c.Config.Exec != \"\" {\n\t\treturn fmt.Errorf(\"cannot specify -once flag with -exec\")\n\t}\n\tif c.forceSnapshot \u0026\u0026 !c.once {\n\t\treturn fmt.Errorf(\"cannot specify -force-snapshot flag without -once\")\n\t}\n\tif c.enforceRetention \u0026\u0026 !c.once {\n\t\treturn fmt.Errorf(\"cannot specify -enforce-retention flag without -once\")\n\t}\n\n\treturn nil\n}\n\n// Run loads all databases specified in the configuration.\nfunc (c *ReplicateCommand) Run(ctx context.Context) (err error) {\n\t// Display version information.\n\tslog.Info(\"litestream\", \"version\", Version, \"level\", c.Config.Logging.Level)\n\n\t// Start MCP server if enabled\n\tif c.Config.MCPAddr != \"\" {\n\t\tc.MCP, err = NewMCP(ctx, c.Config.ConfigPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgo c.MCP.Start(c.Config.MCPAddr)\n\t}\n\n\t// Setup databases.\n\tif len(c.Config.DBs) == 0 {\n\t\tslog.Error(\"no databases specified in configuration\")\n\t}\n\n\t// Attempt restore for databases that need it (before creating DB objects)\n\tfor _, dbConfig := range c.Config.DBs {\n\t\tif dbConfig.RestoreIfDBNotExists \u0026\u0026 dbConfig.Path != \"\" {\n\t\t\tif err := c.restoreIfNeeded(ctx, dbConfig); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tvar dbs []*litestream.DB\n\tvar watchables []struct {\n\t\tconfig *DBConfig\n\t\tdbs []*litestream.DB\n\t}\n\tfor _, dbConfig := range c.Config.DBs {\n\t\t// Handle directory configuration\n\t\tif dbConfig.Dir != \"\" {\n\t\t\tdirDbs, err := NewDBsFromDirectoryConfig(dbConfig)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdbs = append(dbs, dirDbs...)\n\t\t\tslog.Info(\"found databases in directory\", \"dir\", dbConfig.Dir, \"count\", len(dirDbs), \"watch\", dbConfig.Watch)\n\t\t\tif dbConfig.Watch {\n\t\t\t\twatchables = append(watchables, struct {\n\t\t\t\t\tconfig *DBConfig\n\t\t\t\t\tdbs []*litestream.DB\n\t\t\t\t}{config: dbConfig, dbs: dirDbs})\n\t\t\t}\n\t\t} else {\n\t\t\t// Handle single database configuration\n\t\t\tdb, err := NewDBFromConfig(dbConfig)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdbs = append(dbs, db)\n\t\t}\n\t}\n\n\tlevels := c.Config.CompactionLevels()\n\tc.Store = litestream.NewStore(dbs, levels)\n\n\t// Only override default snapshot interval if explicitly set in config\n\tif c.Config.Snapshot.Interval != nil {\n\t\tc.Store.SnapshotInterval = *c.Config.Snapshot.Interval\n\t}\n\t// Only override default snapshot retention if explicitly set in config\n\tif c.Config.Snapshot.Retention != nil {\n\t\tc.Store.SnapshotRetention = *c.Config.Snapshot.Retention\n\t}\n\tif c.Config.L0Retention != nil {\n\t\tc.Store.SetL0Retention(*c.Config.L0Retention)\n\t}\n\tif c.Config.L0RetentionCheckInterval != nil {\n\t\tc.Store.L0RetentionCheckInterval = *c.Config.L0RetentionCheckInterval\n\t}\n\tif c.Config.ShutdownSyncTimeout != nil {\n\t\tc.Store.SetShutdownSyncTimeout(*c.Config.ShutdownSyncTimeout)\n\t}\n\tif c.Config.ShutdownSyncInterval != nil {\n\t\tc.Store.SetShutdownSyncInterval(*c.Config.ShutdownSyncInterval)\n\t}\n\tif c.Config.VerifyCompaction {\n\t\tc.Store.SetVerifyCompaction(true)\n\t}\n\tif c.Config.Retention.Enabled != nil \u0026\u0026 !*c.Config.Retention.Enabled {\n\t\tc.Store.SetRetentionEnabled(false)\n\t}\n\tif c.Config.Validation.Interval != nil {\n\t\tc.Store.ValidationInterval = *c.Config.Validation.Interval\n\t}\n\tif c.done != nil {\n\t\tc.Store.SetDone(c.done)\n\t}\n\tif c.Config.HeartbeatURL != \"\" {\n\t\tinterval := litestream.DefaultHeartbeatInterval\n\t\tif c.Config.HeartbeatInterval != nil {\n\t\t\tinterval = *c.Config.HeartbeatInterval\n\t\t}\n\t\tc.Store.Heartbeat = litestream.NewHeartbeatClient(c.Config.HeartbeatURL, interval)\n\t}\n\n\t// Disable all background monitors when running once.\n\t// This must be done after config settings are applied.\n\tif c.once {\n\t\tc.Store.CompactionMonitorEnabled = false\n\t\tc.Store.L0RetentionCheckInterval = 0\n\t\tfor _, db := range dbs {\n\t\t\tdb.MonitorInterval = 0\n\t\t\tif db.Replica != nil {\n\t\t\t\tdb.Replica.MonitorEnabled = false\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := c.Store.Open(ctx); err != nil {\n\t\treturn fmt.Errorf(\"cannot open store: %w\", err)\n\t}\n\n\tif !c.Store.RetentionEnabled {\n\t\tslog.Warn(\"retention disabled; cloud provider lifecycle policies must handle retention\",\n\t\t\t\"hint\", \"idle databases that stop receiving writes will not generate new snapshots and may lose backup coverage if cloud retention expires\")\n\t}\n\n\t// Start control server if socket is enabled\n\tif c.Config.Socket.Enabled {\n\t\tc.Server = litestream.NewServer(c.Store)\n\t\tc.Server.SocketPath = c.Config.Socket.Path\n\t\tc.Server.SocketPerms = c.Config.Socket.Permissions\n\t\tc.Server.PathExpander = expand\n\t\tc.Server.Version = Version\n\t\tif err := c.Server.Start(); err != nil {\n\t\t\tslog.Warn(\"failed to start control server\", \"error\", err)\n\t\t}\n\t}\n\n\tfor _, entry := range watchables {\n\t\tmonitor, err := NewDirectoryMonitor(ctx, c.Store, entry.config, entry.dbs)\n\t\tif err != nil {\n\t\t\tfor _, m := range c.directoryMonitors {\n\t\t\t\tm.Close()\n\t\t\t}\n\t\t\tif closeErr := c.Store.Close(ctx); closeErr != nil {\n\t\t\t\tslog.Error(\"failed to close store after monitor failure\", \"error\", closeErr)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"start directory monitor for %s: %w\", entry.config.Dir, err)\n\t\t}\n\t\tc.directoryMonitors = append(c.directoryMonitors, monitor)\n\t}\n\n\t// Notify user that initialization is done.\n\tfor _, db := range c.Store.DBs() {\n\t\tr := db.Replica\n\t\tslog.Info(\"initialized db\", \"path\", db.Path())\n\t\tslogWith := slog.With(\"type\", r.Client.Type(), \"sync-interval\", r.SyncInterval)\n\t\tswitch client := r.Client.(type) {\n\t\tcase *file.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"path\", client.Path())\n\t\tcase *s3.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"bucket\", client.Bucket, \"path\", client.Path, \"region\", client.Region, \"endpoint\", client.Endpoint)\n\t\tcase *gs.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"bucket\", client.Bucket, \"path\", client.Path)\n\t\tcase *abs.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"bucket\", client.Bucket, \"path\", client.Path, \"endpoint\", client.Endpoint)\n\t\tcase *sftp.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"host\", client.Host, \"user\", client.User, \"path\", client.Path)\n\t\tcase *nats.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"bucket\", client.BucketName, \"url\", client.URL)\n\t\tcase *oss.ReplicaClient:\n\t\t\tslogWith.Info(\"replicating to\", \"bucket\", client.Bucket, \"path\", client.Path, \"region\", client.Region)\n\t\tdefault:\n\t\t\tslogWith.Info(\"replicating to\")\n\t\t}\n\t}\n\n\t// Serve metrics over HTTP if enabled.\n\tif c.Config.Addr != \"\" {\n\t\thostport := c.Config.Addr\n\t\tif host, port, _ := net.SplitHostPort(c.Config.Addr); port == \"\" {\n\t\t\treturn fmt.Errorf(\"must specify port for bind address: %q\", c.Config.Addr)\n\t\t} else if host == \"\" {\n\t\t\thostport = net.JoinHostPort(\"localhost\", port)\n\t\t}\n\n\t\tslog.Info(\"serving metrics on\", \"url\", fmt.Sprintf(\"http://%s/metrics\", hostport))\n\t\tgo func() {\n\t\t\thttp.Handle(\"/metrics\", promhttp.Handler())\n\t\t\tif err := http.ListenAndServe(c.Config.Addr, nil); err != nil {\n\t\t\t\tslog.Error(\"cannot start metrics server\", \"error\", err)\n\t\t\t}\n\t\t}()\n\t}\n\n\t// Parse exec commands args \u0026 start subprocess.\n\tif c.Config.Exec != \"\" {\n\t\texecArgs, err := shellwords.Parse(c.Config.Exec)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot parse exec command: %w\", err)\n\t\t}\n\n\t\tc.cmd = exec.CommandContext(ctx, execArgs[0], execArgs[1:]...)\n\t\tc.cmd.Env = os.Environ()\n\t\tc.cmd.Stdout = os.Stdout\n\t\tc.cmd.Stderr = os.Stderr\n\t\tif err := c.cmd.Start(); err != nil {\n\t\t\treturn fmt.Errorf(\"cannot start exec command: %w\", err)\n\t\t}\n\t\tgo func() { c.execCh \u003c- c.cmd.Wait() }()\n\t} else if c.once {\n\t\t// Run one-shot replication in a goroutine so the caller can wait on execCh.\n\t\tgo c.runOnce(ctx)\n\t}\n\n\treturn nil\n}\n\n// runOnce performs one-shot replication for all databases.\n// It syncs all databases, optionally takes snapshots, and enforces retention.\nfunc (c *ReplicateCommand) runOnce(ctx context.Context) {\n\tvar err error\n\tdefer func() { c.execCh \u003c- err }()\n\n\tfor _, db := range c.Store.DBs() {\n\t\tslog.Info(\"syncing database\", \"path\", db.Path())\n\n\t\t// Sync the database to process any pending WAL changes.\n\t\tif err = db.Sync(ctx); err != nil {\n\t\t\terr = fmt.Errorf(\"sync database %s: %w\", db.Path(), err)\n\t\t\treturn\n\t\t}\n\n\t\t// Sync the replica to upload any pending LTX files.\n\t\tif err = db.Replica.Sync(ctx); err != nil {\n\t\t\terr = fmt.Errorf(\"sync replica for %s: %w\", db.Path(), err)\n\t\t\treturn\n\t\t}\n\n\t\t// Force a snapshot if requested.\n\t\tif c.forceSnapshot {\n\t\t\tslog.Info(\"taking snapshot\", \"path\", db.Path())\n\t\t\tif _, err = db.Snapshot(ctx); err != nil {\n\t\t\t\terr = fmt.Errorf(\"snapshot %s: %w\", db.Path(), err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// Enforce retention if requested.\n\t\tif c.enforceRetention {\n\t\t\tslog.Info(\"enforcing retention\", \"path\", db.Path())\n\t\t\tif err = c.Store.EnforceSnapshotRetention(ctx, db); err != nil {\n\t\t\t\terr = fmt.Errorf(\"enforce retention for %s: %w\", db.Path(), err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tslog.Info(\"one-shot replication complete\")\n}\n\n// Close closes all open databases.\nfunc (c *ReplicateCommand) Close(ctx context.Context) error {\n\tfor _, monitor := range c.directoryMonitors {\n\t\tmonitor.Close()\n\t}\n\tc.directoryMonitors = nil\n\n\tif c.Server != nil {\n\t\tif err := c.Server.Close(); err != nil {\n\t\t\tslog.Error(\"error closing control server\", \"error\", err)\n\t\t}\n\t}\n\tif c.Store != nil {\n\t\tif err := c.Store.Close(ctx); err != nil {\n\t\t\tif errors.Is(err, litestream.ErrShutdownInterrupted) {\n\t\t\t\tslog.Warn(\"shutdown sync skipped by user interrupt\", \"error\", err)\n\t\t\t} else {\n\t\t\t\tslog.Error(\"failed to close database\", \"error\", err)\n\t\t\t}\n\t\t}\n\t}\n\tif c.Config.MCPAddr != \"\" \u0026\u0026 c.MCP != nil {\n\t\tif err := c.MCP.Close(); err != nil {\n\t\t\tslog.Error(\"error closing MCP server\", \"error\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// SetDone sets the done channel used for interrupt handling during shutdown.\n// When the channel is closed, the shutdown sync retry loop exits.\nfunc (c *ReplicateCommand) SetDone(done \u003c-chan struct{}) {\n\tc.done = done\n}\n\n// restoreIfNeeded restores a database from its replica if the database doesn't\n// exist and the RestoreIfDBNotExists option is enabled. If no backup exists\n// (first start scenario), it returns nil to allow fresh replication to begin.\nfunc (c *ReplicateCommand) restoreIfNeeded(ctx context.Context, dbConfig *DBConfig) error {\n\tdbPath, err := expand(dbConfig.Path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Skip if database already exists\n\tif _, err := os.Stat(dbPath); !os.IsNotExist(err) {\n\t\tslog.Info(\"database exists, skipping restore\", \"path\", dbPath)\n\t\treturn nil\n\t}\n\n\t// Get replica config (handles both Replica and Replicas fields)\n\tvar rc *ReplicaConfig\n\tif dbConfig.Replica != nil {\n\t\trc = dbConfig.Replica\n\t} else if len(dbConfig.Replicas) \u003e 0 {\n\t\trc = dbConfig.Replicas[0]\n\t} else {\n\t\treturn fmt.Errorf(\"no replica configured for database: %s\", dbPath)\n\t}\n\n\t// Create replica from config (nil db since we're just restoring)\n\tr, err := NewReplicaFromConfig(rc, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot create replica for restore: %w\", err)\n\t}\n\n\t// Attempt restore\n\topt := litestream.NewRestoreOptions()\n\topt.OutputPath = dbPath\n\n\tslog.Info(\"attempting restore before replication\", \"path\", dbPath)\n\tif err := r.Restore(ctx, opt); errors.Is(err, litestream.ErrTxNotAvailable) {\n\t\t// No backup exists yet (first start) - this is OK\n\t\tslog.Info(\"no backup found, starting fresh\", \"path\", dbPath)\n\t\treturn nil\n\t} else if err != nil {\n\t\treturn fmt.Errorf(\"restore failed: %w\", err)\n\t}\n\n\tslog.Info(\"restore completed\", \"path\", dbPath)\n\treturn nil\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *ReplicateCommand) Usage() {\n\tfmt.Printf(`\nThe replicate command starts a server to monitor \u0026 replicate databases.\nYou can specify your database \u0026 replicas in a configuration file or you can\nreplicate a single database file by specifying its path and its replicas in the\ncommand line arguments.\n\nUsage:\n\n\tlitestream replicate [arguments]\n\n\tlitestream replicate [arguments] DB_PATH REPLICA_URL\n\nArguments:\n\n\t-config PATH\n\t Specifies the configuration file.\n\t Defaults to %s\n\n\t-exec CMD\n\t Executes a subcommand. Litestream will exit when the child\n\t process exits. Useful for simple process management.\n\n\t-once\n\t Replicate once and exit. This performs a single sync of all\n\t databases and their replicas, then exits. Cannot be used with -exec.\n\n\t-force-snapshot\n\t Force a snapshot to be taken for all databases. Requires -once.\n\t This is useful for creating a complete backup before maintenance\n\t or when migrating databases between hosts.\n\n\t-enforce-retention\n\t Enforce retention policies for old snapshots. Requires -once.\n\t This removes snapshots that are older than the configured\n\t snapshot retention period.\n\n\t-log-level LEVEL\n\t Sets the log level. Overrides the config file setting.\n\t Valid values: trace, debug, info, warn, error\n\n\t-no-expand-env\n\t Disables environment variable expansion in configuration file.\n\n\t-restore-if-db-not-exists\n\t Restores the database from the replica if it doesn't exist.\n\t On first start with no backup, proceeds normally.\n\nRuntime control commands require the daemon control socket. This includes\nstart, stop, sync, register, unregister, info, and list. Enable it in the config:\n\n\tsocket:\n\t enabled: true\n\t path: /tmp/litestream.sock\n\n`[1:], DefaultConfigPath())\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"errors","path":"errors","span":{"start":[5,1],"end":[5,10],"bytes":[34,43]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[44,51]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[52,58]}},{"name":"slog","path":"log/slog","span":{"start":[8,1],"end":[8,12],"bytes":[59,70]}},{"name":"net","path":"net","span":{"start":[9,1],"end":[9,7],"bytes":[71,77]}},{"name":"http","path":"net/http","span":{"start":[10,1],"end":[10,12],"bytes":[78,89]}},{"name":"pprof","path":"net/http/pprof","alias":"_","span":{"start":[11,1],"end":[11,20],"bytes":[90,109]}},{"name":"os","path":"os","span":{"start":[12,1],"end":[12,6],"bytes":[110,115]}},{"name":"exec","path":"os/exec","span":{"start":[13,1],"end":[13,11],"bytes":[116,126]}},{"name":"strings","path":"strings","span":{"start":[14,1],"end":[14,11],"bytes":[127,137]}},{"name":"go-shellwords","path":"github.com/mattn/go-shellwords","span":{"start":[16,1],"end":[16,34],"bytes":[139,172]}},{"name":"promhttp","path":"github.com/prometheus/client_golang/prometheus/promhttp","span":{"start":[17,1],"end":[17,59],"bytes":[173,231]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[19,1],"end":[19,37],"bytes":[233,269]}},{"name":"abs","path":"github.com/benbjohnson/litestream/abs","span":{"start":[20,1],"end":[20,41],"bytes":[270,310]}},{"name":"file","path":"github.com/benbjohnson/litestream/file","span":{"start":[21,1],"end":[21,42],"bytes":[311,352]}},{"name":"gs","path":"github.com/benbjohnson/litestream/gs","span":{"start":[22,1],"end":[22,40],"bytes":[353,392]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[23,1],"end":[23,46],"bytes":[393,438]}},{"name":"nats","path":"github.com/benbjohnson/litestream/nats","span":{"start":[24,1],"end":[24,42],"bytes":[439,480]}},{"name":"oss","path":"github.com/benbjohnson/litestream/oss","span":{"start":[25,1],"end":[25,41],"bytes":[481,521]}},{"name":"s3","path":"github.com/benbjohnson/litestream/s3","span":{"start":[26,1],"end":[26,40],"bytes":[522,561]}},{"name":"sftp","path":"github.com/benbjohnson/litestream/sftp","span":{"start":[27,1],"end":[27,42],"bytes":[562,603]}}],"types":{"ReplicateCommand":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand","kind":"struct","span":{"start":[31,1],"end":[57,2],"bytes":[695,1464]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","kind":"method","span":{"start":[436,1],"end":[462,2],"bytes":[13759,14486]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[436,1],"end":[436,62],"bytes":[13759,13820]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"438:3":{"kind":"call","span":{"start":[438,3],"end":[438,18],"bytes":[13870,13885]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close"},"443:13":{"kind":"call","span":{"start":[443,13],"end":[443,29],"bytes":[13951,13967]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Close"},"444:4":{"kind":"call","span":{"start":[444,4],"end":[444,60],"bytes":[13985,14041]},"callee":null},"448:13":{"kind":"call","span":{"start":[448,13],"end":[448,31],"bytes":[14082,14100]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Close"},"449:7":{"kind":"call","span":{"start":[449,7],"end":[449,56],"bytes":[14121,14170]},"callee":null},"450:5":{"kind":"call","span":{"start":[450,5],"end":[450,71],"bytes":[14177,14243]},"callee":null},"452:5":{"kind":"call","span":{"start":[452,5],"end":[452,57],"bytes":[14260,14312]},"callee":null},"457:13":{"kind":"call","span":{"start":[457,13],"end":[457,26],"bytes":[14382,14395]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Close"},"458:4":{"kind":"call","span":{"start":[458,4],"end":[458,56],"bytes":[14413,14465]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","kind":"method","span":{"start":[66,1],"end":[175,2],"bytes":[1643,5439]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","parameters":[{"name":"_","type":"context.Context","span":{"start":[66,1],"end":[66,86],"bytes":[1643,1728]}},{"name":"args","type":"[]string","span":{"start":[66,1],"end":[66,86],"bytes":[1643,1728]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":20},"body":{"104:10":{"kind":"call","span":{"start":[104,10],"end":[104,79],"bytes":[3285,3354]},"callee":null},"104:69":{"kind":"call","span":{"start":[104,69],"end":[104,78],"bytes":[3344,3353]},"callee":null},"109:11":{"kind":"call","span":{"start":[109,11],"end":[109,74],"bytes":[3454,3517]},"callee":null},"113:14":{"kind":"call","span":{"start":[113,14],"end":[113,29],"bytes":[3607,3622]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig"},"118:4":{"kind":"call","span":{"start":[118,4],"end":[118,41],"bytes":[3765,3802]},"callee":null},"121:3":{"kind":"call","span":{"start":[121,3],"end":[121,55],"bytes":[3845,3897]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"},"124:26":{"kind":"call","span":{"start":[124,26],"end":[124,35],"bytes":[3949,3958]},"callee":null},"127:21":{"kind":"call","span":{"start":[127,21],"end":[127,30],"bytes":[4032,4041]},"callee":null},"129:7":{"kind":"call","span":{"start":[129,7],"end":[129,32],"bytes":[4135,4160]},"callee":null},"130:12":{"kind":"call","span":{"start":[130,12],"end":[130,96],"bytes":[4174,4258]},"callee":null},"133:24":{"kind":"call","span":{"start":[133,24],"end":[138,6],"bytes":[4337,4475]},"callee":null},"165:10":{"kind":"call","span":{"start":[165,10],"end":[165,60],"bytes":[5147,5197]},"callee":null},"168:10":{"kind":"call","span":{"start":[168,10],"end":[168,73],"bytes":[5243,5306]},"callee":null},"171:10":{"kind":"call","span":{"start":[171,10],"end":[171,76],"bytes":[5355,5421]},"callee":null},"67:8":{"kind":"call","span":{"start":[67,8],"end":[67,69],"bytes":[1736,1797]},"callee":null},"68:14":{"kind":"call","span":{"start":[68,14],"end":[68,57],"bytes":[1811,1854]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"69:18":{"kind":"call","span":{"start":[69,18],"end":[69,91],"bytes":[1872,1945]},"callee":null},"70:26":{"kind":"call","span":{"start":[70,26],"end":[70,118],"bytes":[1971,2063]},"callee":null},"71:14":{"kind":"call","span":{"start":[71,14],"end":[71,63],"bytes":[2077,2126]},"callee":null},"72:23":{"kind":"call","span":{"start":[72,23],"end":[72,95],"bytes":[2149,2221]},"callee":null},"73:26":{"kind":"call","span":{"start":[73,26],"end":[73,121],"bytes":[2247,2342]},"callee":null},"74:29":{"kind":"call","span":{"start":[74,29],"end":[74,51],"bytes":[2371,2393]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag"},"76:12":{"kind":"call","span":{"start":[76,12],"end":[76,26],"bytes":[2425,2439]},"callee":null},"81:9":{"kind":"call","span":{"start":[81,9],"end":[81,18],"bytes":[2539,2548]},"callee":null},"85:18":{"kind":"call","span":{"start":[85,18],"end":[85,37],"bytes":[2646,2665]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"},"87:22":{"kind":"call","span":{"start":[87,22],"end":[87,64],"bytes":[2691,2733]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"94:4":{"kind":"call","span":{"start":[94,4],"end":[94,41],"bytes":[2978,3015]},"callee":null},"99:4":{"kind":"call","span":{"start":[99,4],"end":[99,103],"bytes":[3108,3207]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"}}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","kind":"method","span":{"start":[178,1],"end":[390,2],"bytes":[5500,12474]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[178,1],"end":[178,66],"bytes":[5500,5565]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":53},"body":{"180:2":{"kind":"call","span":{"start":[180,2],"end":[180,78],"bytes":[5600,5676]},"callee":null},"184:16":{"kind":"call","span":{"start":[184,16],"end":[184,48],"bytes":[5754,5786]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP"},"188:6":{"kind":"call","span":{"start":[188,6],"end":[188,35],"bytes":[5828,5857]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start","is_goroutine":true},"192:5":{"kind":"call","span":{"start":[192,5],"end":[192,22],"bytes":[5887,5904]},"callee":null},"193:3":{"kind":"call","span":{"start":[193,3],"end":[193,56],"bytes":[5914,5967]},"callee":null},"199:14":{"kind":"call","span":{"start":[199,14],"end":[199,46],"bytes":[6162,6194]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded"},"213:19":{"kind":"call","span":{"start":[213,19],"end":[213,54],"bytes":[6459,6494]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig"},"217:10":{"kind":"call","span":{"start":[217,10],"end":[217,32],"bytes":[6543,6565]},"callee":null},"218:4":{"kind":"call","span":{"start":[218,4],"end":[218,113],"bytes":[6569,6678]},"callee":null},"218:76":{"kind":"call","span":{"start":[218,76],"end":[218,87],"bytes":[6641,6652]},"callee":null},"220:18":{"kind":"call","span":{"start":[220,18],"end":[223,38],"bytes":[6719,6835]},"callee":null},"227:15":{"kind":"call","span":{"start":[227,15],"end":[227,40],"bytes":[6909,6934]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"231:10":{"kind":"call","span":{"start":[231,10],"end":[231,25],"bytes":[6983,6998]},"callee":null},"235:12":{"kind":"call","span":{"start":[235,12],"end":[235,39],"bytes":[7018,7045]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.CompactionLevels"},"236:12":{"kind":"call","span":{"start":[236,12],"end":[236,44],"bytes":[7057,7089]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.NewStore"},"247:3":{"kind":"call","span":{"start":[247,3],"end":[247,48],"bytes":[7475,7520]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetL0Retention"},"253:3":{"kind":"call","span":{"start":[253,3],"end":[253,64],"bytes":[7690,7751]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetShutdownSyncTimeout"},"256:3":{"kind":"call","span":{"start":[256,3],"end":[256,66],"bytes":[7800,7863]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetShutdownSyncInterval"},"259:3":{"kind":"call","span":{"start":[259,3],"end":[259,36],"bytes":[7901,7934]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetVerifyCompaction"},"262:3":{"kind":"call","span":{"start":[262,3],"end":[262,37],"bytes":[8012,8046]},"callee":null},"268:3":{"kind":"call","span":{"start":[268,3],"end":[268,26],"bytes":[8178,8201]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetDone"},"275:23":{"kind":"call","span":{"start":[275,23],"end":[275,85],"bytes":[8398,8460]},"callee":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.NewHeartbeatClient"},"291:12":{"kind":"call","span":{"start":[291,12],"end":[291,29],"bytes":[8813,8830]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open"},"292:10":{"kind":"call","span":{"start":[292,10],"end":[292,50],"bytes":[8854,8894]},"callee":null},"296:3":{"kind":"call","span":{"start":[296,3],"end":[297,144],"bytes":[8933,9165]},"callee":null},"302:14":{"kind":"call","span":{"start":[302,14],"end":[302,43],"bytes":[9259,9288]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.NewServer"},"307:13":{"kind":"call","span":{"start":[307,13],"end":[307,29],"bytes":[9461,9477]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Start"},"308:4":{"kind":"call","span":{"start":[308,4],"end":[308,61],"bytes":[9495,9552]},"callee":null},"313:19":{"kind":"call","span":{"start":[313,19],"end":[313,77],"bytes":[9615,9673]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor"},"316:5":{"kind":"call","span":{"start":[316,5],"end":[316,14],"bytes":[9739,9748]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close"},"318:19":{"kind":"call","span":{"start":[318,19],"end":[318,37],"bytes":[9772,9790]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Close"},"319:5":{"kind":"call","span":{"start":[319,5],"end":[319,81],"bytes":[9814,9890]},"callee":null},"321:11":{"kind":"call","span":{"start":[321,11],"end":[321,82],"bytes":[9906,9977]},"callee":null},"323:25":{"kind":"call","span":{"start":[323,25],"end":[323,61],"bytes":[10006,10042]},"callee":null},"327:21":{"kind":"call","span":{"start":[327,21],"end":[327,34],"bytes":[10112,10125]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"329:3":{"kind":"call","span":{"start":[329,3],"end":[329,49],"bytes":[10148,10194]},"callee":null},"329:39":{"kind":"call","span":{"start":[329,39],"end":[329,48],"bytes":[10184,10193]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"330:15":{"kind":"call","span":{"start":[330,15],"end":[330,82],"bytes":[10209,10276]},"callee":null},"330:33":{"kind":"call","span":{"start":[330,33],"end":[330,48],"bytes":[10227,10242]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type"},"333:4":{"kind":"call","span":{"start":[333,4],"end":[333,58],"bytes":[10345,10399]},"callee":null},"333:44":{"kind":"call","span":{"start":[333,44],"end":[333,57],"bytes":[10385,10398]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.Path"},"335:4":{"kind":"call","span":{"start":[335,4],"end":[335,135],"bytes":[10429,10560]},"callee":null},"337:4":{"kind":"call","span":{"start":[337,4],"end":[337,81],"bytes":[10590,10667]},"callee":null},"339:4":{"kind":"call","span":{"start":[339,4],"end":[339,110],"bytes":[10698,10804]},"callee":null},"341:4":{"kind":"call","span":{"start":[341,4],"end":[341,98],"bytes":[10836,10930]},"callee":null},"343:4":{"kind":"call","span":{"start":[343,4],"end":[343,83],"bytes":[10962,11041]},"callee":null},"345:4":{"kind":"call","span":{"start":[345,4],"end":[345,106],"bytes":[11072,11174]},"callee":null},"347:4":{"kind":"call","span":{"start":[347,4],"end":[347,35],"bytes":[11189,11220]},"callee":null},"354:23":{"kind":"call","span":{"start":[354,23],"end":[354,55],"bytes":[11345,11377]},"callee":null},"355:11":{"kind":"call","span":{"start":[355,11],"end":[355,78],"bytes":[11402,11469]},"callee":null},"357:15":{"kind":"call","span":{"start":[357,15],"end":[357,50],"bytes":[11509,11544]},"callee":null},"360:3":{"kind":"call","span":{"start":[360,3],"end":[360,85],"bytes":[11552,11634]},"callee":null},"360:42":{"kind":"call","span":{"start":[360,42],"end":[360,84],"bytes":[11591,11633]},"callee":null},"361:6":{"kind":"call","span":{"start":[361,6],"end":[366,6],"bytes":[11640,11833]},"callee":null,"is_goroutine":true},"371:20":{"kind":"call","span":{"start":[371,20],"end":[371,51],"bytes":[11932,11963]},"callee":null},"373:11":{"kind":"call","span":{"start":[373,11],"end":[373,59],"bytes":[11992,12040]},"callee":null},"376:11":{"kind":"call","span":{"start":[376,11],"end":[376,65],"bytes":[12056,12110]},"callee":null},"377:15":{"kind":"call","span":{"start":[377,15],"end":[377,27],"bytes":[12125,12137]},"callee":null},"380:13":{"kind":"call","span":{"start":[380,13],"end":[380,26],"bytes":[12204,12217]},"callee":null},"381:11":{"kind":"call","span":{"start":[381,11],"end":[381,59],"bytes":[12242,12290]},"callee":null},"383:6":{"kind":"call","span":{"start":[383,6],"end":[383,43],"bytes":[12300,12337]},"callee":null,"is_goroutine":true},"386:6":{"kind":"call","span":{"start":[386,6],"end":[386,20],"bytes":[12442,12456]},"callee":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run.closure_1","kind":"function","span":{"start":[361,1],"end":[366,6],"bytes":[11635,11833]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run.closure_1","parameters":[],"body":{"362:28":{"kind":"call","span":{"start":[362,28],"end":[362,46],"bytes":[11676,11694]},"callee":null},"362:4":{"kind":"call","span":{"start":[362,4],"end":[362,47],"bytes":[11652,11695]},"callee":null},"363:14":{"kind":"call","span":{"start":[363,14],"end":[363,53],"bytes":[11709,11748]},"callee":null},"364:5":{"kind":"call","span":{"start":[364,5],"end":[364,60],"bytes":[11767,11822]},"callee":null}}},"closure_2":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run.closure_2","kind":"function","span":{"start":[383,1],"end":[383,43],"bytes":[12295,12337]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run.closure_2","parameters":[],"body":{"383:27":{"kind":"call","span":{"start":[383,27],"end":[383,39],"bytes":[12321,12333]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.SetDone":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.SetDone","kind":"method","span":{"start":[466,1],"end":[468,2],"bytes":[14633,14708]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.SetDone","parameters":[{"name":"done","type":"\u003c-chan struct{}","span":{"start":[466,1],"end":[466,59],"bytes":[14633,14691]}}],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Usage":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Usage","kind":"method","span":{"start":[519,1],"end":[575,2],"bytes":[16313,18076]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"520:2":{"kind":"call","span":{"start":[520,2],"end":[574,28],"bytes":[16351,18074]},"callee":null},"574:8":{"kind":"call","span":{"start":[574,8],"end":[574,27],"bytes":[18054,18073]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"}}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","kind":"method","span":{"start":[473,1],"end":[516,2],"bytes":[14946,16268]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[473,1],"end":[473,92],"bytes":[14946,15037]}},{"name":"dbConfig","type":"*github.com/benbjohnson/litestream/cmd/litestream.DBConfig","span":{"start":[473,1],"end":[473,92],"bytes":[14946,15037]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"474:17":{"kind":"call","span":{"start":[474,17],"end":[474,38],"bytes":[15054,15075]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand"},"480:15":{"kind":"call","span":{"start":[480,15],"end":[480,30],"bytes":[15160,15175]},"callee":null},"480:33":{"kind":"call","span":{"start":[480,33],"end":[480,51],"bytes":[15178,15196]},"callee":null},"481:3":{"kind":"call","span":{"start":[481,3],"end":[481,65],"bytes":[15201,15263]},"callee":null},"489:12":{"kind":"call","span":{"start":[489,12],"end":[489,34],"bytes":[15435,15457]},"callee":null},"492:10":{"kind":"call","span":{"start":[492,10],"end":[492,70],"bytes":[15511,15571]},"callee":null},"496:12":{"kind":"call","span":{"start":[496,12],"end":[496,41],"bytes":[15654,15683]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig"},"498:10":{"kind":"call","span":{"start":[498,10],"end":[498,66],"bytes":[15710,15766]},"callee":null},"502:9":{"kind":"call","span":{"start":[502,9],"end":[502,39],"bytes":[15799,15829]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions"},"505:2":{"kind":"call","span":{"start":[505,2],"end":[505,68],"bytes":[15857,15923]},"callee":null},"506:12":{"kind":"call","span":{"start":[506,12],"end":[506,31],"bytes":[15935,15954]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore"},"506:33":{"kind":"call","span":{"start":[506,33],"end":[506,77],"bytes":[15956,16000]},"callee":null},"508:3":{"kind":"call","span":{"start":[508,3],"end":[508,63],"bytes":[16058,16118]},"callee":null},"511:10":{"kind":"call","span":{"start":[511,10],"end":[511,47],"bytes":[16165,16202]},"callee":null},"514:2":{"kind":"call","span":{"start":[514,2],"end":[514,48],"bytes":[16208,16254]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","kind":"method","span":{"start":[394,1],"end":[433,2],"bytes":[12615,13721]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[394,1],"end":[394,58],"bytes":[12615,12672]}}],"metrics":{"cyclomatic":8},"body":{"396:8":{"kind":"call","span":{"start":[396,8],"end":[396,36],"bytes":[12695,12723]},"callee":null},"398:21":{"kind":"call","span":{"start":[398,21],"end":[398,34],"bytes":[12745,12758]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"399:3":{"kind":"call","span":{"start":[399,3],"end":[399,51],"bytes":[12763,12811]},"callee":null},"399:41":{"kind":"call","span":{"start":[399,41],"end":[399,50],"bytes":[12801,12810]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"402:12":{"kind":"call","span":{"start":[402,12],"end":[402,24],"bytes":[12883,12895]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync"},"403:10":{"kind":"call","span":{"start":[403,10],"end":[403,60],"bytes":[12919,12969]},"callee":null},"403:45":{"kind":"call","span":{"start":[403,45],"end":[403,54],"bytes":[12954,12963]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"408:12":{"kind":"call","span":{"start":[408,12],"end":[408,32],"bytes":[13051,13071]},"callee":null},"409:10":{"kind":"call","span":{"start":[409,10],"end":[409,63],"bytes":[13095,13148]},"callee":null},"409:48":{"kind":"call","span":{"start":[409,48],"end":[409,57],"bytes":[13133,13142]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"415:4":{"kind":"call","span":{"start":[415,4],"end":[415,51],"bytes":[13226,13273]},"callee":null},"415:41":{"kind":"call","span":{"start":[415,41],"end":[415,50],"bytes":[13263,13272]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"416:16":{"kind":"call","span":{"start":[416,16],"end":[416,32],"bytes":[13289,13305]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot"},"417:11":{"kind":"call","span":{"start":[417,11],"end":[417,56],"bytes":[13330,13375]},"callee":null},"417:41":{"kind":"call","span":{"start":[417,41],"end":[417,50],"bytes":[13360,13369]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"424:4":{"kind":"call","span":{"start":[424,4],"end":[424,55],"bytes":[13463,13514]},"callee":null},"424:45":{"kind":"call","span":{"start":[424,45],"end":[424,54],"bytes":[13504,13513]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"425:13":{"kind":"call","span":{"start":[425,13],"end":[425,54],"bytes":[13527,13568]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention"},"426:11":{"kind":"call","span":{"start":[426,11],"end":[426,69],"bytes":[13593,13651]},"callee":null},"426:54":{"kind":"call","span":{"start":[426,54],"end":[426,63],"bytes":[13636,13645]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"432:2":{"kind":"call","span":{"start":[432,2],"end":[432,44],"bytes":[13677,13719]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce.closure_1","kind":"function","span":{"start":[396,1],"end":[396,36],"bytes":[12688,12723]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce.closure_1","parameters":[],"body":{}}}}},"fields":{"Config":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/Config","kind":"field","type":"github.com/benbjohnson/litestream/cmd/litestream.Config","span":{"start":[40,1],"end":[40,15],"bytes":[1007,1021]}},"MCP":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/MCP","kind":"field","type":"*github.com/benbjohnson/litestream/cmd/litestream.MCPServer","span":{"start":[43,1],"end":[43,16],"bytes":[1038,1053]}},"Server":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/Server","kind":"field","type":"*github.com/benbjohnson/litestream.Server","span":{"start":[46,1],"end":[46,27],"bytes":[1092,1118]}},"Store":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/Store","kind":"field","type":"*github.com/benbjohnson/litestream.Store","span":{"start":[49,1],"end":[49,25],"bytes":[1174,1198]}},"cmd":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/cmd","kind":"field","type":"*os/exec.Cmd","span":{"start":[32,1],"end":[32,33],"bytes":[726,758]}},"directoryMonitors":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/directoryMonitors","kind":"field","type":"[]*github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor","span":{"start":[52,1],"end":[52,39],"bytes":[1255,1293]}},"done":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/done","kind":"field","type":"\u003c-chan struct{}","span":{"start":[56,1],"end":[56,22],"bytes":[1441,1462]}},"enforceRetention":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/enforceRetention","kind":"field","type":"bool","span":{"start":[38,1],"end":[38,61],"bytes":[945,1005]}},"execCh":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/execCh","kind":"field","type":"chan error","span":{"start":[33,1],"end":[33,47],"bytes":[759,805]}},"forceSnapshot":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/forceSnapshot","kind":"field","type":"bool","span":{"start":[37,1],"end":[37,57],"bytes":[888,944]}},"once":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/once","kind":"field","type":"bool","span":{"start":[36,1],"end":[36,50],"bytes":[838,887]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.NewReplicateCommand":{"id":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicateCommand","kind":"function","span":{"start":[59,1],"end":[63,2],"bytes":[1466,1572]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.NewReplicateCommand","parameters":[],"return_type":"*github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand","metrics":{"cyclomatic":1},"body":{"61:11":{"kind":"call","span":{"start":[61,11],"end":[61,27],"bytes":[1550,1566]},"callee":null}}}},"content_hash":"aaa1236d303151b5f8390be24542cffb535b6a3842d7b2142b724ffe9b9f4991"},"cmd/litestream/reset.go":{"id":"can://go/litestream/cmd/litestream/reset.go","kind":"module","span":{"start":[1,1],"end":[190,1],"bytes":[0,4629]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// ResetCommand is a command for resetting local Litestream state for a database.\ntype ResetCommand struct{}\n\n// Run executes the command.\nfunc (c *ResetCommand) Run(ctx context.Context, args []string) (err error) {\n\tfs := flag.NewFlagSet(\"litestream-reset\", flag.ContinueOnError)\n\tconfigPath, noExpandEnv := registerConfigFlag(fs)\n\tdryRun := fs.Bool(\"dry-run\", false, \"print local state that would be removed without deleting\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\t// Validate arguments - need exactly one database path\n\tif fs.NArg() == 0 {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path required\",\n\t\t\thint: \"litestream reset /path/to/db\",\n\t\t}\n\t} else if fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tdbPath := fs.Arg(0)\n\n\t// Make absolute if needed\n\tif !filepath.IsAbs(dbPath) {\n\t\tif dbPath, err = filepath.Abs(dbPath); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Load configuration to find the database (if config exists)\n\tvar dbConfig *DBConfig\n\tif *configPath != \"\" {\n\t\tconfig, configErr := ReadConfigFile(*configPath, !*noExpandEnv)\n\t\tif configErr != nil {\n\t\t\treturn fmt.Errorf(\"cannot read config: %w\", configErr)\n\t\t}\n\n\t\t// Find database config\n\t\tfor _, dbc := range config.DBs {\n\t\t\texpandedPath := dbc.Path\n\t\t\tif !filepath.IsAbs(expandedPath) {\n\t\t\t\texpandedPath, _ = filepath.Abs(expandedPath)\n\t\t\t}\n\t\t\tif expandedPath == dbPath {\n\t\t\t\tdbConfig = dbc\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// If no config found, check if database file exists\n\tif _, err := os.Stat(dbPath); os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"database does not exist: %s\", dbPath)\n\t} else if err != nil {\n\t\treturn fmt.Errorf(\"cannot access database: %w\", err)\n\t}\n\n\t// Create DB instance\n\tvar db *litestream.DB\n\tif dbConfig != nil {\n\t\tdb, err = NewDBFromConfig(dbConfig)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot create database from config: %w\", err)\n\t\t}\n\t} else {\n\t\tdb = litestream.NewDB(dbPath)\n\t}\n\n\t// Check if meta path exists\n\tmetaPath := db.MetaPath()\n\tif _, err := os.Stat(metaPath); os.IsNotExist(err) {\n\t\tfmt.Printf(\"No local state to reset for %s\\n\", dbPath)\n\t\tfmt.Printf(\"Meta directory does not exist: %s\\n\", metaPath)\n\t\treturn nil\n\t}\n\n\tif *dryRun {\n\t\tfiles, err := localLTXFiles(db.LTXDir())\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"dry run failed: %w\", err)\n\t\t}\n\n\t\tfmt.Printf(\"Dry run: local Litestream state would be reset for: %s\\n\", dbPath)\n\t\tfmt.Printf(\"Would remove: %s\\n\", db.LTXDir())\n\t\tif len(files) == 0 {\n\t\t\tfmt.Println(\"No local LTX files would be removed.\")\n\t\t\treturn nil\n\t\t}\n\n\t\tfmt.Println(\"Files that would be removed:\")\n\t\tfor _, file := range files {\n\t\t\tfmt.Printf(\" %s\\n\", file)\n\t\t}\n\t\tfmt.Println(\"No files were removed.\")\n\t\treturn nil\n\t}\n\n\t// Perform the reset\n\tfmt.Printf(\"Resetting local Litestream state for: %s\\n\", dbPath)\n\tfmt.Printf(\"Removing: %s\\n\", db.LTXDir())\n\n\tif err := db.ResetLocalState(ctx); err != nil {\n\t\treturn fmt.Errorf(\"reset failed: %w\", err)\n\t}\n\n\tfmt.Println(\"Reset complete. Next replication sync will create a fresh snapshot.\")\n\treturn nil\n}\n\nfunc localLTXFiles(root string) ([]string, error) {\n\tif _, err := os.Stat(root); os.IsNotExist(err) {\n\t\treturn nil, nil\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar files []string\n\tif err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif d.IsDir() {\n\t\t\treturn nil\n\t\t}\n\t\tfiles = append(files, path)\n\t\treturn nil\n\t}); err != nil {\n\t\treturn nil, err\n\t}\n\treturn files, nil\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *ResetCommand) Usage() {\n\tfmt.Printf(`\nThe reset command clears local Litestream state for a database.\n\nThis is useful for recovering from corrupted or missing LTX files. The reset\nremoves local LTX files from the metadata directory, forcing Litestream to\ncreate a fresh snapshot on the next sync. The database file itself is not\nmodified.\n\nUsage:\n\n\tlitestream reset [arguments] \u003cpath\u003e\n\nArguments:\n\n\t-config PATH\n\t Specifies the configuration file.\n\t Defaults to %s\n\n\t-no-expand-env\n\t Disables environment variable expansion in configuration file.\n\n\t-dry-run\n\t Print the local LTX files that would be removed without deleting them.\n\nExamples:\n\n\t# Reset local state for a specific database\n\tlitestream reset /path/to/database.db\n\n\t# Preview local files that would be removed\n\tlitestream reset -dry-run /path/to/database.db\n\n\t# Reset using a specific configuration file\n\tlitestream reset -config /etc/litestream.yml /path/to/database.db\n\n`[1:],\n\t\tDefaultConfigPath(),\n\t)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"flag","path":"flag","span":{"start":[5,1],"end":[5,8],"bytes":[34,41]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[42,48]}},{"name":"fs","path":"io/fs","span":{"start":[7,1],"end":[7,9],"bytes":[49,57]}},{"name":"os","path":"os","span":{"start":[8,1],"end":[8,6],"bytes":[58,63]}},{"name":"filepath","path":"path/filepath","span":{"start":[9,1],"end":[9,17],"bytes":[64,80]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[11,1],"end":[11,37],"bytes":[82,118]}}],"types":{"ResetCommand":{"id":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand","kind":"struct","span":{"start":[15,1],"end":[15,27],"bytes":[204,230]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run":{"id":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","kind":"method","span":{"start":[18,1],"end":[124,2],"bytes":[261,3146]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[18,1],"end":[18,77],"bytes":[261,337]}},{"name":"args","type":"[]string","span":{"start":[18,1],"end":[18,77],"bytes":[261,337]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":21},"body":{"100:3":{"kind":"call","span":{"start":[100,3],"end":[100,48],"bytes":[2508,2553]},"callee":null},"100:36":{"kind":"call","span":{"start":[100,36],"end":[100,47],"bytes":[2541,2552]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir"},"101:6":{"kind":"call","span":{"start":[101,6],"end":[101,16],"bytes":[2559,2569]},"callee":null},"102:4":{"kind":"call","span":{"start":[102,4],"end":[102,55],"bytes":[2580,2631]},"callee":null},"106:3":{"kind":"call","span":{"start":[106,3],"end":[106,46],"bytes":[2653,2696]},"callee":null},"108:4":{"kind":"call","span":{"start":[108,4],"end":[108,30],"bytes":[2731,2757]},"callee":null},"110:3":{"kind":"call","span":{"start":[110,3],"end":[110,40],"bytes":[2764,2801]},"callee":null},"115:2":{"kind":"call","span":{"start":[115,2],"end":[115,66],"bytes":[2842,2906]},"callee":null},"116:2":{"kind":"call","span":{"start":[116,2],"end":[116,43],"bytes":[2908,2949]},"callee":null},"116:31":{"kind":"call","span":{"start":[116,31],"end":[116,42],"bytes":[2937,2948]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir"},"118:12":{"kind":"call","span":{"start":[118,12],"end":[118,35],"bytes":[2962,2985]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState"},"119:10":{"kind":"call","span":{"start":[119,10],"end":[119,45],"bytes":[3009,3044]},"callee":null},"122:2":{"kind":"call","span":{"start":[122,2],"end":[122,84],"bytes":[3050,3132]},"callee":null},"19:8":{"kind":"call","span":{"start":[19,8],"end":[19,65],"bytes":[345,402]},"callee":null},"20:29":{"kind":"call","span":{"start":[20,29],"end":[20,51],"bytes":[431,453]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag"},"21:12":{"kind":"call","span":{"start":[21,12],"end":[21,97],"bytes":[465,550]},"callee":null},"23:12":{"kind":"call","span":{"start":[23,12],"end":[23,26],"bytes":[582,596]},"callee":null},"28:5":{"kind":"call","span":{"start":[28,5],"end":[28,14],"bytes":[688,697]},"callee":null},"33:12":{"kind":"call","span":{"start":[33,12],"end":[33,21],"bytes":[824,833]},"callee":null},"34:10":{"kind":"call","span":{"start":[34,10],"end":[34,42],"bytes":[849,881]},"callee":null},"37:12":{"kind":"call","span":{"start":[37,12],"end":[37,21],"bytes":[897,906]},"callee":null},"40:6":{"kind":"call","span":{"start":[40,6],"end":[40,28],"bytes":[941,963]},"callee":null},"41:20":{"kind":"call","span":{"start":[41,20],"end":[41,40],"bytes":[985,1005]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool"},"49:24":{"kind":"call","span":{"start":[49,24],"end":[49,66],"bytes":[1176,1218]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"51:11":{"kind":"call","span":{"start":[51,11],"end":[51,58],"bytes":[1253,1300]},"callee":null},"57:8":{"kind":"call","span":{"start":[57,8],"end":[57,36],"bytes":[1402,1430]},"callee":null},"58:23":{"kind":"call","span":{"start":[58,23],"end":[58,49],"bytes":[1455,1481]},"callee":null},"68:15":{"kind":"call","span":{"start":[68,15],"end":[68,30],"bytes":[1628,1643]},"callee":null},"68:32":{"kind":"call","span":{"start":[68,32],"end":[68,50],"bytes":[1645,1663]},"callee":null},"69:10":{"kind":"call","span":{"start":[69,10],"end":[69,59],"bytes":[1675,1724]},"callee":null},"71:10":{"kind":"call","span":{"start":[71,10],"end":[71,55],"bytes":[1758,1803]},"callee":null},"77:13":{"kind":"call","span":{"start":[77,13],"end":[77,38],"bytes":[1888,1913]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"79:11":{"kind":"call","span":{"start":[79,11],"end":[79,68],"bytes":[1942,1999]},"callee":null},"82:8":{"kind":"call","span":{"start":[82,8],"end":[82,32],"bytes":[2021,2045]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB"},"86:14":{"kind":"call","span":{"start":[86,14],"end":[86,27],"bytes":[2093,2106]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MetaPath"},"87:15":{"kind":"call","span":{"start":[87,15],"end":[87,32],"bytes":[2121,2138]},"callee":null},"87:34":{"kind":"call","span":{"start":[87,34],"end":[87,52],"bytes":[2140,2158]},"callee":null},"88:3":{"kind":"call","span":{"start":[88,3],"end":[88,57],"bytes":[2163,2217]},"callee":null},"89:3":{"kind":"call","span":{"start":[89,3],"end":[89,62],"bytes":[2220,2279]},"callee":null},"94:17":{"kind":"call","span":{"start":[94,17],"end":[94,43],"bytes":[2327,2353]},"callee":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles"},"94:31":{"kind":"call","span":{"start":[94,31],"end":[94,42],"bytes":[2341,2352]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir"},"96:11":{"kind":"call","span":{"start":[96,11],"end":[96,48],"bytes":[2382,2419]},"callee":null},"99:3":{"kind":"call","span":{"start":[99,3],"end":[99,81],"bytes":[2427,2505]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Usage":{"id":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Usage","kind":"method","span":{"start":[150,1],"end":[189,2],"bytes":[3638,4628]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"151:2":{"kind":"call","span":{"start":[151,2],"end":[188,3],"bytes":[3672,4626]},"callee":null},"187:3":{"kind":"call","span":{"start":[187,3],"end":[187,22],"bytes":[4603,4622]},"callee":null}}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles":{"id":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles","kind":"function","span":{"start":[126,1],"end":[147,2],"bytes":[3148,3593]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles","parameters":[{"name":"root","type":"string","span":{"start":[126,1],"end":[126,52],"bytes":[3148,3199]}}],"return_type":"([]string, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"127:15":{"kind":"call","span":{"start":[127,15],"end":[127,28],"bytes":[3214,3227]},"callee":null},"127:30":{"kind":"call","span":{"start":[127,30],"end":[127,48],"bytes":[3229,3247]},"callee":null},"134:12":{"kind":"call","span":{"start":[134,12],"end":[143,4],"bytes":[3345,3537]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles/github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles.closure_1","kind":"function","span":{"start":[134,1],"end":[143,18],"bytes":[3334,3551]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles.closure_1","parameters":[{"name":"path","type":"string","span":{"start":[134,1],"end":[134,86],"bytes":[3334,3419]}},{"name":"d","type":"io/fs.DirEntry","span":{"start":[134,1],"end":[134,86],"bytes":[3334,3419]}},{"name":"err","type":"error","span":{"start":[134,1],"end":[134,86],"bytes":[3334,3419]}}],"return_type":"error","error_channel":["error"],"body":{"138:6":{"kind":"call","span":{"start":[138,6],"end":[138,15],"bytes":[3461,3470]},"callee":null},"141:11":{"kind":"call","span":{"start":[141,11],"end":[141,30],"bytes":[3501,3520]},"callee":null}}}}}},"content_hash":"a57b2135a633a6531841eb509f9588a256f6a738aaaaf94ed221c80e70b17ec4"},"cmd/litestream/restore.go":{"id":"can://go/litestream/cmd/litestream/restore.go","kind":"module","span":{"start":[1,1],"end":[454,1],"bytes":[0,13339]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"os\"\n\t\"strconv\"\n\t\"text/tabwriter\"\n\t\"time\"\n\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\n// RestoreCommand represents a command to restore a database from a backup.\ntype RestoreCommand struct{}\n\n// Run executes the command.\nfunc (c *RestoreCommand) Run(ctx context.Context, args []string) (err error) {\n\topt := litestream.NewRestoreOptions()\n\n\tfs := flag.NewFlagSet(\"litestream-restore\", flag.ContinueOnError)\n\tconfigPath, noExpandEnv := registerConfigFlag(fs)\n\tfs.StringVar(\u0026opt.OutputPath, \"o\", \"\", \"output path\")\n\tfs.Var((*txidVar)(\u0026opt.TXID), \"txid\", \"transaction ID\")\n\tfs.IntVar(\u0026opt.Parallelism, \"parallelism\", opt.Parallelism, \"parallelism\")\n\tifDBNotExists := fs.Bool(\"if-db-not-exists\", false, \"\")\n\tifReplicaExists := fs.Bool(\"if-replica-exists\", false, \"\")\n\ttimestampStr := fs.String(\"timestamp\", \"\", \"timestamp\")\n\tdryRun := fs.Bool(\"dry-run\", false, \"print restore plan without writing\")\n\tforce := fs.Bool(\"force\", false, \"overwrite existing output database\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.BoolVar(\u0026opt.Follow, \"f\", false, \"follow mode\")\n\tfs.DurationVar(\u0026opt.FollowInterval, \"follow-interval\", opt.FollowInterval, \"polling interval for follow mode\")\n\tintegrityCheck := fs.String(\"integrity-check\", \"none\", \"post-restore integrity check: none, quick, or full\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t} else if fs.NArg() == 0 || fs.Arg(0) == \"\" {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path or replica URL required\",\n\t\t\thint: \"litestream restore -o /path/to/db s3://bucket/prefix\",\n\t\t}\n\t} else if fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tlogOutput := os.Stdout\n\tif *jsonOutput {\n\t\tlogOutput = os.Stderr\n\t}\n\tinternal.InitLog(logOutput, \"INFO\", \"text\", false)\n\n\t// When follow mode is enabled, set up signal handling so Ctrl+C stops\n\t// the follow loop cleanly.\n\tif opt.Follow {\n\t\tch := signalChan()\n\t\tcancelCtx, cancel := context.WithCancel(ctx)\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase \u003c-ch:\n\t\t\t\tcancel()\n\t\t\tcase \u003c-cancelCtx.Done():\n\t\t\t}\n\t\t}()\n\t\tctx = cancelCtx\n\t\tdefer cancel()\n\t}\n\n\tswitch *integrityCheck {\n\tcase \"none\":\n\t\topt.IntegrityCheck = litestream.IntegrityCheckNone\n\tcase \"quick\":\n\t\topt.IntegrityCheck = litestream.IntegrityCheckQuick\n\tcase \"full\":\n\t\topt.IntegrityCheck = litestream.IntegrityCheckFull\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid -integrity-check value: %s\", *integrityCheck)\n\t}\n\n\t// Parse timestamp, if specified.\n\tif *timestampStr != \"\" {\n\t\tif opt.Timestamp, err = time.Parse(time.RFC3339, *timestampStr); err != nil {\n\t\t\treturn errors.New(\"invalid -timestamp, must specify in ISO 8601 format (e.g. 2000-01-01T00:00:00Z)\")\n\t\t}\n\t}\n\n\t// Determine replica to restore from.\n\tvar r *litestream.Replica\n\tif litestream.IsURL(fs.Arg(0)) {\n\t\tif *configPath != \"\" {\n\t\t\treturn fmt.Errorf(\"cannot specify a replica URL and the -config flag\")\n\t\t}\n\t\tif r, err = c.loadFromURL(ctx, fs.Arg(0), *ifDBNotExists, \u0026opt); errors.Is(err, errSkipDBExists) {\n\t\t\tslog.Info(\"database already exists, skipping\")\n\t\t\treturn nil\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tif *configPath == \"\" {\n\t\t\t*configPath = DefaultConfigPath()\n\t\t}\n\t\tif r, err = c.loadFromConfig(ctx, fs.Arg(0), *configPath, !*noExpandEnv, *ifDBNotExists, \u0026opt); errors.Is(err, errSkipDBExists) {\n\t\t\tslog.Info(\"database already exists, skipping\")\n\t\t\treturn nil\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif *dryRun {\n\t\tplan, err := c.dryRunPlan(ctx, fs.Arg(0), r, opt)\n\t\tif errors.Is(err, litestream.ErrTxNotAvailable) {\n\t\t\treturn fmt.Errorf(\"no matching backup files available\")\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif *jsonOutput {\n\t\t\toutput, err := json.MarshalIndent(plan, \"\", \" \")\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t\t}\n\t\t\tfmt.Println(string(output))\n\t\t\treturn nil\n\t\t}\n\t\tc.printDryRunPlan(plan)\n\t\treturn nil\n\t}\n\n\tif !opt.Follow {\n\t\tif err := c.prepareOutputPath(opt.OutputPath, *force); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\ttxid := c.restoreTXID(ctx, r, opt)\n\tstart := time.Now()\n\tif err := r.Restore(ctx, opt); errors.Is(err, litestream.ErrTxNotAvailable) {\n\t\tif *ifReplicaExists {\n\t\t\tslog.Info(\"no matching backups found\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"no matching backup files available\")\n\t} else if err != nil {\n\t\treturn err\n\t}\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(RestoreResult{\n\t\t\tDBPath: opt.OutputPath,\n\t\t\tReplica: r.Client.Type(),\n\t\t\tTXID: txid,\n\t\t\tDurationMS: time.Since(start).Milliseconds(),\n\t\t\tIntegrityCheck: *integrityCheck,\n\t\t}, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t}\n\treturn nil\n}\n\ntype RestorePlan struct {\n\tSource string `json:\"source\"`\n\tTargetPath string `json:\"target_path\"`\n\tReplica string `json:\"replica\"`\n\tMinTXID string `json:\"min_txid\"`\n\tMaxTXID string `json:\"max_txid\"`\n\tFiles []RestorePlanFile `json:\"files\"`\n}\n\ntype RestorePlanFile struct {\n\tLevel int `json:\"level\"`\n\tName string `json:\"name\"`\n\tMinTXID string `json:\"min_txid\"`\n\tMaxTXID string `json:\"max_txid\"`\n\tSize int64 `json:\"size\"`\n\tTimestamp string `json:\"timestamp\"`\n}\n\ntype RestoreResult struct {\n\tDBPath string `json:\"db_path\"`\n\tReplica string `json:\"replica\"`\n\tTXID string `json:\"txid\"`\n\tDurationMS int64 `json:\"duration_ms\"`\n\tIntegrityCheck string `json:\"integrity_check\"`\n}\n\nfunc (c *RestoreCommand) dryRunPlan(ctx context.Context, source string, r *litestream.Replica, opt litestream.RestoreOptions) (RestorePlan, error) {\n\tif opt.Follow {\n\t\treturn RestorePlan{}, fmt.Errorf(\"cannot use -dry-run with -f\")\n\t}\n\n\tinfos, err := litestream.CalcRestorePlan(ctx, r.Client, opt.TXID, opt.Timestamp, r.Logger())\n\tif err != nil {\n\t\treturn RestorePlan{}, err\n\t}\n\tif len(infos) == 0 {\n\t\treturn RestorePlan{}, litestream.ErrTxNotAvailable\n\t}\n\n\tplan := RestorePlan{\n\t\tSource: source,\n\t\tTargetPath: opt.OutputPath,\n\t\tReplica: r.Client.Type(),\n\t\tMinTXID: infos[0].MinTXID.String(),\n\t\tMaxTXID: infos[len(infos)-1].MaxTXID.String(),\n\t\tFiles: make([]RestorePlanFile, 0, len(infos)),\n\t}\n\tfor _, info := range infos {\n\t\tplan.Files = append(plan.Files, RestorePlanFile{\n\t\t\tLevel: info.Level,\n\t\t\tName: ltx.FormatFilename(info.MinTXID, info.MaxTXID),\n\t\t\tMinTXID: info.MinTXID.String(),\n\t\t\tMaxTXID: info.MaxTXID.String(),\n\t\t\tSize: info.Size,\n\t\t\tTimestamp: info.CreatedAt.Format(time.RFC3339),\n\t\t})\n\t}\n\treturn plan, nil\n}\n\nfunc (c *RestoreCommand) printDryRunPlan(plan RestorePlan) {\n\tfmt.Println(\"Restore plan:\")\n\tfmt.Printf(\" source: %s\\n\", plan.Source)\n\tfmt.Printf(\" target: %s\\n\", plan.TargetPath)\n\tfmt.Printf(\" replica: %s\\n\", plan.Replica)\n\tfmt.Printf(\" txid range: %s - %s\\n\", plan.MinTXID, plan.MaxTXID)\n\tfmt.Println()\n\tfmt.Println(\"Files to fetch:\")\n\n\tw := tabwriter.NewWriter(os.Stdout, 0, 8, 2, ' ', 0)\n\tdefer w.Flush()\n\tfmt.Fprintln(w, \"level\\tfile\\tmin_txid\\tmax_txid\\tsize\\ttimestamp\")\n\tfor _, file := range plan.Files {\n\t\tfmt.Fprintf(w, \"%d\\t%s\\t%s\\t%s\\t%d\\t%s\\n\",\n\t\t\tfile.Level,\n\t\t\tfile.Name,\n\t\t\tfile.MinTXID,\n\t\t\tfile.MaxTXID,\n\t\t\tfile.Size,\n\t\t\tfile.Timestamp,\n\t\t)\n\t}\n}\n\nfunc (c *RestoreCommand) restoreTXID(ctx context.Context, r *litestream.Replica, opt litestream.RestoreOptions) string {\n\tif opt.TXID != 0 {\n\t\treturn opt.TXID.String()\n\t}\n\tif opt.Follow {\n\t\treturn \"\"\n\t}\n\tinfos, err := litestream.CalcRestorePlan(ctx, r.Client, opt.TXID, opt.Timestamp, r.Logger())\n\tif err != nil || len(infos) == 0 {\n\t\treturn \"\"\n\t}\n\treturn infos[len(infos)-1].MaxTXID.String()\n}\n\nfunc (c *RestoreCommand) prepareOutputPath(path string, force bool) error {\n\tinfo, err := os.Stat(path)\n\tif os.IsNotExist(err) {\n\t\treturn nil\n\t} else if err != nil {\n\t\treturn fmt.Errorf(\"cannot access output path: %w\", err)\n\t}\n\tif info.IsDir() {\n\t\treturn fmt.Errorf(\"cannot restore, output path is a directory: %s\", path)\n\t}\n\n\tif info.Size() \u003e 0 \u0026\u0026 !force {\n\t\treturn fmt.Errorf(\"cannot restore, output path already exists and is not empty: %s. Use -force to overwrite\", path)\n\t}\n\n\tfor _, sidecarPath := range []string{path + \"-wal\", path + \"-shm\", path + \"-journal\"} {\n\t\tif _, err := os.Stat(sidecarPath); err == nil \u0026\u0026 !force {\n\t\t\treturn fmt.Errorf(\"cannot restore, SQLite sidecar path already exists: %s. Use -force to overwrite\", sidecarPath)\n\t\t} else if err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"cannot access SQLite sidecar path: %w\", err)\n\t\t}\n\t}\n\n\tfor _, removePath := range []string{path, path + \"-wal\", path + \"-shm\", path + \"-journal\"} {\n\t\tif err := os.Remove(removePath); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"remove existing output path: %w\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// loadFromURL creates a replica \u0026 updates the restore options from a replica URL.\nfunc (c *RestoreCommand) loadFromURL(ctx context.Context, replicaURL string, ifDBNotExists bool, opt *litestream.RestoreOptions) (*litestream.Replica, error) {\n\tif opt.OutputPath == \"\" {\n\t\treturn nil, \u0026usageError{\n\t\t\tmessage: \"-o is required when restoring from a replica URL\",\n\t\t\thint: fmt.Sprintf(\"litestream restore -o /path/to/db %s\", replicaURL),\n\t\t}\n\t}\n\n\t// Exit successfully if the output file already exists.\n\tif _, err := os.Stat(opt.OutputPath); !os.IsNotExist(err) \u0026\u0026 ifDBNotExists {\n\t\treturn nil, errSkipDBExists\n\t}\n\n\tsyncInterval := litestream.DefaultSyncInterval\n\tr, err := NewReplicaFromConfig(\u0026ReplicaConfig{\n\t\tURL: replicaURL,\n\t\tReplicaSettings: ReplicaSettings{\n\t\t\tSyncInterval: \u0026syncInterval,\n\t\t},\n\t}, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, err = r.CalcRestoreTarget(ctx, *opt)\n\treturn r, err\n}\n\n// loadFromConfig returns a replica \u0026 updates the restore options from a DB reference.\nfunc (c *RestoreCommand) loadFromConfig(_ context.Context, dbPath, configPath string, expandEnv, ifDBNotExists bool, opt *litestream.RestoreOptions) (*litestream.Replica, error) {\n\t// Load configuration.\n\tconfig, err := ReadConfigFile(configPath, expandEnv)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Lookup database from configuration file by path.\n\tif dbPath, err = expand(dbPath); err != nil {\n\t\treturn nil, err\n\t}\n\tdbConfig := config.DBConfig(dbPath)\n\tif dbConfig == nil {\n\t\treturn nil, fmt.Errorf(\"database not found in config: %s\", dbPath)\n\t}\n\tdb, err := NewDBFromConfig(dbConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Restore into original database path if not specified.\n\tif opt.OutputPath == \"\" {\n\t\topt.OutputPath = dbPath\n\t}\n\n\t// Exit successfully if the output file already exists.\n\tif _, err := os.Stat(opt.OutputPath); !os.IsNotExist(err) \u0026\u0026 ifDBNotExists {\n\t\treturn nil, errSkipDBExists\n\t}\n\n\treturn db.Replica, nil\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *RestoreCommand) Usage() {\n\tfmt.Printf(`\nThe restore command recovers a database from a previous snapshot and WAL.\n\nUsage:\n\n\tlitestream restore [arguments] DB_PATH\n\n\tlitestream restore [arguments] REPLICA_URL\n\nArguments:\n\n\t-config PATH\n\t Specifies the configuration file.\n\t Defaults to %s\n\n\t-no-expand-env\n\t Disables environment variable expansion in configuration file.\n\n\t-txid TXID\n\t Restore up to a specific hex-encoded transaction ID (inclusive).\n\t Defaults to use the highest available transaction.\n\n\t-timestamp TIMESTAMP\n\t Restore to a specific point-in-time.\n\t Defaults to use the latest available backup.\n\n\t-o PATH\n\t Output path of the restored database.\n\t Defaults to original DB path.\n\n\t-if-db-not-exists\n\t Returns exit code of 0 if the database already exists.\n\n\t-if-replica-exists\n\t Returns exit code of 0 if no backups found.\n\n\t-dry-run\n\t Print the restore plan and exit without writing a database.\n\n\t-force\n\t Overwrite an existing output database and SQLite sidecar files.\n\n\t-json\n\t Output raw JSON summary on successful restore.\n\n\t-f\n\t Follow mode. After restoring, continuously poll for and apply\n\t new changes. Similar to tail -f. The restored database should\n\t only be opened in read-only mode by consumers.\n\t Cannot be used with -txid or -timestamp.\n\n\t-follow-interval DURATION\n\t Polling interval for follow mode.\n\t Defaults to 1s.\n\n\t-parallelism NUM\n\t Determines the number of WAL files downloaded in parallel.\n\t Defaults to `+strconv.Itoa(litestream.DefaultRestoreParallelism)+`.\n\n\t-integrity-check MODE\n\t Run a post-restore integrity check on the database.\n\t MODE is one of: none, quick, full.\n\t Defaults to none.\n\n\nExamples:\n\n\t# Restore latest replica for database to original location.\n\t$ litestream restore /path/to/db\n\n\t# Restore replica for database to a given point in time.\n\t$ litestream restore -timestamp 2020-01-01T00:00:00Z /path/to/db\n\n\t# Restore latest replica for database to new /tmp directory\n\t$ litestream restore -o /tmp/db /path/to/db\n\n\t# Restore database from S3 replica URL.\n\t$ litestream restore -o /tmp/db s3://mybucket/db\n\n\t# Preview restore plan without writing a database.\n\t$ litestream restore -dry-run -o /tmp/db s3://mybucket/db\n\n\t# Continuously restore (follow) a database from a replica.\n\t$ litestream restore -f -o /tmp/read-replica.db s3://mybucket/db\n\n`[1:],\n\t\tDefaultConfigPath(),\n\t)\n}\n\nvar errSkipDBExists = errors.New(\"database already exists, skipping\")\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[34,50]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[51,60]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[61,68]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[69,75]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[76,87]}},{"name":"os","path":"os","span":{"start":[10,1],"end":[10,6],"bytes":[88,93]}},{"name":"strconv","path":"strconv","span":{"start":[11,1],"end":[11,11],"bytes":[94,104]}},{"name":"tabwriter","path":"text/tabwriter","span":{"start":[12,1],"end":[12,18],"bytes":[105,122]}},{"name":"time","path":"time","span":{"start":[13,1],"end":[13,8],"bytes":[123,130]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[15,1],"end":[15,27],"bytes":[132,158]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[17,1],"end":[17,37],"bytes":[160,196]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[18,1],"end":[18,46],"bytes":[197,242]}}],"types":{"RestoreCommand":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand","kind":"struct","span":{"start":[22,1],"end":[22,29],"bytes":[322,350]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","kind":"method","span":{"start":[25,1],"end":[168,2],"bytes":[381,4831]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[25,1],"end":[25,79],"bytes":[381,459]}},{"name":"args","type":"[]string","span":{"start":[25,1],"end":[25,79],"bytes":[381,459]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":35},"body":{"100:15":{"kind":"call","span":{"start":[100,15],"end":[100,66],"bytes":[3026,3077]},"callee":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL"},"100:34":{"kind":"call","span":{"start":[100,34],"end":[100,43],"bytes":[3045,3054]},"callee":null},"100:68":{"kind":"call","span":{"start":[100,68],"end":[100,99],"bytes":[3079,3110]},"callee":null},"101:4":{"kind":"call","span":{"start":[101,4],"end":[101,50],"bytes":[3116,3162]},"callee":null},"108:18":{"kind":"call","span":{"start":[108,18],"end":[108,37],"bytes":[3272,3291]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"},"110:15":{"kind":"call","span":{"start":[110,15],"end":[110,97],"bytes":[3310,3392]},"callee":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig"},"110:37":{"kind":"call","span":{"start":[110,37],"end":[110,46],"bytes":[3332,3341]},"callee":null},"110:99":{"kind":"call","span":{"start":[110,99],"end":[110,130],"bytes":[3394,3425]},"callee":null},"111:4":{"kind":"call","span":{"start":[111,4],"end":[111,50],"bytes":[3431,3477]},"callee":null},"119:16":{"kind":"call","span":{"start":[119,16],"end":[119,52],"bytes":[3568,3604]},"callee":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan"},"119:34":{"kind":"call","span":{"start":[119,34],"end":[119,43],"bytes":[3586,3595]},"callee":null},"120:6":{"kind":"call","span":{"start":[120,6],"end":[120,50],"bytes":[3610,3654]},"callee":null},"121:11":{"kind":"call","span":{"start":[121,11],"end":[121,59],"bytes":[3667,3715]},"callee":null},"126:19":{"kind":"call","span":{"start":[126,19],"end":[126,53],"bytes":[3796,3830]},"callee":null},"128:12":{"kind":"call","span":{"start":[128,12],"end":[128,60],"bytes":[3861,3909]},"callee":null},"130:16":{"kind":"call","span":{"start":[130,16],"end":[130,30],"bytes":[3930,3944]},"callee":null},"130:4":{"kind":"call","span":{"start":[130,4],"end":[130,31],"bytes":[3918,3945]},"callee":null},"133:3":{"kind":"call","span":{"start":[133,3],"end":[133,26],"bytes":[3966,3989]},"callee":null},"138:13":{"kind":"call","span":{"start":[138,13],"end":[138,56],"bytes":[4037,4080]},"callee":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.prepareOutputPath"},"143:10":{"kind":"call","span":{"start":[143,10],"end":[143,36],"bytes":[4126,4152]},"callee":null},"144:11":{"kind":"call","span":{"start":[144,11],"end":[144,21],"bytes":[4163,4173]},"callee":null},"145:12":{"kind":"call","span":{"start":[145,12],"end":[145,31],"bytes":[4185,4204]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore"},"145:33":{"kind":"call","span":{"start":[145,33],"end":[145,77],"bytes":[4206,4250]},"callee":null},"147:4":{"kind":"call","span":{"start":[147,4],"end":[147,42],"bytes":[4280,4318]},"callee":null},"150:10":{"kind":"call","span":{"start":[150,10],"end":[150,58],"bytes":[4346,4394]},"callee":null},"155:18":{"kind":"call","span":{"start":[155,18],"end":[161,15],"bytes":[4470,4703]},"callee":null},"157:20":{"kind":"call","span":{"start":[157,20],"end":[157,35],"bytes":[4558,4573]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type"},"159:20":{"kind":"call","span":{"start":[159,20],"end":[159,37],"bytes":[4619,4636]},"callee":null},"163:11":{"kind":"call","span":{"start":[163,11],"end":[163,59],"bytes":[4732,4780]},"callee":null},"165:15":{"kind":"call","span":{"start":[165,15],"end":[165,29],"bytes":[4799,4813]},"callee":null},"165:3":{"kind":"call","span":{"start":[165,3],"end":[165,30],"bytes":[4787,4814]},"callee":null},"26:9":{"kind":"call","span":{"start":[26,9],"end":[26,39],"bytes":[468,498]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions"},"28:8":{"kind":"call","span":{"start":[28,8],"end":[28,67],"bytes":[507,566]},"callee":null},"29:29":{"kind":"call","span":{"start":[29,29],"end":[29,51],"bytes":[595,617]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag"},"30:2":{"kind":"call","span":{"start":[30,2],"end":[30,55],"bytes":[619,672]},"callee":null},"31:2":{"kind":"call","span":{"start":[31,2],"end":[31,57],"bytes":[674,729]},"callee":null},"31:9":{"kind":"call","span":{"start":[31,9],"end":[31,30],"bytes":[681,702]},"callee":null},"32:2":{"kind":"call","span":{"start":[32,2],"end":[32,76],"bytes":[731,805]},"callee":null},"33:19":{"kind":"call","span":{"start":[33,19],"end":[33,57],"bytes":[824,862]},"callee":null},"34:21":{"kind":"call","span":{"start":[34,21],"end":[34,60],"bytes":[883,922]},"callee":null},"35:18":{"kind":"call","span":{"start":[35,18],"end":[35,57],"bytes":[940,979]},"callee":null},"36:12":{"kind":"call","span":{"start":[36,12],"end":[36,75],"bytes":[991,1054]},"callee":null},"37:11":{"kind":"call","span":{"start":[37,11],"end":[37,72],"bytes":[1065,1126]},"callee":null},"38:16":{"kind":"call","span":{"start":[38,16],"end":[38,57],"bytes":[1142,1183]},"callee":null},"39:2":{"kind":"call","span":{"start":[39,2],"end":[39,52],"bytes":[1185,1235]},"callee":null},"40:2":{"kind":"call","span":{"start":[40,2],"end":[40,112],"bytes":[1237,1347]},"callee":null},"41:20":{"kind":"call","span":{"start":[41,20],"end":[41,110],"bytes":[1367,1457]},"callee":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool"},"43:12":{"kind":"call","span":{"start":[43,12],"end":[43,26],"bytes":[1489,1503]},"callee":null},"45:12":{"kind":"call","span":{"start":[45,12],"end":[45,21],"bytes":[1542,1551]},"callee":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion"},"45:30":{"kind":"call","span":{"start":[45,30],"end":[45,39],"bytes":[1560,1569]},"callee":null},"50:12":{"kind":"call","span":{"start":[50,12],"end":[50,21],"bytes":[1736,1745]},"callee":null},"51:10":{"kind":"call","span":{"start":[51,10],"end":[51,42],"bytes":[1761,1793]},"callee":null},"58:2":{"kind":"call","span":{"start":[58,2],"end":[58,52],"bytes":[1868,1918]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"},"63:9":{"kind":"call","span":{"start":[63,9],"end":[63,21],"bytes":[2046,2058]},"callee":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.signalChan"},"64:24":{"kind":"call","span":{"start":[64,24],"end":[64,47],"bytes":[2082,2105]},"callee":null},"65:6":{"kind":"call","span":{"start":[65,6],"end":[71,6],"bytes":[2111,2197]},"callee":null,"is_goroutine":true},"73:9":{"kind":"call","span":{"start":[73,9],"end":[73,17],"bytes":[2224,2232]},"callee":null},"84:10":{"kind":"call","span":{"start":[84,10],"end":[84,75],"bytes":[2485,2550]},"callee":null},"89:27":{"kind":"call","span":{"start":[89,27],"end":[89,66],"bytes":[2642,2681]},"callee":null},"90:11":{"kind":"call","span":{"start":[90,11],"end":[90,105],"bytes":[2706,2800]},"callee":null},"96:22":{"kind":"call","span":{"start":[96,22],"end":[96,31],"bytes":[2896,2905]},"callee":null},"96:5":{"kind":"call","span":{"start":[96,5],"end":[96,32],"bytes":[2879,2906]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL"},"98:11":{"kind":"call","span":{"start":[98,11],"end":[98,74],"bytes":[2944,3007]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run.closure_1","kind":"function","span":{"start":[65,1],"end":[71,6],"bytes":[2106,2197]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run.closure_1","parameters":[],"body":{"68:5":{"kind":"call","span":{"start":[68,5],"end":[68,13],"bytes":[2150,2158]},"callee":null},"69:11":{"kind":"call","span":{"start":[69,11],"end":[69,27],"bytes":[2169,2185]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Usage":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Usage","kind":"method","span":{"start":[362,1],"end":[451,2],"bytes":[10842,13267]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"363:2":{"kind":"call","span":{"start":[363,2],"end":[450,3],"bytes":[10878,13265]},"callee":null},"420:20":{"kind":"call","span":{"start":[420,20],"end":[420,70],"bytes":[12363,12413]},"callee":null},"449:3":{"kind":"call","span":{"start":[449,3],"end":[449,22],"bytes":[13242,13261]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan","kind":"method","span":{"start":[196,1],"end":[228,2],"bytes":[5626,6684]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[196,1],"end":[196,149],"bytes":[5626,5774]}},{"name":"source","type":"string","span":{"start":[196,1],"end":[196,149],"bytes":[5626,5774]}},{"name":"r","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[196,1],"end":[196,149],"bytes":[5626,5774]}},{"name":"opt","type":"github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[196,1],"end":[196,149],"bytes":[5626,5774]}}],"return_type":"(github.com/benbjohnson/litestream/cmd/litestream.RestorePlan, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"198:25":{"kind":"call","span":{"start":[198,25],"end":[198,66],"bytes":[5816,5857]},"callee":null},"201:16":{"kind":"call","span":{"start":[201,16],"end":[201,94],"bytes":[5877,5955]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan"},"201:83":{"kind":"call","span":{"start":[201,83],"end":[201,93],"bytes":[5944,5954]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger"},"205:5":{"kind":"call","span":{"start":[205,5],"end":[205,15],"bytes":[6008,6018]},"callee":null},"212:15":{"kind":"call","span":{"start":[212,15],"end":[212,30],"bytes":[6171,6186]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type"},"213:15":{"kind":"call","span":{"start":[213,15],"end":[213,40],"bytes":[6202,6227]},"callee":null},"214:15":{"kind":"call","span":{"start":[214,15],"end":[214,51],"bytes":[6243,6279]},"callee":null},"214:21":{"kind":"call","span":{"start":[214,21],"end":[214,31],"bytes":[6249,6259]},"callee":null},"215:15":{"kind":"call","span":{"start":[215,15],"end":[215,53],"bytes":[6295,6333]},"callee":null},"215:42":{"kind":"call","span":{"start":[215,42],"end":[215,52],"bytes":[6322,6332]},"callee":null},"218:16":{"kind":"call","span":{"start":[218,16],"end":[225,5],"bytes":[6383,6661]},"callee":null},"220:15":{"kind":"call","span":{"start":[220,15],"end":[220,61],"bytes":[6459,6505]},"callee":null},"221:15":{"kind":"call","span":{"start":[221,15],"end":[221,36],"bytes":[6521,6542]},"callee":null},"222:15":{"kind":"call","span":{"start":[222,15],"end":[222,36],"bytes":[6558,6579]},"callee":null},"224:15":{"kind":"call","span":{"start":[224,15],"end":[224,50],"bytes":[6620,6655]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig","kind":"method","span":{"start":[328,1],"end":[359,2],"bytes":[9862,10797]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig","parameters":[{"name":"_","type":"context.Context","span":{"start":[328,1],"end":[328,180],"bytes":[9862,10041]}},{"name":"dbPath","type":"string","span":{"start":[328,1],"end":[328,180],"bytes":[9862,10041]}},{"name":"configPath","type":"string","span":{"start":[328,1],"end":[328,180],"bytes":[9862,10041]}},{"name":"expandEnv","type":"bool","span":{"start":[328,1],"end":[328,180],"bytes":[9862,10041]}},{"name":"ifDBNotExists","type":"bool","span":{"start":[328,1],"end":[328,180],"bytes":[9862,10041]}},{"name":"opt","type":"*github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[328,1],"end":[328,180],"bytes":[9862,10041]}}],"return_type":"(*github.com/benbjohnson/litestream.Replica, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"330:17":{"kind":"call","span":{"start":[330,17],"end":[330,54],"bytes":[10082,10119]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"336:19":{"kind":"call","span":{"start":[336,19],"end":[336,33],"bytes":[10230,10244]},"callee":null},"339:14":{"kind":"call","span":{"start":[339,14],"end":[339,37],"bytes":[10293,10316]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig"},"341:15":{"kind":"call","span":{"start":[341,15],"end":[341,69],"bytes":[10353,10407]},"callee":null},"343:13":{"kind":"call","span":{"start":[343,13],"end":[343,38],"bytes":[10423,10448]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"354:15":{"kind":"call","span":{"start":[354,15],"end":[354,38],"bytes":[10674,10697]},"callee":null},"354:41":{"kind":"call","span":{"start":[354,41],"end":[354,59],"bytes":[10700,10718]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL","kind":"method","span":{"start":[300,1],"end":[325,2],"bytes":[8949,9773]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[300,1],"end":[300,160],"bytes":[8949,9108]}},{"name":"replicaURL","type":"string","span":{"start":[300,1],"end":[300,160],"bytes":[8949,9108]}},{"name":"ifDBNotExists","type":"bool","span":{"start":[300,1],"end":[300,160],"bytes":[8949,9108]}},{"name":"opt","type":"*github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[300,1],"end":[300,160],"bytes":[8949,9108]}}],"return_type":"(*github.com/benbjohnson/litestream.Replica, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"304:13":{"kind":"call","span":{"start":[304,13],"end":[304,76],"bytes":[9239,9302]},"callee":null},"309:15":{"kind":"call","span":{"start":[309,15],"end":[309,38],"bytes":[9383,9406]},"callee":null},"309:41":{"kind":"call","span":{"start":[309,41],"end":[309,59],"bytes":[9409,9427]},"callee":null},"314:12":{"kind":"call","span":{"start":[314,12],"end":[319,9],"bytes":[9540,9677]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig"},"323:11":{"kind":"call","span":{"start":[323,11],"end":[323,41],"bytes":[9726,9756]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CalcRestoreTarget"}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.prepareOutputPath":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.prepareOutputPath","kind":"method","span":{"start":[268,1],"end":[297,2],"bytes":[7749,8864]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.prepareOutputPath","parameters":[{"name":"path","type":"string","span":{"start":[268,1],"end":[268,76],"bytes":[7749,7824]}},{"name":"force","type":"bool","span":{"start":[268,1],"end":[268,76],"bytes":[7749,7824]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"269:15":{"kind":"call","span":{"start":[269,15],"end":[269,28],"bytes":[7839,7852]},"callee":null},"270:5":{"kind":"call","span":{"start":[270,5],"end":[270,23],"bytes":[7857,7875]},"callee":null},"273:10":{"kind":"call","span":{"start":[273,10],"end":[273,58],"bytes":[7924,7972]},"callee":null},"275:5":{"kind":"call","span":{"start":[275,5],"end":[275,17],"bytes":[7980,7992]},"callee":null},"276:10":{"kind":"call","span":{"start":[276,10],"end":[276,76],"bytes":[8004,8070]},"callee":null},"279:5":{"kind":"call","span":{"start":[279,5],"end":[279,16],"bytes":[8079,8090]},"callee":null},"280:10":{"kind":"call","span":{"start":[280,10],"end":[280,118],"bytes":[8116,8224]},"callee":null},"284:16":{"kind":"call","span":{"start":[284,16],"end":[284,36],"bytes":[8333,8353]},"callee":null},"285:11":{"kind":"call","span":{"start":[285,11],"end":[285,117],"bytes":[8388,8494]},"callee":null},"286:28":{"kind":"call","span":{"start":[286,28],"end":[286,46],"bytes":[8522,8540]},"callee":null},"287:11":{"kind":"call","span":{"start":[287,11],"end":[287,67],"bytes":[8553,8609]},"callee":null},"292:13":{"kind":"call","span":{"start":[292,13],"end":[292,34],"bytes":[8724,8745]},"callee":null},"292:51":{"kind":"call","span":{"start":[292,51],"end":[292,69],"bytes":[8762,8780]},"callee":null},"293:11":{"kind":"call","span":{"start":[293,11],"end":[293,61],"bytes":[8793,8843]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.printDryRunPlan":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.printDryRunPlan","kind":"method","span":{"start":[230,1],"end":[252,2],"bytes":[6686,7351]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.printDryRunPlan","parameters":[{"name":"plan","type":"github.com/benbjohnson/litestream/cmd/litestream.RestorePlan","span":{"start":[230,1],"end":[230,61],"bytes":[6686,6746]}}],"metrics":{"cyclomatic":2},"body":{"231:2":{"kind":"call","span":{"start":[231,2],"end":[231,30],"bytes":[6748,6776]},"callee":null},"232:2":{"kind":"call","span":{"start":[232,2],"end":[232,43],"bytes":[6778,6819]},"callee":null},"233:2":{"kind":"call","span":{"start":[233,2],"end":[233,47],"bytes":[6821,6866]},"callee":null},"234:2":{"kind":"call","span":{"start":[234,2],"end":[234,45],"bytes":[6868,6911]},"callee":null},"235:2":{"kind":"call","span":{"start":[235,2],"end":[235,67],"bytes":[6913,6978]},"callee":null},"236:2":{"kind":"call","span":{"start":[236,2],"end":[236,15],"bytes":[6980,6993]},"callee":null},"237:2":{"kind":"call","span":{"start":[237,2],"end":[237,32],"bytes":[6995,7025]},"callee":null},"239:7":{"kind":"call","span":{"start":[239,7],"end":[239,54],"bytes":[7033,7080]},"callee":null},"240:8":{"kind":"call","span":{"start":[240,8],"end":[240,17],"bytes":[7088,7097]},"callee":null},"241:2":{"kind":"call","span":{"start":[241,2],"end":[241,69],"bytes":[7099,7166]},"callee":null},"243:3":{"kind":"call","span":{"start":[243,3],"end":[250,4],"bytes":[7204,7346]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.restoreTXID":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.restoreTXID","kind":"method","span":{"start":[254,1],"end":[266,2],"bytes":[7353,7747]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.restoreTXID","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[254,1],"end":[254,121],"bytes":[7353,7473]}},{"name":"r","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[254,1],"end":[254,121],"bytes":[7353,7473]}},{"name":"opt","type":"github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[254,1],"end":[254,121],"bytes":[7353,7473]}}],"return_type":"string","metrics":{"cyclomatic":4},"body":{"256:10":{"kind":"call","span":{"start":[256,10],"end":[256,27],"bytes":[7503,7520]},"callee":null},"261:16":{"kind":"call","span":{"start":[261,16],"end":[261,94],"bytes":[7571,7649]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan"},"261:83":{"kind":"call","span":{"start":[261,83],"end":[261,93],"bytes":[7638,7648]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger"},"262:19":{"kind":"call","span":{"start":[262,19],"end":[262,29],"bytes":[7668,7678]},"callee":null},"265:15":{"kind":"call","span":{"start":[265,15],"end":[265,25],"bytes":[7715,7725]},"callee":null},"265:9":{"kind":"call","span":{"start":[265,9],"end":[265,45],"bytes":[7709,7745]},"callee":null}}}}},"RestorePlan":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan","kind":"struct","span":{"start":[170,1],"end":[177,2],"bytes":[4833,5145]},"callables":{},"fields":{"Files":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan/Files","kind":"field","type":"[]github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile","span":{"start":[176,1],"end":[176,45],"bytes":[5099,5143]}},"MaxTXID":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan/MaxTXID","kind":"field","type":"string","span":{"start":[175,1],"end":[175,48],"bytes":[5051,5098]}},"MinTXID":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan/MinTXID","kind":"field","type":"string","span":{"start":[174,1],"end":[174,48],"bytes":[5003,5050]}},"Replica":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan/Replica","kind":"field","type":"string","span":{"start":[173,1],"end":[173,47],"bytes":[4956,5002]}},"Source":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan/Source","kind":"field","type":"string","span":{"start":[171,1],"end":[171,46],"bytes":[4859,4904]}},"TargetPath":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlan/TargetPath","kind":"field","type":"string","span":{"start":[172,1],"end":[172,51],"bytes":[4905,4955]}}}},"RestorePlanFile":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile","kind":"struct","span":{"start":[179,1],"end":[186,2],"bytes":[5147,5384]},"callables":{},"fields":{"Level":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile/Level","kind":"field","type":"int","span":{"start":[180,1],"end":[180,33],"bytes":[5177,5209]}},"MaxTXID":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile/MaxTXID","kind":"field","type":"string","span":{"start":[183,1],"end":[183,36],"bytes":[5278,5313]}},"MinTXID":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile/MinTXID","kind":"field","type":"string","span":{"start":[182,1],"end":[182,36],"bytes":[5242,5277]}},"Name":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile/Name","kind":"field","type":"string","span":{"start":[181,1],"end":[181,32],"bytes":[5210,5241]}},"Size":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile/Size","kind":"field","type":"int64","span":{"start":[184,1],"end":[184,32],"bytes":[5314,5345]}},"Timestamp":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestorePlanFile/Timestamp","kind":"field","type":"string","span":{"start":[185,1],"end":[185,37],"bytes":[5346,5382]}}}},"RestoreResult":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreResult","kind":"struct","span":{"start":[188,1],"end":[194,2],"bytes":[5386,5624]},"callables":{},"fields":{"DBPath":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreResult/DBPath","kind":"field","type":"string","span":{"start":[189,1],"end":[189,40],"bytes":[5414,5453]}},"DurationMS":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreResult/DurationMS","kind":"field","type":"int64","span":{"start":[192,1],"end":[192,44],"bytes":[5531,5574]}},"IntegrityCheck":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreResult/IntegrityCheck","kind":"field","type":"string","span":{"start":[193,1],"end":[193,48],"bytes":[5575,5622]}},"Replica":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreResult/Replica","kind":"field","type":"string","span":{"start":[190,1],"end":[190,40],"bytes":[5454,5493]}},"TXID":{"id":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreResult/TXID","kind":"field","type":"string","span":{"start":[191,1],"end":[191,37],"bytes":[5494,5530]}}}}},"functions":{},"content_hash":"86e46d8df1604840766b9f0392d007410769da6c8459a88d3b534e8a312e4373"},"cmd/litestream/start.go":{"id":"can://go/litestream/cmd/litestream/start.go","kind":"module","span":{"start":[1,1],"end":[159,1],"bytes":[0,4011]},"package":"main","source":"package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// StartCommand represents the command to start replication for a database.\ntype StartCommand struct{}\n\n// Run executes the start command.\nfunc (c *StartCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-start\", flag.ContinueOnError)\n\ttimeout := fs.Int(\"timeout\", 30, \"timeout in seconds\")\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() == 0 {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path required\",\n\t\t\thint: \"litestream start /path/to/db\",\n\t\t}\n\t}\n\tif fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tdbPath := fs.Arg(0)\n\n\t// Create HTTP client that connects via Unix socket with timeout\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\treq := litestream.StartRequest{\n\t\tPath: dbPath,\n\t\tTimeout: *timeout,\n\t}\n\treqBody, err := json.Marshal(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\tresp, err := client.Post(\"http://localhost/start\", \"application/json\", bytes.NewReader(reqBody))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"start failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"start failed: %s\", string(body))\n\t}\n\n\tvar result litestream.StartResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tconfirmation := StartStopResult{\n\t\tStatus: result.Status,\n\t\tDBPath: result.Path,\n\t\tState: \"running\",\n\t\tTXID: result.TXID,\n\t\tSocket: *socketPath,\n\t}\n\tif err := printStartStopResult(confirmation, *jsonOutput); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\ntype StartStopResult struct {\n\tStatus string `json:\"status\"`\n\tDBPath string `json:\"db_path\"`\n\tState string `json:\"state\"`\n\tTXID uint64 `json:\"txid\"`\n\tSocket string `json:\"socket\"`\n}\n\nfunc printStartStopResult(result StartStopResult, jsonOutput bool) error {\n\tif jsonOutput {\n\t\toutput, err := json.MarshalIndent(result, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"status: %s\\n\", result.Status)\n\tfmt.Printf(\"db_path: %s\\n\", result.DBPath)\n\tfmt.Printf(\"state: %s\\n\", result.State)\n\tfmt.Printf(\"txid: %d\\n\", result.TXID)\n\tfmt.Printf(\"socket: %s\\n\", result.Socket)\n\n\treturn nil\n}\n\n// Usage prints the help text for the start command.\nfunc (c *StartCommand) Usage() {\n\tfmt.Println(`\nusage: litestream start [OPTIONS] DB_PATH\n\nStart replication for a database.\n\nOptions:\n -timeout SECONDS\n Maximum time to wait in seconds (default: 30).\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -json\n Output raw JSON instead of human-readable text.\n\nExamples:\n # Start replication for a database on the running daemon.\n $ litestream start /path/to/db\n\n # Start replication and emit a JSON confirmation.\n $ litestream start -json /path/to/db\n\n # Start replication using a non-default control socket.\n $ litestream start -socket /tmp/litestream.sock /path/to/db\n\n # Start replication and wait up to 10 seconds for the daemon response.\n $ litestream start -timeout 10 /path/to/db\n`[1:])\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"json","path":"encoding/json","span":{"start":[6,1],"end":[6,17],"bytes":[43,59]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[60,67]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[68,74]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[75,80]}},{"name":"net","path":"net","span":{"start":[10,1],"end":[10,7],"bytes":[81,87]}},{"name":"http","path":"net/http","span":{"start":[11,1],"end":[11,12],"bytes":[88,99]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[100,107]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[14,1],"end":[14,37],"bytes":[109,145]}}],"types":{"StartCommand":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartCommand","kind":"struct","span":{"start":[18,1],"end":[18,27],"bytes":[225,251]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartCommand/github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run","kind":"method","span":{"start":[21,1],"end":[99,2],"bytes":[288,2473]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[21,1],"end":[21,71],"bytes":[288,358]}},{"name":"args","type":"[]string","span":{"start":[21,1],"end":[21,71],"bytes":[288,358]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"22:8":{"kind":"call","span":{"start":[22,8],"end":[22,65],"bytes":[366,423]},"callee":null},"23:13":{"kind":"call","span":{"start":[23,13],"end":[23,56],"bytes":[436,479]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,86],"bytes":[495,565]},"callee":null},"25:16":{"kind":"call","span":{"start":[25,16],"end":[25,57],"bytes":[581,622]},"callee":null},"27:12":{"kind":"call","span":{"start":[27,12],"end":[27,26],"bytes":[654,668]},"callee":null},"31:5":{"kind":"call","span":{"start":[31,5],"end":[31,14],"bytes":[704,713]},"callee":null},"37:5":{"kind":"call","span":{"start":[37,5],"end":[37,14],"bytes":[836,845]},"callee":null},"38:10":{"kind":"call","span":{"start":[38,10],"end":[38,42],"bytes":[861,893]},"callee":null},"41:12":{"kind":"call","span":{"start":[41,12],"end":[41,21],"bytes":[909,918]},"callee":null},"44:19":{"kind":"call","span":{"start":[44,19],"end":[44,42],"bytes":[1004,1027]},"callee":null},"58:18":{"kind":"call","span":{"start":[58,18],"end":[58,35],"bytes":[1367,1384]},"callee":null},"60:10":{"kind":"call","span":{"start":[60,10],"end":[60,58],"bytes":[1411,1459]},"callee":null},"63:15":{"kind":"call","span":{"start":[63,15],"end":[63,98],"bytes":[1478,1561]},"callee":null},"63:73":{"kind":"call","span":{"start":[63,73],"end":[63,97],"bytes":[1536,1560]},"callee":null},"65:10":{"kind":"call","span":{"start":[65,10],"end":[65,68],"bytes":[1588,1646]},"callee":null},"67:8":{"kind":"call","span":{"start":[67,8],"end":[67,25],"bytes":[1657,1674]},"callee":null},"69:15":{"kind":"call","span":{"start":[69,15],"end":[69,36],"bytes":[1690,1711]},"callee":null},"71:10":{"kind":"call","span":{"start":[71,10],"end":[71,56],"bytes":[1738,1784]},"callee":null},"76:13":{"kind":"call","span":{"start":[76,13],"end":[76,43],"bytes":[1879,1909]},"callee":null},"77:11":{"kind":"call","span":{"start":[77,11],"end":[77,56],"bytes":[1957,2002]},"callee":null},"79:10":{"kind":"call","span":{"start":[79,10],"end":[79,54],"bytes":[2016,2060]},"callee":null},"79:41":{"kind":"call","span":{"start":[79,41],"end":[79,53],"bytes":[2047,2059]},"callee":null},"83:12":{"kind":"call","span":{"start":[83,12],"end":[83,41],"bytes":[2113,2142]},"callee":null},"84:10":{"kind":"call","span":{"start":[84,10],"end":[84,57],"bytes":[2166,2213]},"callee":null},"94:12":{"kind":"call","span":{"start":[94,12],"end":[94,59],"bytes":[2381,2428]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartCommand/github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run.closure_1","kind":"function","span":{"start":[48,1],"end":[50,6],"bytes":[1123,1264]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[48,1],"end":[48,73],"bytes":[1123,1195]}},{"name":"_","type":"string","span":{"start":[48,1],"end":[48,73],"bytes":[1123,1195]}},{"name":"_","type":"string","span":{"start":[48,1],"end":[48,73],"bytes":[1123,1195]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"49:12":{"kind":"call","span":{"start":[49,12],"end":[49,63],"bytes":[1207,1258]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Usage":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartCommand/github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Usage","kind":"method","span":{"start":[129,1],"end":[158,2],"bytes":[3214,4010]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"130:2":{"kind":"call","span":{"start":[130,2],"end":[157,7],"bytes":[3248,4008]},"callee":null}}}}},"StartStopResult":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartStopResult","kind":"struct","span":{"start":[101,1],"end":[107,2],"bytes":[2475,2659]},"callables":{},"fields":{"DBPath":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartStopResult/DBPath","kind":"field","type":"string","span":{"start":[103,1],"end":[103,32],"bytes":[2536,2567]}},"Socket":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartStopResult/Socket","kind":"field","type":"string","span":{"start":[106,1],"end":[106,31],"bytes":[2627,2657]}},"State":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartStopResult/State","kind":"field","type":"string","span":{"start":[104,1],"end":[104,30],"bytes":[2568,2597]}},"Status":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartStopResult/Status","kind":"field","type":"string","span":{"start":[102,1],"end":[102,31],"bytes":[2505,2535]}},"TXID":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartStopResult/TXID","kind":"field","type":"uint64","span":{"start":[105,1],"end":[105,29],"bytes":[2598,2626]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.printStartStopResult":{"id":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.printStartStopResult","kind":"function","span":{"start":[109,1],"end":[126,2],"bytes":[2661,3159]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.printStartStopResult","parameters":[{"name":"result","type":"github.com/benbjohnson/litestream/cmd/litestream.StartStopResult","span":{"start":[109,1],"end":[109,75],"bytes":[2661,2735]}},{"name":"jsonOutput","type":"bool","span":{"start":[109,1],"end":[109,75],"bytes":[2661,2735]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"111:18":{"kind":"call","span":{"start":[111,18],"end":[111,54],"bytes":[2770,2806]},"callee":null},"113:11":{"kind":"call","span":{"start":[113,11],"end":[113,59],"bytes":[2835,2883]},"callee":null},"115:15":{"kind":"call","span":{"start":[115,15],"end":[115,29],"bytes":[2902,2916]},"callee":null},"115:3":{"kind":"call","span":{"start":[115,3],"end":[115,30],"bytes":[2890,2917]},"callee":null},"119:2":{"kind":"call","span":{"start":[119,2],"end":[119,43],"bytes":[2936,2977]},"callee":null},"120:2":{"kind":"call","span":{"start":[120,2],"end":[120,44],"bytes":[2979,3021]},"callee":null},"121:2":{"kind":"call","span":{"start":[121,2],"end":[121,41],"bytes":[3023,3062]},"callee":null},"122:2":{"kind":"call","span":{"start":[122,2],"end":[122,39],"bytes":[3064,3101]},"callee":null},"123:2":{"kind":"call","span":{"start":[123,2],"end":[123,43],"bytes":[3103,3144]},"callee":null}}}},"content_hash":"84e42db46c78b62cc29bf708a9610b4ddb39e2e2ce292b681993a6b1316102d6"},"cmd/litestream/status.go":{"id":"can://go/litestream/cmd/litestream/status.go","kind":"module","span":{"start":[1,1],"end":[174,1],"bytes":[0,3920]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"text/tabwriter\"\n\n\t\"github.com/dustin/go-humanize\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// StatusCommand is a command for displaying replication status.\ntype StatusCommand struct{}\n\n// Run executes the command.\nfunc (c *StatusCommand) Run(ctx context.Context, args []string) (err error) {\n\tfs := flag.NewFlagSet(\"litestream-status\", flag.ContinueOnError)\n\tconfigPath, noExpandEnv := registerConfigFlag(fs)\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\t// Load configuration.\n\tif *configPath == \"\" {\n\t\t*configPath = DefaultConfigPath()\n\t}\n\tconfig, err := ReadConfigFile(*configPath, !*noExpandEnv)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If a specific database path is provided, filter to just that one.\n\tvar filterPath string\n\tif fs.NArg() \u003e 0 {\n\t\tfilterPath = fs.Arg(0)\n\t}\n\n\tstatuses := make([]DBStatus, 0, len(config.DBs))\n\n\tfor _, dbConfig := range config.DBs {\n\t\tdb, err := NewDBFromConfig(dbConfig)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Filter if path specified.\n\t\tif filterPath != \"\" \u0026\u0026 db.Path() != filterPath {\n\t\t\tcontinue\n\t\t}\n\n\t\tstatuses = append(statuses, c.getDBStatus(db))\n\t}\n\n\tif *jsonOutput {\n\t\toutput, err := json.MarshalIndent(statuses, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tw := tabwriter.NewWriter(os.Stdout, 0, 8, 2, ' ', 0)\n\tdefer w.Flush()\n\n\tfmt.Fprintln(w, \"database\\tstatus\\tlocal txid\\twal size\")\n\tfor _, status := range statuses {\n\t\tfmt.Fprintf(w, \"%s\\t%s\\t%s\\t%s\\n\",\n\t\t\tstatus.Database,\n\t\t\tstatus.Status,\n\t\t\tstatus.LocalTXID,\n\t\t\tstatus.WALSize,\n\t\t)\n\t}\n\n\treturn nil\n}\n\n// DBStatus holds the status information for a single database.\ntype DBStatus struct {\n\tDatabase string `json:\"database\"`\n\tStatus string `json:\"status\"`\n\tLocalTXID string `json:\"local_txid\"`\n\tWALSize string `json:\"wal_size\"`\n}\n\n// getDBStatus gathers status information for a database.\nfunc (c *StatusCommand) getDBStatus(db *litestream.DB) DBStatus {\n\tstatus := DBStatus{\n\t\tDatabase: db.Path(),\n\t\tStatus: \"unknown\",\n\t\tLocalTXID: \"-\",\n\t\tWALSize: \"-\",\n\t}\n\n\t// Check if database file exists.\n\tdbPath := db.Path()\n\tif _, err := os.Stat(dbPath); os.IsNotExist(err) {\n\t\tstatus.Status = \"no database\"\n\t\treturn status\n\t}\n\n\t// Get WAL file size.\n\twalPath := db.WALPath()\n\tif walInfo, err := os.Stat(walPath); err == nil {\n\t\tstatus.WALSize = humanize.Bytes(uint64(walInfo.Size()))\n\t} else if os.IsNotExist(err) {\n\t\tstatus.WALSize = \"0 B\"\n\t}\n\n\t// Get local TXID from L0 directory.\n\t_, maxTXID, err := db.MaxLTX()\n\tif err == nil \u0026\u0026 maxTXID \u003e 0 {\n\t\tstatus.LocalTXID = maxTXID.String()\n\t\tstatus.Status = \"ok\"\n\t} else if err == nil {\n\t\tstatus.Status = \"not initialized\"\n\t} else {\n\t\tstatus.Status = \"error\"\n\t}\n\n\treturn status\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *StatusCommand) Usage() {\n\tfmt.Printf(`\nThe status command displays the replication status of databases.\n\nUsage:\n\n\tlitestream status [arguments] [database path]\n\nArguments:\n\n\t-config PATH\n\t Specifies the configuration file.\n\t Defaults to %s\n\n\t-json\n\t Output raw JSON instead of human-readable text.\n\n\t-no-expand-env\n\t Disables environment variable expansion in configuration file.\n\nIf a database path is provided, only that database's status is shown.\nOtherwise, all configured databases are displayed.\n\nOutput columns:\n database Path to the SQLite database\n status Current status (ok, not initialized, no database, error)\n local txid Latest local transaction ID\n wal size Current WAL file size\n\nNote: To see replica TXID and sync status, inspect daemon diagnostics or logs\nwhile the replication daemon is running.\n\nExamples:\n\n\t$ litestream status\n\t$ litestream status /path/to/db\n\t$ litestream status -json\n\n`[1:],\n\t\tDefaultConfigPath(),\n\t)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[34,50]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[51,58]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[59,65]}},{"name":"os","path":"os","span":{"start":[8,1],"end":[8,6],"bytes":[66,71]}},{"name":"tabwriter","path":"text/tabwriter","span":{"start":[9,1],"end":[9,18],"bytes":[72,89]}},{"name":"go-humanize","path":"github.com/dustin/go-humanize","span":{"start":[11,1],"end":[11,33],"bytes":[91,123]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[13,1],"end":[13,37],"bytes":[125,161]}}],"types":{"DBStatus":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.DBStatus","kind":"struct","span":{"start":[86,1],"end":[91,2],"bytes":[1827,1995]},"callables":{},"fields":{"Database":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.DBStatus/Database","kind":"field","type":"string","span":{"start":[87,1],"end":[87,36],"bytes":[1850,1885]}},"LocalTXID":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.DBStatus/LocalTXID","kind":"field","type":"string","span":{"start":[89,1],"end":[89,38],"bytes":[1920,1957]}},"Status":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.DBStatus/Status","kind":"field","type":"string","span":{"start":[88,1],"end":[88,34],"bytes":[1886,1919]}},"WALSize":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.DBStatus/WALSize","kind":"field","type":"string","span":{"start":[90,1],"end":[90,36],"bytes":[1958,1993]}}}},"StatusCommand":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand","kind":"struct","span":{"start":[17,1],"end":[17,28],"bytes":[230,257]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","kind":"method","span":{"start":[20,1],"end":[83,2],"bytes":[288,1761]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[20,1],"end":[20,78],"bytes":[288,365]}},{"name":"args","type":"[]string","span":{"start":[20,1],"end":[20,78],"bytes":[288,365]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"21:8":{"kind":"call","span":{"start":[21,8],"end":[21,66],"bytes":[373,431]},"callee":null},"22:29":{"kind":"call","span":{"start":[22,29],"end":[22,51],"bytes":[460,482]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag"},"23:16":{"kind":"call","span":{"start":[23,16],"end":[23,57],"bytes":[498,539]},"callee":null},"25:12":{"kind":"call","span":{"start":[25,12],"end":[25,26],"bytes":[571,585]},"callee":null},"31:17":{"kind":"call","span":{"start":[31,17],"end":[31,36],"bytes":[681,700]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"33:17":{"kind":"call","span":{"start":[33,17],"end":[33,59],"bytes":[720,762]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile"},"40:5":{"kind":"call","span":{"start":[40,5],"end":[40,14],"bytes":[894,903]},"callee":null},"41:16":{"kind":"call","span":{"start":[41,16],"end":[41,25],"bytes":[925,934]},"callee":null},"44:14":{"kind":"call","span":{"start":[44,14],"end":[44,50],"bytes":[952,988]},"callee":null},"44:34":{"kind":"call","span":{"start":[44,34],"end":[44,49],"bytes":[972,987]},"callee":null},"47:14":{"kind":"call","span":{"start":[47,14],"end":[47,39],"bytes":[1042,1067]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig"},"53:26":{"kind":"call","span":{"start":[53,26],"end":[53,35],"bytes":[1161,1170]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"57:14":{"kind":"call","span":{"start":[57,14],"end":[57,49],"bytes":[1217,1252]},"callee":null},"57:31":{"kind":"call","span":{"start":[57,31],"end":[57,48],"bytes":[1234,1251]},"callee":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus"},"61:18":{"kind":"call","span":{"start":[61,18],"end":[61,56],"bytes":[1292,1330]},"callee":null},"63:11":{"kind":"call","span":{"start":[63,11],"end":[63,59],"bytes":[1359,1407]},"callee":null},"65:15":{"kind":"call","span":{"start":[65,15],"end":[65,29],"bytes":[1426,1440]},"callee":null},"65:3":{"kind":"call","span":{"start":[65,3],"end":[65,30],"bytes":[1414,1441]},"callee":null},"69:7":{"kind":"call","span":{"start":[69,7],"end":[69,54],"bytes":[1465,1512]},"callee":null},"70:8":{"kind":"call","span":{"start":[70,8],"end":[70,17],"bytes":[1520,1529]},"callee":null},"72:2":{"kind":"call","span":{"start":[72,2],"end":[72,59],"bytes":[1532,1589]},"callee":null},"74:3":{"kind":"call","span":{"start":[74,3],"end":[79,4],"bytes":[1627,1743]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Usage":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Usage","kind":"method","span":{"start":[132,1],"end":[173,2],"bytes":[2932,3919]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"133:2":{"kind":"call","span":{"start":[133,2],"end":[172,3],"bytes":[2967,3917]},"callee":null},"171:3":{"kind":"call","span":{"start":[171,3],"end":[171,22],"bytes":[3894,3913]},"callee":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath"}}},"github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus":{"id":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus","kind":"method","span":{"start":[94,1],"end":[129,2],"bytes":[2055,2887]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus","parameters":[{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[94,1],"end":[94,66],"bytes":[2055,2120]}}],"return_type":"github.com/benbjohnson/litestream/cmd/litestream.DBStatus","metrics":{"cyclomatic":6},"body":{"103:12":{"kind":"call","span":{"start":[103,12],"end":[103,21],"bytes":[2276,2285]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"104:15":{"kind":"call","span":{"start":[104,15],"end":[104,30],"bytes":[2300,2315]},"callee":null},"104:32":{"kind":"call","span":{"start":[104,32],"end":[104,50],"bytes":[2317,2335]},"callee":null},"110:13":{"kind":"call","span":{"start":[110,13],"end":[110,25],"bytes":[2425,2437]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"111:21":{"kind":"call","span":{"start":[111,21],"end":[111,37],"bytes":[2458,2474]},"callee":null},"112:20":{"kind":"call","span":{"start":[112,20],"end":[112,58],"bytes":[2508,2546]},"callee":null},"112:35":{"kind":"call","span":{"start":[112,35],"end":[112,57],"bytes":[2523,2545]},"callee":null},"112:42":{"kind":"call","span":{"start":[112,42],"end":[112,56],"bytes":[2530,2544]},"callee":null},"113:12":{"kind":"call","span":{"start":[113,12],"end":[113,30],"bytes":[2558,2576]},"callee":null},"118:21":{"kind":"call","span":{"start":[118,21],"end":[118,32],"bytes":[2666,2677]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX"},"120:22":{"kind":"call","span":{"start":[120,22],"end":[120,38],"bytes":[2731,2747]},"callee":null},"96:14":{"kind":"call","span":{"start":[96,14],"end":[96,23],"bytes":[2155,2164]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"}}}}}},"functions":{},"content_hash":"98a8f08a6eb5a3cbf7ad03e9f39b80995556107089918886c263347426f999a9"},"cmd/litestream/stop.go":{"id":"can://go/litestream/cmd/litestream/stop.go","kind":"module","span":{"start":[1,1],"end":[133,1],"bytes":[0,3330]},"package":"main","source":"package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// StopCommand represents the command to stop replication for a database.\ntype StopCommand struct{}\n\n// Run executes the stop command.\nfunc (c *StopCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-stop\", flag.ContinueOnError)\n\ttimeout := fs.Int(\"timeout\", 30, \"timeout in seconds\")\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() == 0 {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path required\",\n\t\t\thint: \"litestream stop /path/to/db\",\n\t\t}\n\t}\n\tif fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\n\tdbPath := fs.Arg(0)\n\n\t// Create HTTP client that connects via Unix socket with timeout\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\treq := litestream.StopRequest{\n\t\tPath: dbPath,\n\t\tTimeout: *timeout,\n\t}\n\treqBody, err := json.Marshal(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\tresp, err := client.Post(\"http://localhost/stop\", \"application/json\", bytes.NewReader(reqBody))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"stop failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"stop failed: %s\", string(body))\n\t}\n\n\tvar result litestream.StopResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tconfirmation := StartStopResult{\n\t\tStatus: result.Status,\n\t\tDBPath: result.Path,\n\t\tState: \"stopped\",\n\t\tTXID: result.TXID,\n\t\tSocket: *socketPath,\n\t}\n\tif err := printStartStopResult(confirmation, *jsonOutput); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// Usage prints the help text for the stop command.\nfunc (c *StopCommand) Usage() {\n\tfmt.Println(`\nusage: litestream stop [OPTIONS] DB_PATH\n\nStop replication for a database.\nStop always waits for shutdown and final sync.\n\nOptions:\n -timeout SECONDS\n Maximum time to wait in seconds (default: 30).\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -json\n Output raw JSON instead of human-readable text.\n\nExamples:\n # Stop replication for a database.\n $ litestream stop /path/to/db\n\n # Stop replication and emit a JSON confirmation.\n $ litestream stop -json /path/to/db\n\n # Stop replication using a non-default control socket.\n $ litestream stop -socket /tmp/litestream.sock /path/to/db\n\n # Stop replication and wait up to 10 seconds for final sync and shutdown.\n $ litestream stop -timeout 10 /path/to/db\n`[1:])\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"json","path":"encoding/json","span":{"start":[6,1],"end":[6,17],"bytes":[43,59]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[60,67]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[68,74]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[75,80]}},{"name":"net","path":"net","span":{"start":[10,1],"end":[10,7],"bytes":[81,87]}},{"name":"http","path":"net/http","span":{"start":[11,1],"end":[11,12],"bytes":[88,99]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[100,107]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[14,1],"end":[14,37],"bytes":[109,145]}}],"types":{"StopCommand":{"id":"can://go/litestream/cmd/litestream/stop.go/github.com/benbjohnson/litestream/cmd/litestream.StopCommand","kind":"struct","span":{"start":[18,1],"end":[18,26],"bytes":[223,248]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run":{"id":"can://go/litestream/cmd/litestream/stop.go/github.com/benbjohnson/litestream/cmd/litestream.StopCommand/github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run","kind":"method","span":{"start":[21,1],"end":[99,2],"bytes":[284,2461]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[21,1],"end":[21,70],"bytes":[284,353]}},{"name":"args","type":"[]string","span":{"start":[21,1],"end":[21,70],"bytes":[284,353]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"22:8":{"kind":"call","span":{"start":[22,8],"end":[22,64],"bytes":[361,417]},"callee":null},"23:13":{"kind":"call","span":{"start":[23,13],"end":[23,56],"bytes":[430,473]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,86],"bytes":[489,559]},"callee":null},"25:16":{"kind":"call","span":{"start":[25,16],"end":[25,57],"bytes":[575,616]},"callee":null},"27:12":{"kind":"call","span":{"start":[27,12],"end":[27,26],"bytes":[648,662]},"callee":null},"31:5":{"kind":"call","span":{"start":[31,5],"end":[31,14],"bytes":[698,707]},"callee":null},"37:5":{"kind":"call","span":{"start":[37,5],"end":[37,14],"bytes":[829,838]},"callee":null},"38:10":{"kind":"call","span":{"start":[38,10],"end":[38,42],"bytes":[854,886]},"callee":null},"41:12":{"kind":"call","span":{"start":[41,12],"end":[41,21],"bytes":[902,911]},"callee":null},"44:19":{"kind":"call","span":{"start":[44,19],"end":[44,42],"bytes":[997,1020]},"callee":null},"58:18":{"kind":"call","span":{"start":[58,18],"end":[58,35],"bytes":[1359,1376]},"callee":null},"60:10":{"kind":"call","span":{"start":[60,10],"end":[60,58],"bytes":[1403,1451]},"callee":null},"63:15":{"kind":"call","span":{"start":[63,15],"end":[63,97],"bytes":[1470,1552]},"callee":null},"63:72":{"kind":"call","span":{"start":[63,72],"end":[63,96],"bytes":[1527,1551]},"callee":null},"65:10":{"kind":"call","span":{"start":[65,10],"end":[65,68],"bytes":[1579,1637]},"callee":null},"67:8":{"kind":"call","span":{"start":[67,8],"end":[67,25],"bytes":[1648,1665]},"callee":null},"69:15":{"kind":"call","span":{"start":[69,15],"end":[69,36],"bytes":[1681,1702]},"callee":null},"71:10":{"kind":"call","span":{"start":[71,10],"end":[71,56],"bytes":[1729,1775]},"callee":null},"76:13":{"kind":"call","span":{"start":[76,13],"end":[76,43],"bytes":[1870,1900]},"callee":null},"77:11":{"kind":"call","span":{"start":[77,11],"end":[77,55],"bytes":[1948,1992]},"callee":null},"79:10":{"kind":"call","span":{"start":[79,10],"end":[79,53],"bytes":[2006,2049]},"callee":null},"79:40":{"kind":"call","span":{"start":[79,40],"end":[79,52],"bytes":[2036,2048]},"callee":null},"83:12":{"kind":"call","span":{"start":[83,12],"end":[83,41],"bytes":[2101,2130]},"callee":null},"84:10":{"kind":"call","span":{"start":[84,10],"end":[84,57],"bytes":[2154,2201]},"callee":null},"94:12":{"kind":"call","span":{"start":[94,12],"end":[94,59],"bytes":[2369,2416]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/stop.go/github.com/benbjohnson/litestream/cmd/litestream.StopCommand/github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run.closure_1","kind":"function","span":{"start":[48,1],"end":[50,6],"bytes":[1116,1257]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[48,1],"end":[48,73],"bytes":[1116,1188]}},{"name":"_","type":"string","span":{"start":[48,1],"end":[48,73],"bytes":[1116,1188]}},{"name":"_","type":"string","span":{"start":[48,1],"end":[48,73],"bytes":[1116,1188]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"49:12":{"kind":"call","span":{"start":[49,12],"end":[49,63],"bytes":[1200,1251]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Usage":{"id":"can://go/litestream/cmd/litestream/stop.go/github.com/benbjohnson/litestream/cmd/litestream.StopCommand/github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Usage","kind":"method","span":{"start":[102,1],"end":[132,2],"bytes":[2515,3329]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"103:2":{"kind":"call","span":{"start":[103,2],"end":[131,7],"bytes":[2548,3327]},"callee":null}}}}}},"functions":{},"content_hash":"7980bb929ad3d474f22b95549b12385368f7253b2704c25e3656b0c025b55625"},"cmd/litestream/sync.go":{"id":"can://go/litestream/cmd/litestream/sync.go","kind":"module","span":{"start":[1,1],"end":[162,1],"bytes":[0,4043]},"package":"main","source":"package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\n// SyncCommand represents the command to force an immediate sync for a database.\ntype SyncCommand struct{}\n\n// Run executes the sync command.\nfunc (c *SyncCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-sync\", flag.ContinueOnError)\n\ttimeout := fs.Int(\"timeout\", 30, \"timeout in seconds\")\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\twait := fs.Bool(\"wait\", false, \"block until sync completes\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() == 0 {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path required\",\n\t\t\thint: \"litestream sync /path/to/db\",\n\t\t}\n\t}\n\tif fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\tif *timeout \u003c= 0 {\n\t\treturn fmt.Errorf(\"timeout must be greater than 0\")\n\t}\n\n\tdbPath := fs.Arg(0)\n\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\treq := litestream.SyncRequest{\n\t\tPath: dbPath,\n\t\tWait: *wait,\n\t\tTimeout: *timeout,\n\t}\n\treqBody, err := json.Marshal(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\tstart := time.Now()\n\tresp, err := client.Post(\"http://localhost/sync\", \"application/json\", bytes.NewReader(reqBody))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\tdurationMS := time.Since(start).Milliseconds()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"sync failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"sync failed: %s\", string(body))\n\t}\n\n\tvar result litestream.SyncResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tconfirmation := SyncResult{\n\t\tDBPath: result.Path,\n\t\tTXID: result.TXID,\n\t\tDurationMS: durationMS,\n\t}\n\tif *wait {\n\t\tconfirmation.ReplicaTXID = \u0026result.ReplicatedTXID\n\t}\n\tif err := printSyncResult(confirmation, *jsonOutput); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\ntype SyncResult struct {\n\tDBPath string `json:\"db_path\"`\n\tTXID uint64 `json:\"txid\"`\n\tReplicaTXID *uint64 `json:\"replica_txid,omitempty\"`\n\tDurationMS int64 `json:\"duration_ms\"`\n}\n\nfunc printSyncResult(result SyncResult, jsonOutput bool) error {\n\tif jsonOutput {\n\t\toutput, err := json.MarshalIndent(result, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"db_path: %s\\n\", result.DBPath)\n\tfmt.Printf(\"txid: %d\\n\", result.TXID)\n\tif result.ReplicaTXID != nil {\n\t\tfmt.Printf(\"replica_txid: %d\\n\", *result.ReplicaTXID)\n\t}\n\tfmt.Printf(\"duration_ms: %d\\n\", result.DurationMS)\n\n\treturn nil\n}\n\n// Usage prints the help text for the sync command.\nfunc (c *SyncCommand) Usage() {\n\tfmt.Println(`\nusage: litestream sync [OPTIONS] DB_PATH\n\nForce an immediate sync for a database.\n\nOptions:\n -wait\n Block until sync completes including remote replication (default: false).\n\n -timeout SECONDS\n Maximum time to wait in seconds, best-effort (default: 30).\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -json\n Output raw JSON instead of human-readable text.\n\nExamples:\n $ litestream sync /path/to/db\n $ litestream sync -json /path/to/db\n $ litestream sync -wait /path/to/db\n $ litestream sync -wait -timeout 120 /path/to/db\n`[1:])\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"json","path":"encoding/json","span":{"start":[6,1],"end":[6,17],"bytes":[43,59]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[60,67]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[68,74]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[75,80]}},{"name":"net","path":"net","span":{"start":[10,1],"end":[10,7],"bytes":[81,87]}},{"name":"http","path":"net/http","span":{"start":[11,1],"end":[11,12],"bytes":[88,99]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[100,107]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[14,1],"end":[14,37],"bytes":[109,145]}}],"types":{"SyncCommand":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand","kind":"struct","span":{"start":[18,1],"end":[18,26],"bytes":[230,255]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run","kind":"method","span":{"start":[21,1],"end":[106,2],"bytes":[291,2650]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[21,1],"end":[21,70],"bytes":[291,360]}},{"name":"args","type":"[]string","span":{"start":[21,1],"end":[21,70],"bytes":[291,360]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"101:12":{"kind":"call","span":{"start":[101,12],"end":[101,54],"bytes":[2563,2605]},"callee":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.printSyncResult"},"22:8":{"kind":"call","span":{"start":[22,8],"end":[22,64],"bytes":[368,424]},"callee":null},"23:13":{"kind":"call","span":{"start":[23,13],"end":[23,56],"bytes":[437,480]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,86],"bytes":[496,566]},"callee":null},"25:10":{"kind":"call","span":{"start":[25,10],"end":[25,62],"bytes":[576,628]},"callee":null},"26:16":{"kind":"call","span":{"start":[26,16],"end":[26,57],"bytes":[644,685]},"callee":null},"28:12":{"kind":"call","span":{"start":[28,12],"end":[28,26],"bytes":[717,731]},"callee":null},"32:5":{"kind":"call","span":{"start":[32,5],"end":[32,14],"bytes":[767,776]},"callee":null},"38:5":{"kind":"call","span":{"start":[38,5],"end":[38,14],"bytes":[898,907]},"callee":null},"39:10":{"kind":"call","span":{"start":[39,10],"end":[39,42],"bytes":[923,955]},"callee":null},"42:10":{"kind":"call","span":{"start":[42,10],"end":[42,54],"bytes":[988,1032]},"callee":null},"45:12":{"kind":"call","span":{"start":[45,12],"end":[45,21],"bytes":[1048,1057]},"callee":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion"},"47:19":{"kind":"call","span":{"start":[47,19],"end":[47,42],"bytes":[1077,1100]},"callee":null},"62:18":{"kind":"call","span":{"start":[62,18],"end":[62,35],"bytes":[1457,1474]},"callee":null},"64:10":{"kind":"call","span":{"start":[64,10],"end":[64,58],"bytes":[1501,1549]},"callee":null},"67:11":{"kind":"call","span":{"start":[67,11],"end":[67,21],"bytes":[1564,1574]},"callee":null},"68:15":{"kind":"call","span":{"start":[68,15],"end":[68,97],"bytes":[1589,1671]},"callee":null},"68:72":{"kind":"call","span":{"start":[68,72],"end":[68,96],"bytes":[1646,1670]},"callee":null},"70:10":{"kind":"call","span":{"start":[70,10],"end":[70,68],"bytes":[1698,1756]},"callee":null},"72:8":{"kind":"call","span":{"start":[72,8],"end":[72,25],"bytes":[1767,1784]},"callee":null},"73:16":{"kind":"call","span":{"start":[73,16],"end":[73,33],"bytes":[1800,1817]},"callee":null},"75:15":{"kind":"call","span":{"start":[75,15],"end":[75,36],"bytes":[1848,1869]},"callee":null},"77:10":{"kind":"call","span":{"start":[77,10],"end":[77,56],"bytes":[1896,1942]},"callee":null},"82:13":{"kind":"call","span":{"start":[82,13],"end":[82,43],"bytes":[2037,2067]},"callee":null},"83:11":{"kind":"call","span":{"start":[83,11],"end":[83,55],"bytes":[2115,2159]},"callee":null},"85:10":{"kind":"call","span":{"start":[85,10],"end":[85,53],"bytes":[2173,2216]},"callee":null},"85:40":{"kind":"call","span":{"start":[85,40],"end":[85,52],"bytes":[2203,2215]},"callee":null},"89:12":{"kind":"call","span":{"start":[89,12],"end":[89,41],"bytes":[2268,2297]},"callee":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches"},"90:10":{"kind":"call","span":{"start":[90,10],"end":[90,57],"bytes":[2321,2368]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run.closure_1","kind":"function","span":{"start":[51,1],"end":[53,6],"bytes":[1196,1337]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[51,1],"end":[51,73],"bytes":[1196,1268]}},{"name":"_","type":"string","span":{"start":[51,1],"end":[51,73],"bytes":[1196,1268]}},{"name":"_","type":"string","span":{"start":[51,1],"end":[51,73],"bytes":[1196,1268]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"52:12":{"kind":"call","span":{"start":[52,12],"end":[52,63],"bytes":[1280,1331]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Usage":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Usage","kind":"method","span":{"start":[136,1],"end":[161,2],"bytes":[3406,4042]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"137:2":{"kind":"call","span":{"start":[137,2],"end":[160,7],"bytes":[3439,4040]},"callee":null}}}}},"SyncResult":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncResult","kind":"struct","span":{"start":[108,1],"end":[113,2],"bytes":[2652,2846]},"callables":{},"fields":{"DBPath":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncResult/DBPath","kind":"field","type":"string","span":{"start":[109,1],"end":[109,38],"bytes":[2677,2714]}},"DurationMS":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncResult/DurationMS","kind":"field","type":"int64","span":{"start":[112,1],"end":[112,42],"bytes":[2803,2844]}},"ReplicaTXID":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncResult/ReplicaTXID","kind":"field","type":"*uint64","span":{"start":[111,1],"end":[111,53],"bytes":[2750,2802]}},"TXID":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncResult/TXID","kind":"field","type":"uint64","span":{"start":[110,1],"end":[110,35],"bytes":[2715,2749]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.printSyncResult":{"id":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.printSyncResult","kind":"function","span":{"start":[115,1],"end":[133,2],"bytes":[2848,3352]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.printSyncResult","parameters":[{"name":"result","type":"github.com/benbjohnson/litestream/cmd/litestream.SyncResult","span":{"start":[115,1],"end":[115,65],"bytes":[2848,2912]}},{"name":"jsonOutput","type":"bool","span":{"start":[115,1],"end":[115,65],"bytes":[2848,2912]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"117:18":{"kind":"call","span":{"start":[117,18],"end":[117,54],"bytes":[2947,2983]},"callee":null},"119:11":{"kind":"call","span":{"start":[119,11],"end":[119,59],"bytes":[3012,3060]},"callee":null},"121:15":{"kind":"call","span":{"start":[121,15],"end":[121,29],"bytes":[3079,3093]},"callee":null},"121:3":{"kind":"call","span":{"start":[121,3],"end":[121,30],"bytes":[3067,3094]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"},"125:2":{"kind":"call","span":{"start":[125,2],"end":[125,44],"bytes":[3113,3155]},"callee":null},"126:2":{"kind":"call","span":{"start":[126,2],"end":[126,39],"bytes":[3157,3194]},"callee":null},"128:3":{"kind":"call","span":{"start":[128,3],"end":[128,56],"bytes":[3229,3282]},"callee":null},"130:2":{"kind":"call","span":{"start":[130,2],"end":[130,52],"bytes":[3287,3337]},"callee":null}}}},"content_hash":"f124c02d744ececee52a6c5a31922dc5e6a71a5b9fe8ad28262622a0785c0d9b"},"cmd/litestream/unregister.go":{"id":"can://go/litestream/cmd/litestream/unregister.go","kind":"module","span":{"start":[1,1],"end":[177,1],"bytes":[0,4764]},"package":"main","source":"package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\ntype UnregisterCommand struct{}\n\nfunc (c *UnregisterCommand) Run(ctx context.Context, args []string) error {\n\tfs := flag.NewFlagSet(\"litestream-unregister\", flag.ContinueOnError)\n\ttimeout := fs.Int(\"timeout\", 30, \"timeout in seconds\")\n\tsocketPath := fs.String(\"socket\", \"/var/run/litestream.sock\", \"control socket path\")\n\tdryRun := fs.Bool(\"dry-run\", false, \"print what would be unregistered without changing the daemon\")\n\tjsonOutput := fs.Bool(\"json\", false, \"output raw JSON\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif fs.NArg() == 0 {\n\t\treturn \u0026usageError{\n\t\t\tmessage: \"database path required\",\n\t\t\thint: \"litestream unregister /path/to/db\",\n\t\t}\n\t}\n\tif fs.NArg() \u003e 1 {\n\t\treturn fmt.Errorf(\"too many arguments\")\n\t}\n\tif *timeout \u003c= 0 {\n\t\treturn fmt.Errorf(\"timeout must be greater than 0\")\n\t}\n\n\tdbPath := fs.Arg(0)\n\n\tif *dryRun {\n\t\tfmt.Println(\"Dry run: unregister request preview\")\n\t\tfmt.Printf(\" database: %s\\n\", dbPath)\n\t\tfmt.Printf(\" socket: %s\\n\", *socketPath)\n\t\tfmt.Printf(\" replicas: daemon-managed replica for this database\\n\")\n\t\tfmt.Printf(\" final sync: daemon close will sync the database and replica before the command completes\\n\")\n\t\tfmt.Printf(\" timeout: %ds\\n\", *timeout)\n\t\tfmt.Println(\"No unregister request was sent.\")\n\t\treturn nil\n\t}\n\n\t// Create HTTP client that connects via Unix socket with timeout.\n\tclientTimeout := time.Duration(*timeout) * time.Second\n\tclient := \u0026http.Client{\n\t\tTimeout: clientTimeout,\n\t\tTransport: \u0026http.Transport{\n\t\t\tDialContext: func(_ context.Context, _, _ string) (net.Conn, error) {\n\t\t\t\treturn net.DialTimeout(\"unix\", *socketPath, clientTimeout)\n\t\t\t},\n\t\t},\n\t}\n\n\treq := litestream.UnregisterDatabaseRequest{\n\t\tPath: dbPath,\n\t\tTimeout: *timeout,\n\t}\n\treqBody, err := json.Marshal(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to marshal request: %w\", err)\n\t}\n\n\tresp, err := client.Post(\"http://localhost/unregister\", \"application/json\", bytes.NewReader(reqBody))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to control socket: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to read response: %w\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tvar errResp litestream.ErrorResponse\n\t\tif err := json.Unmarshal(body, \u0026errResp); err == nil \u0026\u0026 errResp.Error != \"\" {\n\t\t\treturn fmt.Errorf(\"unregister failed: %s\", errResp.Error)\n\t\t}\n\t\treturn fmt.Errorf(\"unregister failed: %s\", string(body))\n\t}\n\n\tvar result litestream.UnregisterDatabaseResponse\n\tif err := json.Unmarshal(body, \u0026result); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse response: %w\", err)\n\t}\n\n\tconfirmation := UnregisterResult{\n\t\tStatus: result.Status,\n\t\tDBPath: result.Path,\n\t\tFinalTXID: result.TXID,\n\t\tSocket: *socketPath,\n\t}\n\tif err := printUnregisterResult(confirmation, *jsonOutput); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\ntype UnregisterResult struct {\n\tStatus string `json:\"status\"`\n\tDBPath string `json:\"db_path\"`\n\tFinalTXID uint64 `json:\"final_txid\"`\n\tSocket string `json:\"socket\"`\n}\n\nfunc printUnregisterResult(result UnregisterResult, jsonOutput bool) error {\n\tif jsonOutput {\n\t\toutput, err := json.MarshalIndent(result, \"\", \" \")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to format response: %w\", err)\n\t\t}\n\t\tfmt.Println(string(output))\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"status: %s\\n\", result.Status)\n\tfmt.Printf(\"db_path: %s\\n\", result.DBPath)\n\tfmt.Printf(\"final_txid: %d\\n\", result.FinalTXID)\n\tfmt.Printf(\"socket: %s\\n\", result.Socket)\n\n\treturn nil\n}\n\nfunc (c *UnregisterCommand) Usage() {\n\tfmt.Println(`\nusage: litestream unregister [OPTIONS] DB_PATH\n\nUnregister a database from replication.\n\nArguments:\n DB_PATH Path to the SQLite database file.\n\nOptions:\n -timeout SECONDS\n Maximum time to wait in seconds (default: 30).\n\n -socket PATH\n Path to control socket (default: /var/run/litestream.sock).\n\n -dry-run\n Preview what would be unregistered without changing the daemon.\n\n -json\n Output raw JSON instead of human-readable text.\n\nExamples:\n # Unregister a database from the running daemon.\n $ litestream unregister /path/to/db\n\n # Unregister a database and emit a JSON confirmation.\n $ litestream unregister -json /path/to/db\n\n # Preview an unregister request without changing the daemon.\n $ litestream unregister -dry-run /path/to/db\n\n # Unregister a database using a non-default control socket.\n $ litestream unregister -socket /tmp/litestream.sock /path/to/db\n\n # Unregister a database and wait up to 10 seconds for shutdown.\n $ litestream unregister -timeout 10 /path/to/db\n`[1:])\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"json","path":"encoding/json","span":{"start":[6,1],"end":[6,17],"bytes":[43,59]}},{"name":"flag","path":"flag","span":{"start":[7,1],"end":[7,8],"bytes":[60,67]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[68,74]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[75,80]}},{"name":"net","path":"net","span":{"start":[10,1],"end":[10,7],"bytes":[81,87]}},{"name":"http","path":"net/http","span":{"start":[11,1],"end":[11,12],"bytes":[88,99]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[100,107]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[14,1],"end":[14,37],"bytes":[109,145]}}],"types":{"UnregisterCommand":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand","kind":"struct","span":{"start":[17,1],"end":[17,32],"bytes":[149,180]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run","kind":"method","span":{"start":[19,1],"end":[111,2],"bytes":[182,3036]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[19,1],"end":[19,76],"bytes":[182,257]}},{"name":"args","type":"[]string","span":{"start":[19,1],"end":[19,76],"bytes":[182,257]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"106:12":{"kind":"call","span":{"start":[106,12],"end":[106,60],"bytes":[2943,2991]},"callee":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.printUnregisterResult"},"20:8":{"kind":"call","span":{"start":[20,8],"end":[20,70],"bytes":[265,327]},"callee":null},"21:13":{"kind":"call","span":{"start":[21,13],"end":[21,56],"bytes":[340,383]},"callee":null},"22:16":{"kind":"call","span":{"start":[22,16],"end":[22,86],"bytes":[399,469]},"callee":null},"23:12":{"kind":"call","span":{"start":[23,12],"end":[23,101],"bytes":[481,570]},"callee":null},"24:16":{"kind":"call","span":{"start":[24,16],"end":[24,57],"bytes":[586,627]},"callee":null},"26:12":{"kind":"call","span":{"start":[26,12],"end":[26,26],"bytes":[659,673]},"callee":null},"30:5":{"kind":"call","span":{"start":[30,5],"end":[30,14],"bytes":[709,718]},"callee":null},"36:5":{"kind":"call","span":{"start":[36,5],"end":[36,14],"bytes":[846,855]},"callee":null},"37:10":{"kind":"call","span":{"start":[37,10],"end":[37,42],"bytes":[871,903]},"callee":null},"40:10":{"kind":"call","span":{"start":[40,10],"end":[40,54],"bytes":[936,980]},"callee":null},"43:12":{"kind":"call","span":{"start":[43,12],"end":[43,21],"bytes":[996,1005]},"callee":null},"46:3":{"kind":"call","span":{"start":[46,3],"end":[46,53],"bytes":[1023,1073]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog"},"47:3":{"kind":"call","span":{"start":[47,3],"end":[47,41],"bytes":[1076,1114]},"callee":null},"48:3":{"kind":"call","span":{"start":[48,3],"end":[48,44],"bytes":[1117,1158]},"callee":null},"49:3":{"kind":"call","span":{"start":[49,3],"end":[49,71],"bytes":[1161,1229]},"callee":null},"50:3":{"kind":"call","span":{"start":[50,3],"end":[50,109],"bytes":[1232,1338]},"callee":null},"51:3":{"kind":"call","span":{"start":[51,3],"end":[51,43],"bytes":[1341,1381]},"callee":null},"52:3":{"kind":"call","span":{"start":[52,3],"end":[52,49],"bytes":[1384,1430]},"callee":null},"57:19":{"kind":"call","span":{"start":[57,19],"end":[57,42],"bytes":[1533,1556]},"callee":null},"71:18":{"kind":"call","span":{"start":[71,18],"end":[71,35],"bytes":[1909,1926]},"callee":null},"73:10":{"kind":"call","span":{"start":[73,10],"end":[73,58],"bytes":[1953,2001]},"callee":null},"76:15":{"kind":"call","span":{"start":[76,15],"end":[76,103],"bytes":[2020,2108]},"callee":null},"76:78":{"kind":"call","span":{"start":[76,78],"end":[76,102],"bytes":[2083,2107]},"callee":null},"78:10":{"kind":"call","span":{"start":[78,10],"end":[78,68],"bytes":[2135,2193]},"callee":null},"80:8":{"kind":"call","span":{"start":[80,8],"end":[80,25],"bytes":[2204,2221]},"callee":null},"82:15":{"kind":"call","span":{"start":[82,15],"end":[82,36],"bytes":[2237,2258]},"callee":null},"84:10":{"kind":"call","span":{"start":[84,10],"end":[84,56],"bytes":[2285,2331]},"callee":null},"89:13":{"kind":"call","span":{"start":[89,13],"end":[89,43],"bytes":[2426,2456]},"callee":null},"90:11":{"kind":"call","span":{"start":[90,11],"end":[90,61],"bytes":[2504,2554]},"callee":null},"92:10":{"kind":"call","span":{"start":[92,10],"end":[92,59],"bytes":[2568,2617]},"callee":null},"92:46":{"kind":"call","span":{"start":[92,46],"end":[92,58],"bytes":[2604,2616]},"callee":null},"96:12":{"kind":"call","span":{"start":[96,12],"end":[96,41],"bytes":[2683,2712]},"callee":null},"97:10":{"kind":"call","span":{"start":[97,10],"end":[97,57],"bytes":[2736,2783]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run.closure_1","kind":"function","span":{"start":[61,1],"end":[63,6],"bytes":[1652,1793]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run.closure_1","parameters":[{"name":"_","type":"context.Context","span":{"start":[61,1],"end":[61,73],"bytes":[1652,1724]}},{"name":"_","type":"string","span":{"start":[61,1],"end":[61,73],"bytes":[1652,1724]}},{"name":"_","type":"string","span":{"start":[61,1],"end":[61,73],"bytes":[1652,1724]}}],"return_type":"(net.Conn, error)","error_channel":["error"],"body":{"62:12":{"kind":"call","span":{"start":[62,12],"end":[62,63],"bytes":[1736,1787]},"callee":null}}}}},"github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Usage":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Usage","kind":"method","span":{"start":[138,1],"end":[176,2],"bytes":[3685,4763]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"139:2":{"kind":"call","span":{"start":[139,2],"end":[175,7],"bytes":[3724,4761]},"callee":null}}}}},"UnregisterResult":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterResult","kind":"struct","span":{"start":[113,1],"end":[118,2],"bytes":[3038,3211]},"callables":{},"fields":{"DBPath":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterResult/DBPath","kind":"field","type":"string","span":{"start":[115,1],"end":[115,35],"bytes":[3103,3137]}},"FinalTXID":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterResult/FinalTXID","kind":"field","type":"uint64","span":{"start":[116,1],"end":[116,38],"bytes":[3138,3175]}},"Socket":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterResult/Socket","kind":"field","type":"string","span":{"start":[117,1],"end":[117,34],"bytes":[3176,3209]}},"Status":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterResult/Status","kind":"field","type":"string","span":{"start":[114,1],"end":[114,34],"bytes":[3069,3102]}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.printUnregisterResult":{"id":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.printUnregisterResult","kind":"function","span":{"start":[120,1],"end":[136,2],"bytes":[3213,3683]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.printUnregisterResult","parameters":[{"name":"result","type":"github.com/benbjohnson/litestream/cmd/litestream.UnregisterResult","span":{"start":[120,1],"end":[120,77],"bytes":[3213,3289]}},{"name":"jsonOutput","type":"bool","span":{"start":[120,1],"end":[120,77],"bytes":[3213,3289]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"122:18":{"kind":"call","span":{"start":[122,18],"end":[122,54],"bytes":[3324,3360]},"callee":null},"124:11":{"kind":"call","span":{"start":[124,11],"end":[124,59],"bytes":[3389,3437]},"callee":null},"126:15":{"kind":"call","span":{"start":[126,15],"end":[126,29],"bytes":[3456,3470]},"callee":null},"126:3":{"kind":"call","span":{"start":[126,3],"end":[126,30],"bytes":[3444,3471]},"callee":null},"130:2":{"kind":"call","span":{"start":[130,2],"end":[130,43],"bytes":[3490,3531]},"callee":null},"131:2":{"kind":"call","span":{"start":[131,2],"end":[131,44],"bytes":[3533,3575]},"callee":null},"132:2":{"kind":"call","span":{"start":[132,2],"end":[132,50],"bytes":[3577,3625]},"callee":null},"133:2":{"kind":"call","span":{"start":[133,2],"end":[133,43],"bytes":[3627,3668]},"callee":null}}}},"content_hash":"909fe9bc1d4b8b209baf657348f921a8297a26fbca8d7a9cae91f6b20174a455"},"cmd/litestream/version.go":{"id":"can://go/litestream/cmd/litestream/version.go","kind":"module","span":{"start":[1,1],"end":[110,1],"bytes":[0,2638]},"package":"main","source":"package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"runtime/debug\"\n)\n\n// defaultVersion is the placeholder used when no version was injected at\n// build time via -ldflags \"-X main.Version=...\".\nconst defaultVersion = \"(development build)\"\n\n// resolveVersion returns the most descriptive version string available:\n// the ldflags-injected value, the VCS-stamped module version, the VCS\n// revision, or the development-build placeholder, in that order.\nfunc resolveVersion(injected string, bi *debug.BuildInfo) string {\n\tif injected != \"\" \u0026\u0026 injected != defaultVersion {\n\t\treturn injected\n\t}\n\tif bi == nil {\n\t\treturn defaultVersion\n\t}\n\n\tif v := bi.Main.Version; v != \"\" \u0026\u0026 v != \"(devel)\" {\n\t\treturn v\n\t}\n\n\trevision, modified, _ := vcsSettings(bi)\n\tif revision == \"\" {\n\t\treturn defaultVersion\n\t}\n\tif len(revision) \u003e 12 {\n\t\trevision = revision[:12]\n\t}\n\tif modified {\n\t\trevision += \"-dirty\"\n\t}\n\treturn fmt.Sprintf(\"(development build %s)\", revision)\n}\n\n// vcsSettings extracts VCS metadata from embedded build info settings.\n// The vcs.time value is the commit timestamp, not the build time.\nfunc vcsSettings(bi *debug.BuildInfo) (revision string, modified bool, commitTime string) {\n\tfor _, s := range bi.Settings {\n\t\tswitch s.Key {\n\t\tcase \"vcs.revision\":\n\t\t\trevision = s.Value\n\t\tcase \"vcs.modified\":\n\t\t\tmodified = s.Value == \"true\"\n\t\tcase \"vcs.time\":\n\t\t\tcommitTime = s.Value\n\t\t}\n\t}\n\treturn revision, modified, commitTime\n}\n\n// VersionCommand represents a command to print the current version.\ntype VersionCommand struct{}\n\n// Run executes the command.\nfunc (c *VersionCommand) Run(_ context.Context, args []string) (err error) {\n\tfs := flag.NewFlagSet(\"litestream-version\", flag.ContinueOnError)\n\tverbose := fs.Bool(\"verbose\", false, \"print detailed build metadata\")\n\tfs.Usage = c.Usage\n\tif err := fs.Parse(args); err != nil {\n\t\treturn err\n\t}\n\n\tif !*verbose {\n\t\tfmt.Println(Version)\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"Version: %s\\n\", Version)\n\tfmt.Printf(\"Go Version: %s\\n\", runtime.Version())\n\tif bi, ok := debug.ReadBuildInfo(); ok {\n\t\trevision, modified, commitTime := vcsSettings(bi)\n\t\tif revision != \"\" {\n\t\t\tif modified {\n\t\t\t\trevision += \" (dirty)\"\n\t\t\t}\n\t\t\tfmt.Printf(\"Git Commit: %s\\n\", revision)\n\t\t}\n\t\tif commitTime != \"\" {\n\t\t\tfmt.Printf(\"Commit Time: %s\\n\", commitTime)\n\t\t}\n\t}\n\tfmt.Printf(\"OS/Arch: %s/%s\\n\", runtime.GOOS, runtime.GOARCH)\n\n\treturn nil\n}\n\n// Usage prints the help screen to STDOUT.\nfunc (c *VersionCommand) Usage() {\n\tfmt.Println(`\nPrints the version.\n\nUsage:\n\n\tlitestream version [arguments]\n\nArguments:\n\n\t-verbose\n\t Print detailed build metadata (Go version, commit, build time, OS/arch).\n`[1:])\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"flag","path":"flag","span":{"start":[5,1],"end":[5,8],"bytes":[34,41]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[42,48]}},{"name":"runtime","path":"runtime","span":{"start":[7,1],"end":[7,11],"bytes":[49,59]}},{"name":"debug","path":"runtime/debug","span":{"start":[8,1],"end":[8,17],"bytes":[60,76]}}],"types":{"VersionCommand":{"id":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand","kind":"struct","span":{"start":[60,1],"end":[60,29],"bytes":[1499,1527]},"callables":{"github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Run":{"id":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Run","kind":"method","span":{"start":[63,1],"end":[93,2],"bytes":[1558,2372]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Run","parameters":[{"name":"_","type":"context.Context","span":{"start":[63,1],"end":[63,77],"bytes":[1558,1634]}},{"name":"args","type":"[]string","span":{"start":[63,1],"end":[63,77],"bytes":[1558,1634]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"64:8":{"kind":"call","span":{"start":[64,8],"end":[64,67],"bytes":[1642,1701]},"callee":null},"65:13":{"kind":"call","span":{"start":[65,13],"end":[65,71],"bytes":[1714,1772]},"callee":null},"67:12":{"kind":"call","span":{"start":[67,12],"end":[67,26],"bytes":[1804,1818]},"callee":null},"72:3":{"kind":"call","span":{"start":[72,3],"end":[72,23],"bytes":[1868,1888]},"callee":null},"76:2":{"kind":"call","span":{"start":[76,2],"end":[76,42],"bytes":[1907,1947]},"callee":null},"77:2":{"kind":"call","span":{"start":[77,2],"end":[77,52],"bytes":[1949,1999]},"callee":null},"77:34":{"kind":"call","span":{"start":[77,34],"end":[77,51],"bytes":[1981,1998]},"callee":null},"78:15":{"kind":"call","span":{"start":[78,15],"end":[78,36],"bytes":[2014,2035]},"callee":null},"79:37":{"kind":"call","span":{"start":[79,37],"end":[79,52],"bytes":[2078,2093]},"callee":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.vcsSettings"},"84:4":{"kind":"call","span":{"start":[84,4],"end":[84,45],"bytes":[2168,2209]},"callee":null},"87:4":{"kind":"call","span":{"start":[87,4],"end":[87,47],"bytes":[2241,2284]},"callee":null},"90:2":{"kind":"call","span":{"start":[90,2],"end":[90,66],"bytes":[2293,2357]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Usage":{"id":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Usage","kind":"method","span":{"start":[96,1],"end":[109,2],"bytes":[2417,2637]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Usage","parameters":[],"metrics":{"cyclomatic":1},"body":{"97:2":{"kind":"call","span":{"start":[97,2],"end":[108,7],"bytes":[2453,2635]},"callee":null}}}}}},"functions":{"github.com/benbjohnson/litestream/cmd/litestream.resolveVersion":{"id":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion","kind":"function","span":{"start":[18,1],"end":[41,2],"bytes":[460,955]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.resolveVersion","parameters":[{"name":"injected","type":"string","span":{"start":[18,1],"end":[18,67],"bytes":[460,526]}},{"name":"bi","type":"*runtime/debug.BuildInfo","span":{"start":[18,1],"end":[18,67],"bytes":[460,526]}}],"return_type":"string","metrics":{"cyclomatic":7},"body":{"30:27":{"kind":"call","span":{"start":[30,27],"end":[30,42],"bytes":[738,753]},"callee":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.vcsSettings"},"34:5":{"kind":"call","span":{"start":[34,5],"end":[34,18],"bytes":[806,819]},"callee":null},"40:9":{"kind":"call","span":{"start":[40,9],"end":[40,56],"bytes":[906,953]},"callee":null}}},"github.com/benbjohnson/litestream/cmd/litestream.vcsSettings":{"id":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.vcsSettings","kind":"function","span":{"start":[45,1],"end":[57,2],"bytes":[1096,1428]},"signature":"github.com/benbjohnson/litestream/cmd/litestream.vcsSettings","parameters":[{"name":"bi","type":"*runtime/debug.BuildInfo","span":{"start":[45,1],"end":[45,92],"bytes":[1096,1187]}}],"return_type":"(string, bool, string)","metrics":{"cyclomatic":6},"body":{}}},"content_hash":"ef27995c6f376fd80906b31f6c239dde5ea3d88a99a771ec2962b75139f02da0"},"compaction_level.go":{"id":"can://go/litestream/compaction_level.go","kind":"module","span":{"start":[1,1],"end":[114,1],"bytes":[0,3545]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n// SnapshotLevel represents the level which full snapshots are held.\nconst SnapshotLevel = 9\n\n// DefaultCompactionLevels provides the canonical default compaction configuration.\n// Level 0 is raw LTX files, higher levels compact at increasing intervals.\n// These values are also used by cmd/litestream DefaultConfig().\nvar DefaultCompactionLevels = CompactionLevels{\n\t{Level: 0, Interval: 0},\n\t{Level: 1, Interval: 30 * time.Second},\n\t{Level: 2, Interval: 5 * time.Minute},\n\t{Level: 3, Interval: time.Hour},\n}\n\n// CompactionLevel represents a single part of a multi-level compaction.\n// Each level merges LTX files from the previous level into larger time granularities.\ntype CompactionLevel struct {\n\t// The numeric level. Must match the index in the list of levels.\n\tLevel int\n\n\t// The frequency that the level is compacted from the previous level.\n\tInterval time.Duration\n}\n\n// PrevCompactionAt returns the time when the last compaction occurred.\n// Returns the current time if it is exactly a multiple of the level interval.\nfunc (lvl *CompactionLevel) PrevCompactionAt(now time.Time) time.Time {\n\treturn now.Truncate(lvl.Interval).UTC()\n}\n\n// NextCompactionAt returns the time until the next compaction occurs.\n// Returns the current time if it is exactly a multiple of the level interval.\nfunc (lvl *CompactionLevel) NextCompactionAt(now time.Time) time.Time {\n\treturn lvl.PrevCompactionAt(now).Add(lvl.Interval)\n}\n\n// CompactionLevels represents a sorted slice of non-snapshot compaction levels.\ntype CompactionLevels []*CompactionLevel\n\n// Level returns the compaction level at the given index.\n// Returns an error if the index is a snapshot level or is out of bounds.\nfunc (a CompactionLevels) Level(level int) (*CompactionLevel, error) {\n\tif level == SnapshotLevel {\n\t\treturn nil, fmt.Errorf(\"invalid argument, snapshot level\")\n\t}\n\tif level \u003c 0 || level \u003e a.MaxLevel() {\n\t\treturn nil, fmt.Errorf(\"level out of bounds: %d\", level)\n\t}\n\treturn a[level], nil\n}\n\n// MaxLevel return the highest non-snapshot compaction level.\nfunc (a CompactionLevels) MaxLevel() int {\n\treturn len(a) - 1\n}\n\n// Validate returns an error if the levels are invalid.\nfunc (a CompactionLevels) Validate() error {\n\tif len(a) == 0 {\n\t\treturn fmt.Errorf(\"at least one compaction level is required\")\n\t}\n\n\tfor i, lvl := range a {\n\t\tif i != lvl.Level {\n\t\t\treturn fmt.Errorf(\"compaction level number out of order: %d, expected %d\", lvl.Level, i)\n\t\t} else if lvl.Level \u003e SnapshotLevel-1 {\n\t\t\treturn fmt.Errorf(\"compaction level cannot exceed %d\", SnapshotLevel-1)\n\t\t}\n\n\t\tif lvl.Level == 0 \u0026\u0026 lvl.Interval != 0 {\n\t\t\treturn fmt.Errorf(\"cannot set interval on compaction level zero\")\n\t\t}\n\n\t\tif lvl.Level != 0 \u0026\u0026 lvl.Interval \u003c= 0 {\n\t\t\treturn fmt.Errorf(\"interval required for level %d\", lvl.Level)\n\t\t}\n\t}\n\treturn nil\n}\n\n// IsValidLevel returns true if level is a valid compaction level number.\nfunc (a CompactionLevels) IsValidLevel(level int) bool {\n\tif level == SnapshotLevel {\n\t\treturn true\n\t}\n\treturn level \u003e= 0 \u0026\u0026 level \u003c len(a)\n}\n\n// PrevLevel returns the previous compaction level.\n// Returns -1 if there is no previous level.\nfunc (a CompactionLevels) PrevLevel(level int) int {\n\tif level == SnapshotLevel {\n\t\treturn a.MaxLevel()\n\t}\n\treturn level - 1\n}\n\n// NextLevel returns the next compaction level.\n// Returns -1 if there is no next level.\nfunc (a CompactionLevels) NextLevel(level int) int {\n\tif level == SnapshotLevel {\n\t\treturn -1\n\t} else if level == a.MaxLevel() {\n\t\treturn SnapshotLevel\n\t}\n\treturn level + 1\n}\n","imports":[{"name":"fmt","path":"fmt","span":{"start":[4,1],"end":[4,7],"bytes":[29,35]}},{"name":"time","path":"time","span":{"start":[5,1],"end":[5,8],"bytes":[36,43]}}],"types":{"CompactionLevel":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel","kind":"struct","span":{"start":[23,1],"end":[29,2],"bytes":[718,923]},"callables":{"github.com/benbjohnson/litestream.CompactionLevel.NextCompactionAt":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/github.com/benbjohnson/litestream.CompactionLevel.NextCompactionAt","kind":"method","span":{"start":[39,1],"end":[41,2],"bytes":[1342,1467]},"signature":"github.com/benbjohnson/litestream.CompactionLevel.NextCompactionAt","parameters":[{"name":"now","type":"time.Time","span":{"start":[39,1],"end":[39,72],"bytes":[1342,1413]}}],"return_type":"time.Time","metrics":{"cyclomatic":1},"body":{"40:9":{"kind":"call","span":{"start":[40,9],"end":[40,34],"bytes":[1422,1447]},"callee":null}}},"github.com/benbjohnson/litestream.CompactionLevel.PrevCompactionAt":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/github.com/benbjohnson/litestream.CompactionLevel.PrevCompactionAt","kind":"method","span":{"start":[33,1],"end":[35,2],"bytes":[1076,1190]},"signature":"github.com/benbjohnson/litestream.CompactionLevel.PrevCompactionAt","parameters":[{"name":"now","type":"time.Time","span":{"start":[33,1],"end":[33,72],"bytes":[1076,1147]}}],"return_type":"time.Time","metrics":{"cyclomatic":1},"body":{"34:9":{"kind":"call","span":{"start":[34,9],"end":[34,35],"bytes":[1156,1182]},"callee":null}}}},"fields":{"Interval":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/Interval","kind":"field","type":"time.Duration","span":{"start":[28,1],"end":[28,24],"bytes":[898,921]}},"Level":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/Level","kind":"field","type":"int","span":{"start":[25,1],"end":[25,11],"bytes":[815,825]}}}},"CompactionLevels":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels","kind":"struct","span":{"start":[44,1],"end":[44,41],"bytes":[1550,1590]},"callables":{"github.com/benbjohnson/litestream.CompactionLevels.IsValidLevel":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.IsValidLevel","kind":"method","span":{"start":[88,1],"end":[93,2],"bytes":[2913,3054]},"signature":"github.com/benbjohnson/litestream.CompactionLevels.IsValidLevel","parameters":[{"name":"level","type":"int","span":{"start":[88,1],"end":[88,57],"bytes":[2913,2969]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"92:31":{"kind":"call","span":{"start":[92,31],"end":[92,37],"bytes":[3046,3052]},"callee":null}}},"github.com/benbjohnson/litestream.CompactionLevels.Level":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.Level","kind":"method","span":{"start":[48,1],"end":[56,2],"bytes":[1724,2013]},"signature":"github.com/benbjohnson/litestream.CompactionLevels.Level","parameters":[{"name":"level","type":"int","span":{"start":[48,1],"end":[48,71],"bytes":[1724,1794]}}],"return_type":"(*github.com/benbjohnson/litestream.CompactionLevel, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"50:15":{"kind":"call","span":{"start":[50,15],"end":[50,61],"bytes":[1838,1884]},"callee":null},"52:26":{"kind":"call","span":{"start":[52,26],"end":[52,38],"bytes":[1913,1925]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel"},"53:15":{"kind":"call","span":{"start":[53,15],"end":[53,59],"bytes":[1942,1986]},"callee":null}}},"github.com/benbjohnson/litestream.CompactionLevels.MaxLevel":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel","kind":"method","span":{"start":[59,1],"end":[61,2],"bytes":[2077,2140]},"signature":"github.com/benbjohnson/litestream.CompactionLevels.MaxLevel","parameters":[],"return_type":"int","metrics":{"cyclomatic":1},"body":{"60:9":{"kind":"call","span":{"start":[60,9],"end":[60,15],"bytes":[2128,2134]},"callee":null}}},"github.com/benbjohnson/litestream.CompactionLevels.NextLevel":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.NextLevel","kind":"method","span":{"start":[106,1],"end":[113,2],"bytes":[3370,3544]},"signature":"github.com/benbjohnson/litestream.CompactionLevels.NextLevel","parameters":[{"name":"level","type":"int","span":{"start":[106,1],"end":[106,53],"bytes":[3370,3422]}}],"return_type":"int","metrics":{"cyclomatic":3},"body":{"109:21":{"kind":"call","span":{"start":[109,21],"end":[109,33],"bytes":[3484,3496]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel"}}},"github.com/benbjohnson/litestream.CompactionLevels.PrevLevel":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.PrevLevel","kind":"method","span":{"start":[97,1],"end":[102,2],"bytes":[3153,3279]},"signature":"github.com/benbjohnson/litestream.CompactionLevels.PrevLevel","parameters":[{"name":"level","type":"int","span":{"start":[97,1],"end":[97,53],"bytes":[3153,3205]}}],"return_type":"int","metrics":{"cyclomatic":2},"body":{"99:10":{"kind":"call","span":{"start":[99,10],"end":[99,22],"bytes":[3244,3256]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel"}}},"github.com/benbjohnson/litestream.CompactionLevels.Validate":{"id":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.Validate","kind":"method","span":{"start":[64,1],"end":[85,2],"bytes":[2198,2837]},"signature":"github.com/benbjohnson/litestream.CompactionLevels.Validate","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"65:5":{"kind":"call","span":{"start":[65,5],"end":[65,11],"bytes":[2247,2253]},"callee":null},"66:10":{"kind":"call","span":{"start":[66,10],"end":[66,65],"bytes":[2270,2325]},"callee":null},"71:11":{"kind":"call","span":{"start":[71,11],"end":[71,92],"bytes":[2387,2468]},"callee":null},"73:11":{"kind":"call","span":{"start":[73,11],"end":[73,75],"bytes":[2521,2585]},"callee":null},"77:11":{"kind":"call","span":{"start":[77,11],"end":[77,69],"bytes":[2644,2702]},"callee":null},"81:11":{"kind":"call","span":{"start":[81,11],"end":[81,66],"bytes":[2761,2816]},"callee":null}}}}}},"functions":{},"content_hash":"744ac7ec8fbcc2267945fbae48919c5b8a47f37cd2ea08b3a78c852dee2b895d"},"compactor.go":{"id":"can://go/litestream/compactor.go","kind":"module","span":{"start":[1,1],"end":[427,1],"bytes":[0,12016]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\n// Compactor handles compaction and retention for LTX files.\n// It operates solely through the ReplicaClient interface, making it\n// suitable for both DB (with local file caching) and VFS (remote-only).\ntype Compactor struct {\n\tclient ReplicaClient\n\tlogger *slog.Logger\n\n\t// VerifyCompaction enables post-compaction TXID consistency verification.\n\t// When enabled, verifies that files at the destination level have\n\t// contiguous TXID ranges after each compaction. Disabled by default.\n\tVerifyCompaction bool\n\n\t// RetentionEnabled controls whether Litestream actively deletes old files\n\t// during retention enforcement. When false, cloud provider lifecycle\n\t// policies handle retention instead. Local file cleanup still occurs.\n\tRetentionEnabled bool\n\n\t// CompactionVerifyErrorCounter is incremented when post-compaction\n\t// verification fails. Optional; if nil, no metric is recorded.\n\tCompactionVerifyErrorCounter prometheus.Counter\n\n\t// LocalFileOpener optionally opens a local LTX file for compaction.\n\t// If nil or returns os.ErrNotExist, falls back to remote.\n\t// This is used by DB to prefer local files over remote for consistency.\n\tLocalFileOpener func(level int, minTXID, maxTXID ltx.TXID) (io.ReadCloser, error)\n\n\t// LocalFileDeleter optionally deletes local LTX files after retention.\n\t// If nil, only remote files are deleted.\n\tLocalFileDeleter func(level int, minTXID, maxTXID ltx.TXID) error\n\n\t// CacheGetter optionally retrieves cached MaxLTXFileInfo for a level.\n\t// If nil, max file info is always fetched from remote.\n\tCacheGetter func(level int) (*ltx.FileInfo, bool)\n\n\t// CacheSetter optionally stores MaxLTXFileInfo for a level.\n\t// If nil, max file info is not cached.\n\tCacheSetter func(level int, info *ltx.FileInfo)\n}\n\n// NewCompactor creates a new Compactor with the given client and logger.\nfunc NewCompactor(client ReplicaClient, logger *slog.Logger) *Compactor {\n\tif logger == nil {\n\t\tlogger = slog.Default()\n\t}\n\treturn \u0026Compactor{\n\t\tclient: client,\n\t\tlogger: logger,\n\t\tRetentionEnabled: true,\n\t}\n}\n\nfunc (c *Compactor) setLogger(logger *slog.Logger) {\n\tc.logger = logger\n}\n\n// MaxLTXFileInfo returns metadata for the last LTX file in a level.\n// Uses cache if available, otherwise fetches from remote.\nfunc (c *Compactor) MaxLTXFileInfo(ctx context.Context, level int) (ltx.FileInfo, error) {\n\tif c.CacheGetter != nil {\n\t\tif info, ok := c.CacheGetter(level); ok {\n\t\t\treturn *info, nil\n\t\t}\n\t}\n\n\titr, err := c.client.LTXFiles(ctx, level, 0, false)\n\tif err != nil {\n\t\treturn ltx.FileInfo{}, err\n\t}\n\tdefer itr.Close()\n\n\tvar info ltx.FileInfo\n\tfor itr.Next() {\n\t\titem := itr.Item()\n\t\tif item.MaxTXID \u003e info.MaxTXID {\n\t\t\tinfo = *item\n\t\t}\n\t}\n\n\tif c.CacheSetter != nil \u0026\u0026 info.MaxTXID \u003e 0 {\n\t\tc.CacheSetter(level, \u0026info)\n\t}\n\n\treturn info, itr.Close()\n}\n\n// Compact compacts source level files into the destination level.\n// Returns ErrNoCompaction if there are no files to compact.\nfunc (c *Compactor) Compact(ctx context.Context, dstLevel int) (*ltx.FileInfo, error) {\n\tsrcLevel := dstLevel - 1\n\n\tprevMaxInfo, err := c.MaxLTXFileInfo(ctx, dstLevel)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot determine max ltx file for destination level: %w\", err)\n\t}\n\tseekTXID := prevMaxInfo.MaxTXID + 1\n\n\titr, err := c.client.LTXFiles(ctx, srcLevel, seekTXID, false)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"source ltx files after %s: %w\", seekTXID, err)\n\t}\n\tdefer itr.Close()\n\n\tvar rdrs []io.Reader\n\tdefer func() {\n\t\tfor _, rd := range rdrs {\n\t\t\tif closer, ok := rd.(io.Closer); ok {\n\t\t\t\t_ = closer.Close()\n\t\t\t}\n\t\t}\n\t}()\n\n\tvar minTXID, maxTXID ltx.TXID\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\n\t\tif minTXID == 0 || info.MinTXID \u003c minTXID {\n\t\t\tminTXID = info.MinTXID\n\t\t}\n\t\tif maxTXID == 0 || info.MaxTXID \u003e maxTXID {\n\t\t\tmaxTXID = info.MaxTXID\n\t\t}\n\n\t\tif c.LocalFileOpener != nil {\n\t\t\tif f, err := c.LocalFileOpener(srcLevel, info.MinTXID, info.MaxTXID); err == nil {\n\t\t\t\trdrs = append(rdrs, f)\n\t\t\t\tcontinue\n\t\t\t} else if !os.IsNotExist(err) {\n\t\t\t\treturn nil, fmt.Errorf(\"open local ltx file: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tf, err := c.client.OpenLTXFile(ctx, info.Level, info.MinTXID, info.MaxTXID, 0, 0)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"open ltx file: %w\", err)\n\t\t}\n\t\trdrs = append(rdrs, internal.NewResumableReader(ctx, c.client, info.Level, info.MinTXID, info.MaxTXID, info.Size, f, c.logger))\n\t}\n\tif len(rdrs) == 0 {\n\t\treturn nil, ErrNoCompaction\n\t}\n\n\tpr, pw := io.Pipe()\n\tgo func() {\n\t\tcomp, err := ltx.NewCompactor(pw, rdrs)\n\t\tif err != nil {\n\t\t\t_ = pw.CloseWithError(fmt.Errorf(\"new ltx compactor: %w\", err))\n\t\t\treturn\n\t\t}\n\t\tcomp.HeaderFlags = ltx.HeaderFlagNoChecksum\n\t\t_ = pw.CloseWithError(comp.Compact(ctx))\n\t}()\n\n\tinfo, err := c.client.WriteLTXFile(ctx, dstLevel, minTXID, maxTXID, pr)\n\t_ = pr.CloseWithError(err)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"write ltx file: %w\", err)\n\t}\n\n\tif c.CacheSetter != nil {\n\t\tc.CacheSetter(dstLevel, info)\n\t}\n\n\t// Verify level consistency if enabled\n\tif c.VerifyCompaction {\n\t\tif err := c.VerifyLevelConsistency(ctx, dstLevel); err != nil {\n\t\t\tc.logger.Warn(\"post-compaction verification failed\",\n\t\t\t\t\"level\", dstLevel,\n\t\t\t\t\"error\", err)\n\t\t\tif c.CompactionVerifyErrorCounter != nil {\n\t\t\t\tc.CompactionVerifyErrorCounter.Inc()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn info, nil\n}\n\n// VerifyLevelConsistency checks that LTX files at the given level have\n// contiguous TXID ranges (prevMaxTXID + 1 == currMinTXID for consecutive files).\n// Returns an error describing any gaps or overlaps found.\nfunc (c *Compactor) VerifyLevelConsistency(ctx context.Context, level int) error {\n\titr, err := c.client.LTXFiles(ctx, level, 0, false)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch ltx files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar prevInfo *ltx.FileInfo\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\n\t\t// Skip first file - nothing to compare against\n\t\tif prevInfo == nil {\n\t\t\tprevInfo = info\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check for TXID contiguity: prev.MaxTXID + 1 should equal curr.MinTXID\n\t\texpectedMinTXID := prevInfo.MaxTXID + 1\n\t\tif info.MinTXID != expectedMinTXID {\n\t\t\tif info.MinTXID \u003e expectedMinTXID {\n\t\t\t\treturn fmt.Errorf(\"TXID gap detected: prev.MaxTXID=%s, next.MinTXID=%s (expected %s)\",\n\t\t\t\t\tprevInfo.MaxTXID, info.MinTXID, expectedMinTXID)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"TXID overlap detected: prev.MaxTXID=%s, next.MinTXID=%s\",\n\t\t\t\tprevInfo.MaxTXID, info.MinTXID)\n\t\t}\n\n\t\tprevInfo = info\n\t}\n\n\tif err := itr.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close iterator: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// EnforceSnapshotRetention enforces retention of snapshot level files by timestamp.\n// Files older than the retention duration are deleted (except the newest is always kept).\n// Returns the minimum snapshot TXID still retained (useful for cascading retention to lower levels).\nfunc (c *Compactor) EnforceSnapshotRetention(ctx context.Context, retention time.Duration) (ltx.TXID, error) {\n\ttimestamp := time.Now().Add(-retention)\n\tc.logger.Debug(\"enforcing snapshot retention\", \"timestamp\", timestamp)\n\n\titr, err := c.client.LTXFiles(ctx, SnapshotLevel, 0, false)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"fetch ltx files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar deleted []*ltx.FileInfo\n\tvar lastInfo *ltx.FileInfo\n\tvar minSnapshotTXID ltx.TXID\n\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tlastInfo = info\n\n\t\tif info.CreatedAt.Before(timestamp) {\n\t\t\tdeleted = append(deleted, info)\n\t\t\tcontinue\n\t\t}\n\n\t\tif minSnapshotTXID == 0 || info.MaxTXID \u003c minSnapshotTXID {\n\t\t\tminSnapshotTXID = info.MaxTXID\n\t\t}\n\t}\n\n\tif len(deleted) \u003e 0 \u0026\u0026 deleted[len(deleted)-1] == lastInfo {\n\t\tdeleted = deleted[:len(deleted)-1]\n\t}\n\n\tif !c.RetentionEnabled {\n\t\tc.logger.Debug(\"skipping remote deletion (retention disabled)\", \"level\", SnapshotLevel, \"count\", len(deleted))\n\t} else if err := c.client.DeleteLTXFiles(ctx, deleted); err != nil {\n\t\treturn 0, fmt.Errorf(\"remove ltx files: %w\", err)\n\t}\n\n\tif c.LocalFileDeleter != nil {\n\t\tfor _, info := range deleted {\n\t\t\tc.logger.Debug(\"deleting local ltx file\",\n\t\t\t\t\"level\", SnapshotLevel,\n\t\t\t\t\"minTXID\", info.MinTXID,\n\t\t\t\t\"maxTXID\", info.MaxTXID)\n\t\t\tif err := c.LocalFileDeleter(SnapshotLevel, info.MinTXID, info.MaxTXID); err != nil {\n\t\t\t\tc.logger.Error(\"failed to remove local ltx file\", \"error\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn minSnapshotTXID, nil\n}\n\n// EnforceRetentionByTXID deletes files at the given level with maxTXID below the target.\n// Always keeps at least one file.\nfunc (c *Compactor) EnforceRetentionByTXID(ctx context.Context, level int, txID ltx.TXID) error {\n\tc.logger.Debug(\"enforcing retention\", \"level\", level, \"txid\", txID)\n\n\titr, err := c.client.LTXFiles(ctx, level, 0, false)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch ltx files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar deleted []*ltx.FileInfo\n\tvar lastInfo *ltx.FileInfo\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tlastInfo = info\n\n\t\tif info.MaxTXID \u003c txID {\n\t\t\tdeleted = append(deleted, info)\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tif len(deleted) \u003e 0 \u0026\u0026 deleted[len(deleted)-1] == lastInfo {\n\t\tdeleted = deleted[:len(deleted)-1]\n\t}\n\n\tif !c.RetentionEnabled {\n\t\tc.logger.Debug(\"skipping remote deletion (retention disabled)\", \"level\", level, \"count\", len(deleted))\n\t} else if err := c.client.DeleteLTXFiles(ctx, deleted); err != nil {\n\t\treturn fmt.Errorf(\"remove ltx files: %w\", err)\n\t}\n\n\tif c.LocalFileDeleter != nil {\n\t\tfor _, info := range deleted {\n\t\t\tc.logger.Debug(\"deleting local ltx file\",\n\t\t\t\t\"level\", level,\n\t\t\t\t\"minTXID\", info.MinTXID,\n\t\t\t\t\"maxTXID\", info.MaxTXID)\n\t\t\tif err := c.LocalFileDeleter(level, info.MinTXID, info.MaxTXID); err != nil {\n\t\t\t\tc.logger.Error(\"failed to remove local ltx file\", \"error\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// EnforceL0Retention retains L0 files based on L1 compaction progress and time.\n// Files are only deleted if they have been compacted into L1 AND are older than retention.\n// This ensures contiguous L0 coverage for VFS reads.\nfunc (c *Compactor) EnforceL0Retention(ctx context.Context, retention time.Duration) error {\n\tif retention \u003c= 0 {\n\t\treturn nil\n\t}\n\n\tc.logger.Debug(\"enforcing l0 retention\", \"retention\", retention)\n\n\titr, err := c.client.LTXFiles(ctx, 1, 0, false)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch l1 files: %w\", err)\n\t}\n\tvar maxL1TXID ltx.TXID\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tif info.MaxTXID \u003e maxL1TXID {\n\t\t\tmaxL1TXID = info.MaxTXID\n\t\t}\n\t}\n\tif err := itr.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close l1 iterator: %w\", err)\n\t}\n\tif maxL1TXID == 0 {\n\t\treturn nil\n\t}\n\n\tthreshold := time.Now().Add(-retention)\n\titr, err = c.client.LTXFiles(ctx, 0, 0, false)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch l0 files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar (\n\t\tdeleted []*ltx.FileInfo\n\t\tlastInfo *ltx.FileInfo\n\t\tprocessedAll = true\n\t)\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tlastInfo = info\n\n\t\tcreatedAt := info.CreatedAt\n\t\tif createdAt.IsZero() {\n\t\t\tcreatedAt = threshold\n\t\t}\n\n\t\tif createdAt.After(threshold) {\n\t\t\tprocessedAll = false\n\t\t\tbreak\n\t\t}\n\n\t\tif info.MaxTXID \u003c= maxL1TXID {\n\t\t\tdeleted = append(deleted, info)\n\t\t}\n\t}\n\n\tif processedAll \u0026\u0026 len(deleted) \u003e 0 \u0026\u0026 lastInfo != nil \u0026\u0026 deleted[len(deleted)-1] == lastInfo {\n\t\tdeleted = deleted[:len(deleted)-1]\n\t}\n\n\tif len(deleted) == 0 {\n\t\treturn nil\n\t}\n\n\tif !c.RetentionEnabled {\n\t\tc.logger.Debug(\"skipping remote deletion (retention disabled)\", \"level\", 0, \"count\", len(deleted))\n\t} else if err := c.client.DeleteLTXFiles(ctx, deleted); err != nil {\n\t\treturn fmt.Errorf(\"remove expired l0 files: %w\", err)\n\t}\n\n\tif c.LocalFileDeleter != nil {\n\t\tfor _, info := range deleted {\n\t\t\tc.logger.Debug(\"deleting expired local l0 file\",\n\t\t\t\t\"minTXID\", info.MinTXID,\n\t\t\t\t\"maxTXID\", info.MaxTXID)\n\t\t\tif err := c.LocalFileDeleter(0, info.MinTXID, info.MaxTXID); err != nil {\n\t\t\t\tc.logger.Error(\"failed to remove local l0 file\", \"error\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\tc.logger.Info(\"l0 retention enforced\", \"deleted_count\", len(deleted), \"max_l1_txid\", maxL1TXID)\n\n\treturn nil\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"fmt","path":"fmt","span":{"start":[5,1],"end":[5,7],"bytes":[40,46]}},{"name":"io","path":"io","span":{"start":[6,1],"end":[6,6],"bytes":[47,52]}},{"name":"slog","path":"log/slog","span":{"start":[7,1],"end":[7,12],"bytes":[53,64]}},{"name":"os","path":"os","span":{"start":[8,1],"end":[8,6],"bytes":[65,70]}},{"name":"time","path":"time","span":{"start":[9,1],"end":[9,8],"bytes":[71,78]}},{"name":"prometheus","path":"github.com/prometheus/client_golang/prometheus","span":{"start":[11,1],"end":[11,50],"bytes":[80,129]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[12,1],"end":[12,27],"bytes":[130,156]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[14,1],"end":[14,46],"bytes":[158,203]}}],"types":{"Compactor":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor","kind":"struct","span":{"start":[20,1],"end":[54,2],"bytes":[410,1950]},"callables":{"github.com/benbjohnson/litestream.Compactor.Compact":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","kind":"method","span":{"start":[104,1],"end":[192,2],"bytes":[3132,5454]},"signature":"github.com/benbjohnson/litestream.Compactor.Compact","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[104,1],"end":[104,88],"bytes":[3132,3219]}},{"name":"dstLevel","type":"int","span":{"start":[104,1],"end":[104,88],"bytes":[3132,3219]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":19},"body":{"107:22":{"kind":"call","span":{"start":[107,22],"end":[107,53],"bytes":[3268,3299]},"callee":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.MaxLTXFileInfo"},"109:15":{"kind":"call","span":{"start":[109,15],"end":[109,89],"bytes":[3331,3405]},"callee":null},"113:14":{"kind":"call","span":{"start":[113,14],"end":[113,63],"bytes":[3460,3509]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"115:15":{"kind":"call","span":{"start":[115,15],"end":[115,73],"bytes":[3541,3599]},"callee":null},"117:8":{"kind":"call","span":{"start":[117,8],"end":[117,19],"bytes":[3610,3621]},"callee":null},"120:8":{"kind":"call","span":{"start":[120,8],"end":[126,5],"bytes":[3652,3766]},"callee":null},"129:6":{"kind":"call","span":{"start":[129,6],"end":[129,16],"bytes":[3804,3814]},"callee":null},"130:11":{"kind":"call","span":{"start":[130,11],"end":[130,21],"bytes":[3827,3837]},"callee":null},"140:17":{"kind":"call","span":{"start":[140,17],"end":[140,72],"bytes":[4040,4095]},"callee":null},"141:12":{"kind":"call","span":{"start":[141,12],"end":[141,27],"bytes":[4121,4136]},"callee":null},"143:15":{"kind":"call","span":{"start":[143,15],"end":[143,33],"bytes":[4164,4182]},"callee":null},"144:17":{"kind":"call","span":{"start":[144,17],"end":[144,59],"bytes":[4201,4243]},"callee":null},"148:13":{"kind":"call","span":{"start":[148,13],"end":[148,84],"bytes":[4266,4337]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile"},"150:16":{"kind":"call","span":{"start":[150,16],"end":[150,52],"bytes":[4371,4407]},"callee":null},"152:10":{"kind":"call","span":{"start":[152,10],"end":[152,130],"bytes":[4421,4541]},"callee":null},"152:23":{"kind":"call","span":{"start":[152,23],"end":[152,129],"bytes":[4434,4540]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.NewResumableReader"},"154:5":{"kind":"call","span":{"start":[154,5],"end":[154,14],"bytes":[4549,4558]},"callee":null},"158:12":{"kind":"call","span":{"start":[158,12],"end":[158,21],"bytes":[4611,4620]},"callee":null},"159:5":{"kind":"call","span":{"start":[159,5],"end":[167,5],"bytes":[4625,4868]},"callee":null,"is_goroutine":true},"169:15":{"kind":"call","span":{"start":[169,15],"end":[169,73],"bytes":[4884,4942]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile"},"170:6":{"kind":"call","span":{"start":[170,6],"end":[170,28],"bytes":[4948,4970]},"callee":null},"172:15":{"kind":"call","span":{"start":[172,15],"end":[172,52],"bytes":[5002,5039]},"callee":null},"176:3":{"kind":"call","span":{"start":[176,3],"end":[176,32],"bytes":[5073,5102]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"181:13":{"kind":"call","span":{"start":[181,13],"end":[181,52],"bytes":[5184,5223]},"callee":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.VerifyLevelConsistency"},"182:4":{"kind":"call","span":{"start":[182,4],"end":[184,18],"bytes":[5241,5334]},"callee":null},"186:5":{"kind":"call","span":{"start":[186,5],"end":[186,41],"bytes":[5385,5421]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact/github.com/benbjohnson/litestream.Compactor.Compact.closure_1","kind":"function","span":{"start":[120,1],"end":[126,5],"bytes":[3645,3766]},"signature":"github.com/benbjohnson/litestream.Compactor.Compact.closure_1","parameters":[],"body":{"123:9":{"kind":"call","span":{"start":[123,9],"end":[123,23],"bytes":[3738,3752]},"callee":null}}},"closure_2":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact/github.com/benbjohnson/litestream.Compactor.Compact.closure_2","kind":"function","span":{"start":[159,1],"end":[167,5],"bytes":[4621,4868]},"signature":"github.com/benbjohnson/litestream.Compactor.Compact.closure_2","parameters":[],"body":{"160:16":{"kind":"call","span":{"start":[160,16],"end":[160,42],"bytes":[4649,4675]},"callee":null},"162:26":{"kind":"call","span":{"start":[162,26],"end":[162,66],"bytes":[4719,4759]},"callee":null},"162:8":{"kind":"call","span":{"start":[162,8],"end":[162,67],"bytes":[4701,4760]},"callee":null},"166:25":{"kind":"call","span":{"start":[166,25],"end":[166,42],"bytes":[4845,4862]},"callee":null},"166:7":{"kind":"call","span":{"start":[166,7],"end":[166,43],"bytes":[4827,4863]},"callee":null}}}}},"github.com/benbjohnson/litestream.Compactor.EnforceL0Retention":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceL0Retention","kind":"method","span":{"start":[342,1],"end":[426,2],"bytes":[10004,12015]},"signature":"github.com/benbjohnson/litestream.Compactor.EnforceL0Retention","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[342,1],"end":[342,93],"bytes":[10004,10096]}},{"name":"retention","type":"time.Duration","span":{"start":[342,1],"end":[342,93],"bytes":[10004,10096]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":19},"body":{"347:2":{"kind":"call","span":{"start":[347,2],"end":[347,66],"bytes":[10136,10200]},"callee":null},"349:14":{"kind":"call","span":{"start":[349,14],"end":[349,49],"bytes":[10215,10250]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"351:10":{"kind":"call","span":{"start":[351,10],"end":[351,47],"bytes":[10277,10314]},"callee":null},"354:6":{"kind":"call","span":{"start":[354,6],"end":[354,16],"bytes":[10347,10357]},"callee":null},"355:11":{"kind":"call","span":{"start":[355,11],"end":[355,21],"bytes":[10370,10380]},"callee":null},"360:12":{"kind":"call","span":{"start":[360,12],"end":[360,23],"bytes":[10459,10470]},"callee":null},"361:10":{"kind":"call","span":{"start":[361,10],"end":[361,50],"bytes":[10494,10534]},"callee":null},"367:15":{"kind":"call","span":{"start":[367,15],"end":[367,25],"bytes":[10590,10600]},"callee":null},"368:13":{"kind":"call","span":{"start":[368,13],"end":[368,48],"bytes":[10629,10664]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"370:10":{"kind":"call","span":{"start":[370,10],"end":[370,47],"bytes":[10691,10728]},"callee":null},"372:8":{"kind":"call","span":{"start":[372,8],"end":[372,19],"bytes":[10739,10750]},"callee":null},"379:6":{"kind":"call","span":{"start":[379,6],"end":[379,16],"bytes":[10849,10859]},"callee":null},"380:11":{"kind":"call","span":{"start":[380,11],"end":[380,21],"bytes":[10872,10882]},"callee":null},"384:6":{"kind":"call","span":{"start":[384,6],"end":[384,24],"bytes":[10937,10955]},"callee":null},"388:6":{"kind":"call","span":{"start":[388,6],"end":[388,32],"bytes":[10993,11019]},"callee":null},"394:14":{"kind":"call","span":{"start":[394,14],"end":[394,35],"bytes":[11106,11127]},"callee":null},"398:21":{"kind":"call","span":{"start":[398,21],"end":[398,33],"bytes":[11156,11168]},"callee":null},"398:68":{"kind":"call","span":{"start":[398,68],"end":[398,80],"bytes":[11203,11215]},"callee":null},"399:22":{"kind":"call","span":{"start":[399,22],"end":[399,34],"bytes":[11254,11266]},"callee":null},"402:5":{"kind":"call","span":{"start":[402,5],"end":[402,17],"bytes":[11278,11290]},"callee":null},"407:3":{"kind":"call","span":{"start":[407,3],"end":[407,101],"bytes":[11343,11441]},"callee":null},"407:88":{"kind":"call","span":{"start":[407,88],"end":[407,100],"bytes":[11428,11440]},"callee":null},"408:19":{"kind":"call","span":{"start":[408,19],"end":[408,56],"bytes":[11460,11497]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles"},"409:10":{"kind":"call","span":{"start":[409,10],"end":[409,56],"bytes":[11521,11567]},"callee":null},"414:4":{"kind":"call","span":{"start":[414,4],"end":[416,29],"bytes":[11640,11746]},"callee":null},"417:14":{"kind":"call","span":{"start":[417,14],"end":[417,63],"bytes":[11760,11809]},"callee":null},"418:5":{"kind":"call","span":{"start":[418,5],"end":[418,67],"bytes":[11828,11890]},"callee":null},"423:2":{"kind":"call","span":{"start":[423,2],"end":[423,97],"bytes":[11905,12000]},"callee":null},"423:58":{"kind":"call","span":{"start":[423,58],"end":[423,70],"bytes":[11961,11973]},"callee":null}}},"github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID","kind":"method","span":{"start":[293,1],"end":[337,2],"bytes":[8549,9775]},"signature":"github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[293,1],"end":[293,98],"bytes":[8549,8646]}},{"name":"level","type":"int","span":{"start":[293,1],"end":[293,98],"bytes":[8549,8646]}},{"name":"txID","type":"github.com/superfly/ltx.TXID","span":{"start":[293,1],"end":[293,98],"bytes":[8549,8646]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"294:2":{"kind":"call","span":{"start":[294,2],"end":[294,69],"bytes":[8648,8715]},"callee":null},"296:14":{"kind":"call","span":{"start":[296,14],"end":[296,53],"bytes":[8730,8769]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"298:10":{"kind":"call","span":{"start":[298,10],"end":[298,48],"bytes":[8796,8834]},"callee":null},"300:8":{"kind":"call","span":{"start":[300,8],"end":[300,19],"bytes":[8845,8856]},"callee":null},"304:6":{"kind":"call","span":{"start":[304,6],"end":[304,16],"bytes":[8920,8930]},"callee":null},"305:11":{"kind":"call","span":{"start":[305,11],"end":[305,21],"bytes":[8943,8953]},"callee":null},"309:14":{"kind":"call","span":{"start":[309,14],"end":[309,35],"bytes":[9013,9034]},"callee":null},"314:33":{"kind":"call","span":{"start":[314,33],"end":[314,45],"bytes":[9087,9099]},"callee":null},"314:5":{"kind":"call","span":{"start":[314,5],"end":[314,17],"bytes":[9059,9071]},"callee":null},"315:22":{"kind":"call","span":{"start":[315,22],"end":[315,34],"bytes":[9138,9150]},"callee":null},"319:3":{"kind":"call","span":{"start":[319,3],"end":[319,105],"bytes":[9186,9288]},"callee":null},"319:92":{"kind":"call","span":{"start":[319,92],"end":[319,104],"bytes":[9275,9287]},"callee":null},"320:19":{"kind":"call","span":{"start":[320,19],"end":[320,56],"bytes":[9307,9344]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles"},"321:10":{"kind":"call","span":{"start":[321,10],"end":[321,49],"bytes":[9368,9407]},"callee":null},"326:4":{"kind":"call","span":{"start":[326,4],"end":[329,29],"bytes":[9480,9599]},"callee":null},"330:14":{"kind":"call","span":{"start":[330,14],"end":[330,67],"bytes":[9613,9666]},"callee":null},"331:5":{"kind":"call","span":{"start":[331,5],"end":[331,68],"bytes":[9685,9748]},"callee":null}}},"github.com/benbjohnson/litestream.Compactor.EnforceSnapshotRetention":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceSnapshotRetention","kind":"method","span":{"start":[238,1],"end":[289,2],"bytes":[6939,8422]},"signature":"github.com/benbjohnson/litestream.Compactor.EnforceSnapshotRetention","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[238,1],"end":[238,111],"bytes":[6939,7049]}},{"name":"retention","type":"time.Duration","span":{"start":[238,1],"end":[238,111],"bytes":[6939,7049]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"239:15":{"kind":"call","span":{"start":[239,15],"end":[239,25],"bytes":[7064,7074]},"callee":null},"240:2":{"kind":"call","span":{"start":[240,2],"end":[240,72],"bytes":[7092,7162]},"callee":null},"242:14":{"kind":"call","span":{"start":[242,14],"end":[242,61],"bytes":[7177,7224]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"244:13":{"kind":"call","span":{"start":[244,13],"end":[244,51],"bytes":[7254,7292]},"callee":null},"246:8":{"kind":"call","span":{"start":[246,8],"end":[246,19],"bytes":[7303,7314]},"callee":null},"252:6":{"kind":"call","span":{"start":[252,6],"end":[252,16],"bytes":[7409,7419]},"callee":null},"253:11":{"kind":"call","span":{"start":[253,11],"end":[253,21],"bytes":[7432,7442]},"callee":null},"256:6":{"kind":"call","span":{"start":[256,6],"end":[256,38],"bytes":[7467,7499]},"callee":null},"257:14":{"kind":"call","span":{"start":[257,14],"end":[257,35],"bytes":[7515,7536]},"callee":null},"266:33":{"kind":"call","span":{"start":[266,33],"end":[266,45],"bytes":[7690,7702]},"callee":null},"266:5":{"kind":"call","span":{"start":[266,5],"end":[266,17],"bytes":[7662,7674]},"callee":null},"267:22":{"kind":"call","span":{"start":[267,22],"end":[267,34],"bytes":[7741,7753]},"callee":null},"271:100":{"kind":"call","span":{"start":[271,100],"end":[271,112],"bytes":[7886,7898]},"callee":null},"271:3":{"kind":"call","span":{"start":[271,3],"end":[271,113],"bytes":[7789,7899]},"callee":null},"272:19":{"kind":"call","span":{"start":[272,19],"end":[272,56],"bytes":[7918,7955]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles"},"273:13":{"kind":"call","span":{"start":[273,13],"end":[273,52],"bytes":[7982,8021]},"callee":null},"278:4":{"kind":"call","span":{"start":[278,4],"end":[281,29],"bytes":[8094,8221]},"callee":null},"282:14":{"kind":"call","span":{"start":[282,14],"end":[282,75],"bytes":[8235,8296]},"callee":null},"283:5":{"kind":"call","span":{"start":[283,5],"end":[283,68],"bytes":[8315,8378]},"callee":null}}},"github.com/benbjohnson/litestream.Compactor.MaxLTXFileInfo":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.MaxLTXFileInfo","kind":"method","span":{"start":[74,1],"end":[100,2],"bytes":[2460,3002]},"signature":"github.com/benbjohnson/litestream.Compactor.MaxLTXFileInfo","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[74,1],"end":[74,91],"bytes":[2460,2550]}},{"name":"level","type":"int","span":{"start":[74,1],"end":[74,91],"bytes":[2460,2550]}}],"return_type":"(github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"76:18":{"kind":"call","span":{"start":[76,18],"end":[76,38],"bytes":[2595,2615]},"callee":null},"81:14":{"kind":"call","span":{"start":[81,14],"end":[81,53],"bytes":[2664,2703]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"85:8":{"kind":"call","span":{"start":[85,8],"end":[85,19],"bytes":[2760,2771]},"callee":null},"88:6":{"kind":"call","span":{"start":[88,6],"end":[88,16],"bytes":[2801,2811]},"callee":null},"89:11":{"kind":"call","span":{"start":[89,11],"end":[89,21],"bytes":[2824,2834]},"callee":null},"96:3":{"kind":"call","span":{"start":[96,3],"end":[96,30],"bytes":[2943,2970]},"callee":null},"99:15":{"kind":"call","span":{"start":[99,15],"end":[99,26],"bytes":[2989,3000]},"callee":null}}},"github.com/benbjohnson/litestream.Compactor.VerifyLevelConsistency":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.VerifyLevelConsistency","kind":"method","span":{"start":[197,1],"end":[233,2],"bytes":[5669,6659]},"signature":"github.com/benbjohnson/litestream.Compactor.VerifyLevelConsistency","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[197,1],"end":[197,83],"bytes":[5669,5751]}},{"name":"level","type":"int","span":{"start":[197,1],"end":[197,83],"bytes":[5669,5751]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"198:14":{"kind":"call","span":{"start":[198,14],"end":[198,53],"bytes":[5765,5804]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"200:10":{"kind":"call","span":{"start":[200,10],"end":[200,48],"bytes":[5831,5869]},"callee":null},"202:8":{"kind":"call","span":{"start":[202,8],"end":[202,19],"bytes":[5880,5891]},"callee":null},"205:6":{"kind":"call","span":{"start":[205,6],"end":[205,16],"bytes":[5926,5936]},"callee":null},"206:11":{"kind":"call","span":{"start":[206,11],"end":[206,21],"bytes":[5949,5959]},"callee":null},"218:12":{"kind":"call","span":{"start":[218,12],"end":[219,54],"bytes":[6276,6409]},"callee":null},"221:11":{"kind":"call","span":{"start":[221,11],"end":[222,36],"bytes":[6425,6530]},"callee":null},"228:12":{"kind":"call","span":{"start":[228,12],"end":[228,23],"bytes":[6569,6580]},"callee":null},"229:10":{"kind":"call","span":{"start":[229,10],"end":[229,47],"bytes":[6604,6641]},"callee":null}}},"github.com/benbjohnson/litestream.Compactor.setLogger":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.setLogger","kind":"method","span":{"start":[68,1],"end":[70,2],"bytes":[2257,2330]},"signature":"github.com/benbjohnson/litestream.Compactor.setLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[68,1],"end":[68,53],"bytes":[2257,2309]}}],"metrics":{"cyclomatic":1},"body":{}}},"fields":{"CacheGetter":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/CacheGetter","kind":"field","type":"func(level int) (*github.com/superfly/ltx.FileInfo, bool)","span":{"start":[49,1],"end":[49,51],"bytes":[1745,1795]}},"CacheSetter":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/CacheSetter","kind":"field","type":"func(level int, info *github.com/superfly/ltx.FileInfo)","span":{"start":[53,1],"end":[53,49],"bytes":[1900,1948]}},"CompactionVerifyErrorCounter":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/CompactionVerifyErrorCounter","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Counter","span":{"start":[36,1],"end":[36,49],"bytes":[1094,1142]}},"LocalFileDeleter":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/LocalFileDeleter","kind":"field","type":"func(level int, minTXID github.com/superfly/ltx.TXID, maxTXID github.com/superfly/ltx.TXID) error","span":{"start":[45,1],"end":[45,67],"bytes":[1548,1614]}},"LocalFileOpener":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/LocalFileOpener","kind":"field","type":"func(level int, minTXID github.com/superfly/ltx.TXID, maxTXID github.com/superfly/ltx.TXID) (io.ReadCloser, error)","span":{"start":[41,1],"end":[41,83],"bytes":[1348,1430]}},"RetentionEnabled":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/RetentionEnabled","kind":"field","type":"bool","span":{"start":[32,1],"end":[32,23],"bytes":[936,958]}},"VerifyCompaction":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/VerifyCompaction","kind":"field","type":"bool","span":{"start":[27,1],"end":[27,23],"bytes":[693,715]}},"client":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/client","kind":"field","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[21,1],"end":[21,22],"bytes":[434,455]}},"logger":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[22,1],"end":[22,21],"bytes":[456,476]}}}}},"functions":{"github.com/benbjohnson/litestream.NewCompactor":{"id":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.NewCompactor","kind":"function","span":{"start":[57,1],"end":[66,2],"bytes":[2026,2255]},"signature":"github.com/benbjohnson/litestream.NewCompactor","parameters":[{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[57,1],"end":[57,74],"bytes":[2026,2099]}},{"name":"logger","type":"*log/slog.Logger","span":{"start":[57,1],"end":[57,74],"bytes":[2026,2099]}}],"return_type":"*github.com/benbjohnson/litestream.Compactor","metrics":{"cyclomatic":2},"body":{"59:12":{"kind":"call","span":{"start":[59,12],"end":[59,26],"bytes":[2131,2145]},"callee":null}}}},"content_hash":"03305762391ff87adf9ad389d530c981333c4ad82035b223a3b612ac6612cb9b"},"db.go":{"id":"can://go/litestream/db.go","kind":"module","span":{"start":[1,1],"end":[3492,1],"bytes":[0,111886]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"database/sql\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash/crc64\"\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n\t\"github.com/prometheus/client_golang/prometheus/promauto\"\n\t\"github.com/superfly/ltx\"\n\t\"golang.org/x/sync/semaphore\"\n\t\"modernc.org/sqlite\"\n\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\n// Default DB settings.\nconst (\n\tDefaultMonitorInterval = 1 * time.Second\n\tDefaultCheckpointInterval = 1 * time.Minute\n\tDefaultBusyTimeout = 1 * time.Second\n\tDefaultMinCheckpointPageN = 1000\n\tDefaultTruncatePageN = 121359 // ~500MB with 4KB page size\n\tDefaultMaxSyncWALBytes = 64 \u003c\u003c 20\n\tDefaultShutdownSyncTimeout = 30 * time.Second\n\tDefaultShutdownSyncInterval = 500 * time.Millisecond\n\n\t// Sync error backoff configuration.\n\t// When sync errors occur repeatedly (e.g., disk full), backoff doubles each time.\n\tDefaultSyncBackoffMax = 5 * time.Minute // Maximum backoff between retries\n\tSyncErrorLogInterval = 30 * time.Second // Rate-limit repeated error logging\n)\n\n// DB represents a managed instance of a SQLite database in the file system.\n//\n// Checkpoint Strategy:\n// Litestream uses a progressive 3-tier checkpoint approach to balance WAL size\n// management with write availability:\n//\n// 1. MinCheckpointPageN (PASSIVE): Non-blocking checkpoint at ~1k pages (~4MB).\n// Attempts checkpoint but allows concurrent readers/writers.\n//\n// 2. CheckpointInterval (PASSIVE): Time-based non-blocking checkpoint.\n// Ensures regular checkpointing even with low write volume.\n//\n// 3. TruncatePageN (TRUNCATE): Blocking checkpoint at ~121k pages (~500MB).\n// Emergency brake for runaway WAL growth. Can block writes while waiting\n// for long-lived read transactions. Configurable with a default backstop.\n//\n// The RESTART checkpoint mode was permanently removed due to production issues\n// with indefinite write blocking (issue #724). All checkpoints now use either\n// PASSIVE (non-blocking) or TRUNCATE (emergency only) modes.\ntype DB struct {\n\tmu sync.RWMutex\n\texecSem *semaphore.Weighted\n\tpath string // part to database\n\tmetaPath string // Path to the database metadata.\n\tdb *sql.DB // target database\n\tf *os.File // long-running db file descriptor\n\trtx *sql.Tx // long running read transaction\n\tpageSize int // page size, in bytes\n\tnotify chan struct{} // closes on WAL change\n\tchkMu sync.RWMutex // checkpoint lock\n\topened bool // true if Open() was called and Close() not yet called\n\tsyncState syncState\n\tsyncDiag diagState\n\n\t// last file info for each level\n\tmaxLTXFileInfos struct {\n\t\tsync.Mutex\n\t\tm map[int]*ltx.FileInfo\n\t}\n\n\t// Cached position from the latest L0 LTX file.\n\t// nil means cache is invalid; non-nil is the cached position.\n\tpos struct {\n\t\tsync.Mutex\n\t\tvalue *ltx.Pos\n\t}\n\n\tfileInfo os.FileInfo // db info cached during init\n\tdirInfo os.FileInfo // parent dir info cached during init\n\n\t// openLTXFile opens LTX staging files; overridable in tests to\n\t// inject filesystem errors such as ENOSPC.\n\topenLTXFile func(name string, flag int, perm os.FileMode) (ltxStagingFile, error)\n\n\tctx context.Context\n\tcancel func()\n\twg sync.WaitGroup\n\tDone \u003c-chan struct{}\n\n\t// Metrics\n\tmetricsRegistered bool\n\tdbSizeGauge prometheus.Gauge\n\twalSizeGauge prometheus.Gauge\n\ttotalWALBytesCounter prometheus.Counter\n\ttxIDGauge prometheus.Gauge\n\tsyncNCounter prometheus.Counter\n\tsyncErrorNCounter prometheus.Counter\n\tsyncSecondsCounter prometheus.Counter\n\tdiskFullGauge prometheus.Gauge\n\tcheckpointNCounterVec *prometheus.CounterVec\n\tcheckpointErrorNCounterVec *prometheus.CounterVec\n\tcheckpointSecondsCounterVec *prometheus.CounterVec\n\n\t// Minimum threshold of WAL size, in pages, before a passive checkpoint.\n\t// A passive checkpoint will attempt a checkpoint but fail if there are\n\t// active transactions occurring at the same time.\n\t//\n\t// Uses PASSIVE checkpoint mode (non-blocking). Keeps WAL size manageable\n\t// for faster restores. Default: 1000 pages (~4MB with 4KB page size).\n\tMinCheckpointPageN int\n\n\t// Threshold of WAL size, in pages, before a forced truncation checkpoint.\n\t// A forced truncation checkpoint will block new transactions and wait for\n\t// existing transactions to finish before issuing a checkpoint and\n\t// truncating the WAL.\n\t//\n\t// Uses TRUNCATE checkpoint mode (blocking). Prevents unbounded WAL growth\n\t// from long-lived read transactions. Default: 121359 pages (~500MB with 4KB\n\t// page size). Set to 0 to retain the default emergency threshold.\n\tTruncatePageN int\n\n\t// Time between automatic checkpoints in the WAL. This is done to allow\n\t// more fine-grained WAL files so that restores can be performed with\n\t// better precision.\n\t//\n\t// Uses PASSIVE checkpoint mode (non-blocking). Default: 1 minute.\n\t// Set to 0 to disable time-based checkpoints.\n\tCheckpointInterval time.Duration\n\n\t// Frequency at which to perform db sync.\n\tMonitorInterval time.Duration\n\n\t// Maximum WAL bytes to process in a single sync executor run.\n\t// The limit is checked at commit boundaries so a single transaction\n\t// larger than this may exceed it. Set to zero to process all\n\t// committed WAL frames in one run.\n\tMaxSyncWALBytes int64\n\n\t// The timeout to wait for EBUSY from SQLite.\n\tBusyTimeout time.Duration\n\n\t// Minimum time to retain L0 files after they have been compacted into L1.\n\tL0Retention time.Duration\n\n\t// VerifyCompaction enables post-compaction TXID consistency verification.\n\t// When enabled, verifies that files at the destination level have\n\t// contiguous TXID ranges after each compaction.\n\tVerifyCompaction bool\n\n\t// RetentionEnabled controls whether Litestream actively deletes old files\n\t// during retention enforcement. When false, cloud provider lifecycle\n\t// policies handle retention instead. Local file cleanup still occurs.\n\tRetentionEnabled bool\n\n\t// Remote replica for the database.\n\t// Must be set before calling Open().\n\tReplica *Replica\n\n\t// Compactor handles shared compaction logic.\n\t// Created in NewDB with nil client; client set once in Open() from Replica.Client.\n\tcompactor *Compactor\n\n\t// Shutdown sync retry settings.\n\t// ShutdownSyncTimeout is the total time to retry syncing on shutdown.\n\t// ShutdownSyncInterval is the time between retry attempts.\n\tShutdownSyncTimeout time.Duration\n\tShutdownSyncInterval time.Duration\n\n\t// lastSuccessfulSyncAt tracks when replication last succeeded.\n\t// Used by heartbeat monitoring to determine if a ping should be sent.\n\tlastSuccessfulSyncMu sync.RWMutex\n\tlastSuccessfulSyncAt time.Time\n\n\t// Where to send log messages, defaults to global slog with database epath.\n\tLogger *slog.Logger\n}\n\n// syncState holds mutable sync-tracking fields extracted from DB.\n// These fields are threaded through sync/checkpoint methods via pointer.\ntype syncState struct {\n\ttruncatePassiveFailed bool\n\n\t// syncedSinceCheckpoint tracks whether any data has been synced since\n\t// the last checkpoint. Used to prevent time-based checkpoints from\n\t// triggering when there are no actual database changes, which would\n\t// otherwise create unnecessary LTX files. See issue #896.\n\tsyncedSinceCheckpoint bool\n\n\t// syncedToWALEnd tracks whether the last successful sync reached the\n\t// exact end of the WAL file. When true, a subsequent WAL truncation\n\t// (from checkpoint) is expected and should NOT trigger a full snapshot.\n\t// This prevents issue #927 where every checkpoint triggers unnecessary\n\t// full snapshots because verify() sees the old LTX position exceeds\n\t// the new (truncated) WAL size.\n\tsyncedToWALEnd bool\n\n\t// lastSyncedWALOffset tracks the logical end of the WAL content after\n\t// the last successful sync. This is the WALOffset + WALSize from the\n\t// last LTX file. Used for checkpoint threshold decisions instead of\n\t// file size, which may include stale frames with old salt values after\n\t// a checkpoint. This prevents issue #997 where PASSIVE checkpoints\n\t// trigger a feedback loop because stale file size exceeds threshold.\n\tlastSyncedWALOffset int64\n}\n\ntype syncExecutor struct {\n\tstate syncState\n\tpos ltx.Pos\n\tposChanged bool\n\tl0FileInfo *ltx.FileInfo\n\tsynced bool\n\tcheckpointAttempted bool\n}\n\ntype diagOp string\n\nconst (\n\tdiagOpSync diagOp = \"sync\"\n\tdiagOpCheckpoint diagOp = \"checkpoint\"\n)\n\ntype diagPhase string\n\nconst (\n\tdiagPhaseStarting diagPhase = \"starting\"\n\tdiagPhaseEnsureWAL diagPhase = \"ensure_wal\"\n\tdiagPhaseVerifyAndSync diagPhase = \"verify_and_sync\"\n\tdiagPhaseCheckpointIfNeeded diagPhase = \"checkpoint_if_needed\"\n\tdiagPhaseUpdateMetrics diagPhase = \"update_metrics\"\n\tdiagPhaseStatWAL diagPhase = \"stat_wal\"\n\tdiagPhaseVerify diagPhase = \"verify\"\n\tdiagPhaseSyncLTX diagPhase = \"sync_ltx\"\n\tdiagPhaseSyncOpenLTX diagPhase = \"sync_open_ltx\"\n\tdiagPhaseSyncPageMap diagPhase = \"sync_page_map\"\n\tdiagPhaseSyncPrepareLTX diagPhase = \"sync_prepare_ltx\"\n\tdiagPhaseWriteLTXFromDB diagPhase = \"write_ltx_from_db\"\n\tdiagPhaseWriteLTXFromWAL diagPhase = \"write_ltx_from_wal\"\n\tdiagPhaseCloseLTX diagPhase = \"close_ltx\"\n\tdiagPhaseFsyncLTX diagPhase = \"fsync_ltx\"\n\tdiagPhaseRenameLTX diagPhase = \"rename_ltx\"\n\tdiagPhaseSyncComplete diagPhase = \"sync_complete\"\n\tdiagPhaseCheckpointLock diagPhase = \"checkpoint_lock\"\n\tdiagPhaseCheckpointReadWALHeader diagPhase = \"checkpoint_read_wal_header\"\n\tdiagPhaseCheckpointCopyBefore diagPhase = \"checkpoint_copy_before\"\n\tdiagPhaseCheckpointExec diagPhase = \"checkpoint_exec\"\n\tdiagPhaseCheckpointVerifyRestart diagPhase = \"checkpoint_verify_restart\"\n\tdiagPhaseCheckpointSnapshotBoundaryLock diagPhase = \"checkpoint_snapshot_boundary_lock\"\n\tdiagPhaseCheckpointSnapshotBoundary diagPhase = \"checkpoint_snapshot_boundary\"\n)\n\ntype diagState struct {\n\tsync.RWMutex\n\tactive bool\n\toperation diagOp\n\tphase diagPhase\n\tstartedAt time.Time\n\tupdatedAt time.Time\n\ttxID ltx.TXID\n\twalSize int64\n\tlastSyncedWALOffset int64\n\tsnapshotting bool\n\tcheckpointMode string\n\treason string\n\terr string\n\texecutorWaiterCount int\n\texecutorWaitStarted time.Time\n}\n\n// SyncDiagnostic reports the latest DB sync/checkpoint activity.\ntype SyncDiagnostic struct {\n\tPath string `json:\"path\"`\n\tActive bool `json:\"active\"`\n\tOperation string `json:\"operation,omitempty\"`\n\tPhase string `json:\"phase,omitempty\"`\n\tStartedAt *time.Time `json:\"started_at,omitempty\"`\n\tUpdatedAt *time.Time `json:\"updated_at,omitempty\"`\n\tElapsedSeconds float64 `json:\"elapsed_seconds,omitempty\"`\n\tTXID uint64 `json:\"txid,omitempty\"`\n\tWALSize int64 `json:\"wal_size,omitempty\"`\n\tLastSyncedWALOffset int64 `json:\"last_synced_wal_offset,omitempty\"`\n\tSnapshotting bool `json:\"snapshotting,omitempty\"`\n\tCheckpointMode string `json:\"checkpoint_mode,omitempty\"`\n\tReason string `json:\"reason,omitempty\"`\n\tError string `json:\"error,omitempty\"`\n\tExecutorWaiterCount int `json:\"executor_waiter_count,omitempty\"`\n\tExecutorWaitStarted *time.Time `json:\"executor_wait_started_at,omitempty\"`\n\tExecutorWaitSeconds float64 `json:\"executor_wait_seconds,omitempty\"`\n}\n\n// NewDB returns a new instance of DB for a given path.\nfunc NewDB(path string) *DB {\n\tdir, file := filepath.Split(path)\n\n\tdb := \u0026DB{\n\t\tpath: path,\n\t\tmetaPath: filepath.Join(dir, \".\"+file+MetaDirSuffix),\n\t\texecSem: semaphore.NewWeighted(1),\n\t\tnotify: make(chan struct{}),\n\n\t\tMinCheckpointPageN: DefaultMinCheckpointPageN,\n\t\tTruncatePageN: DefaultTruncatePageN,\n\t\tCheckpointInterval: DefaultCheckpointInterval,\n\t\tMonitorInterval: DefaultMonitorInterval,\n\t\tMaxSyncWALBytes: DefaultMaxSyncWALBytes,\n\t\tBusyTimeout: DefaultBusyTimeout,\n\t\tL0Retention: DefaultL0Retention,\n\t\tRetentionEnabled: true,\n\t\tShutdownSyncTimeout: DefaultShutdownSyncTimeout,\n\t\tShutdownSyncInterval: DefaultShutdownSyncInterval,\n\t\tLogger: slog.With(LogKeyDB, filepath.Base(path)),\n\t}\n\tdb.maxLTXFileInfos.m = make(map[int]*ltx.FileInfo)\n\tdb.openLTXFile = defaultOpenLTXFile\n\n\tdb.ctx, db.cancel = context.WithCancel(context.Background())\n\n\t// Initialize compactor with nil client (set once in Open() from Replica.Client).\n\tdb.compactor = NewCompactor(nil, db.Logger.With(LogKeySubsystem, LogSubsystemCompactor))\n\tdb.compactor.LocalFileOpener = db.openLocalLTXFile\n\tdb.compactor.LocalFileDeleter = db.deleteLocalLTXFile\n\tdb.initMetrics()\n\tdb.compactor.CacheGetter = func(level int) (*ltx.FileInfo, bool) {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tdefer db.maxLTXFileInfos.Unlock()\n\t\tinfo, ok := db.maxLTXFileInfos.m[level]\n\t\treturn info, ok\n\t}\n\tdb.compactor.CacheSetter = func(level int, info *ltx.FileInfo) {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tdefer db.maxLTXFileInfos.Unlock()\n\t\tdb.maxLTXFileInfos.m[level] = info\n\t}\n\n\treturn db\n}\n\n// initMetrics creates the per-database Prometheus series.\n// Open calls it again because Close deletes them.\nfunc (db *DB) initMetrics() {\n\tdbMetricOwners.Lock()\n\tdefer dbMetricOwners.Unlock()\n\tif db.metricsRegistered {\n\t\treturn\n\t}\n\tdb.metricsRegistered = true\n\tdbMetricOwners.paths[db.path]++\n\tdbMetricOwners.basenames[filepath.Base(db.path)]++\n\n\tdb.dbSizeGauge = dbSizeGaugeVec.WithLabelValues(db.path)\n\tdb.walSizeGauge = walSizeGaugeVec.WithLabelValues(db.path)\n\tdb.totalWALBytesCounter = totalWALBytesCounterVec.WithLabelValues(db.path)\n\tdb.txIDGauge = txIDIndexGaugeVec.WithLabelValues(db.path)\n\tdb.syncNCounter = syncNCounterVec.WithLabelValues(db.path)\n\tdb.syncErrorNCounter = syncErrorNCounterVec.WithLabelValues(db.path)\n\tdb.syncSecondsCounter = syncSecondsCounterVec.WithLabelValues(db.path)\n\tdb.diskFullGauge = diskFullGaugeVec.WithLabelValues(db.path)\n\tdb.checkpointNCounterVec = checkpointNCounterVec.MustCurryWith(prometheus.Labels{\"db\": db.path})\n\tdb.checkpointErrorNCounterVec = checkpointErrorNCounterVec.MustCurryWith(prometheus.Labels{\"db\": db.path})\n\tdb.checkpointSecondsCounterVec = checkpointSecondsCounterVec.MustCurryWith(prometheus.Labels{\"db\": db.path})\n\tdb.compactor.CompactionVerifyErrorCounter = compactionVerifyErrorCounterVec.WithLabelValues(db.path)\n}\n\n// deleteMetrics removes every per-database series so a process that opens many\n// databases over its lifetime does not accumulate series forever.\nfunc (db *DB) deleteMetrics() {\n\tdbMetricOwners.Lock()\n\tdefer dbMetricOwners.Unlock()\n\tif !db.metricsRegistered {\n\t\treturn\n\t}\n\tdb.metricsRegistered = false\n\n\tname := filepath.Base(db.path)\n\tdbMetricOwners.basenames[name]--\n\tif dbMetricOwners.basenames[name] == 0 {\n\t\tdelete(dbMetricOwners.basenames, name)\n\t\tinternal.L0RetentionGaugeVec.DeletePartialMatch(prometheus.Labels{\"db\": name})\n\t}\n\n\tdbMetricOwners.paths[db.path]--\n\tif dbMetricOwners.paths[db.path] != 0 {\n\t\treturn\n\t}\n\tdelete(dbMetricOwners.paths, db.path)\n\n\tlabels := prometheus.Labels{\"db\": db.path}\n\tdbSizeGaugeVec.DeletePartialMatch(labels)\n\twalSizeGaugeVec.DeletePartialMatch(labels)\n\ttotalWALBytesCounterVec.DeletePartialMatch(labels)\n\ttxIDIndexGaugeVec.DeletePartialMatch(labels)\n\tsyncNCounterVec.DeletePartialMatch(labels)\n\tsyncErrorNCounterVec.DeletePartialMatch(labels)\n\tsyncSecondsCounterVec.DeletePartialMatch(labels)\n\tdiskFullGaugeVec.DeletePartialMatch(labels)\n\tcompactionVerifyErrorCounterVec.DeletePartialMatch(labels)\n\tcheckpointNCounterVec.DeletePartialMatch(labels)\n\tcheckpointErrorNCounterVec.DeletePartialMatch(labels)\n\tcheckpointSecondsCounterVec.DeletePartialMatch(labels)\n}\n\n// SetLogger updates the database logger and propagates to subsystems.\nfunc (db *DB) SetLogger(logger *slog.Logger) {\n\tif logger == nil {\n\t\tlogger = slog.Default()\n\t}\n\tdb.Logger = logger\n\tif db.compactor != nil {\n\t\tdb.compactor.setLogger(logger.With(LogKeySubsystem, LogSubsystemCompactor))\n\t}\n\tif db.Replica != nil \u0026\u0026 db.Replica.Client != nil {\n\t\tdb.Replica.Client.SetLogger(db.Replica.Logger())\n\t}\n}\n\n// SQLDB returns a reference to the underlying sql.DB connection.\nfunc (db *DB) SQLDB() *sql.DB {\n\treturn db.db\n}\n\n// Path returns the path to the database.\nfunc (db *DB) Path() string {\n\treturn db.path\n}\n\n// SyncDiagnostic returns the latest sync/checkpoint diagnostic snapshot.\nfunc (db *DB) SyncDiagnostic() SyncDiagnostic {\n\tdb.syncDiag.RLock()\n\tdefer db.syncDiag.RUnlock()\n\n\tdiag := SyncDiagnostic{\n\t\tPath: db.path,\n\t\tActive: db.syncDiag.active,\n\t\tOperation: string(db.syncDiag.operation),\n\t\tPhase: string(db.syncDiag.phase),\n\t\tTXID: uint64(db.syncDiag.txID),\n\t\tWALSize: db.syncDiag.walSize,\n\t\tLastSyncedWALOffset: db.syncDiag.lastSyncedWALOffset,\n\t\tSnapshotting: db.syncDiag.snapshotting,\n\t\tCheckpointMode: db.syncDiag.checkpointMode,\n\t\tReason: db.syncDiag.reason,\n\t\tError: db.syncDiag.err,\n\t\tExecutorWaiterCount: db.syncDiag.executorWaiterCount,\n\t}\n\tif !db.syncDiag.executorWaitStarted.IsZero() {\n\t\tstartedAt := db.syncDiag.executorWaitStarted\n\t\tdiag.ExecutorWaitStarted = \u0026startedAt\n\t\tdiag.ExecutorWaitSeconds = time.Since(db.syncDiag.executorWaitStarted).Seconds()\n\t}\n\tif !db.syncDiag.startedAt.IsZero() {\n\t\tstartedAt := db.syncDiag.startedAt\n\t\tdiag.StartedAt = \u0026startedAt\n\t}\n\tif !db.syncDiag.updatedAt.IsZero() {\n\t\tupdatedAt := db.syncDiag.updatedAt\n\t\tdiag.UpdatedAt = \u0026updatedAt\n\t}\n\tif !db.syncDiag.startedAt.IsZero() {\n\t\tend := db.syncDiag.updatedAt\n\t\tif db.syncDiag.active || end.IsZero() {\n\t\t\tend = time.Now()\n\t\t}\n\t\tdiag.ElapsedSeconds = end.Sub(db.syncDiag.startedAt).Seconds()\n\t}\n\treturn diag\n}\n\nfunc (db *DB) beginSyncDiag(operation diagOp) {\n\tnow := time.Now()\n\twalSize, _ := db.walFileSize()\n\n\tdb.syncDiag.Lock()\n\tdb.syncDiag.active = true\n\tdb.syncDiag.operation = operation\n\tdb.syncDiag.phase = diagPhaseStarting\n\tdb.syncDiag.startedAt = now\n\tdb.syncDiag.updatedAt = now\n\tdb.syncDiag.txID = 0\n\tdb.syncDiag.walSize = walSize\n\tdb.syncDiag.lastSyncedWALOffset = db.syncState.lastSyncedWALOffset\n\tdb.syncDiag.snapshotting = false\n\tdb.syncDiag.checkpointMode = \"\"\n\tdb.syncDiag.reason = \"\"\n\tdb.syncDiag.err = \"\"\n\tdb.syncDiag.Unlock()\n}\n\nfunc (db *DB) setSyncDiagPhase(phase diagPhase, updates ...func(*diagState)) {\n\tdb.syncDiag.Lock()\n\tdefer db.syncDiag.Unlock()\n\tif !db.syncDiag.active {\n\t\treturn\n\t}\n\tdb.syncDiag.phase = phase\n\tdb.syncDiag.updatedAt = time.Now()\n\tfor _, update := range updates {\n\t\tupdate(\u0026db.syncDiag)\n\t}\n}\n\nfunc (db *DB) finishSyncDiag(err error) {\n\tdb.syncDiag.Lock()\n\tdefer db.syncDiag.Unlock()\n\tif !db.syncDiag.active {\n\t\treturn\n\t}\n\tdb.syncDiag.active = false\n\tdb.syncDiag.updatedAt = time.Now()\n\tif err != nil {\n\t\tdb.syncDiag.err = err.Error()\n\t}\n}\n\nfunc (db *DB) beginSyncExecutorWait() {\n\tdb.syncDiag.Lock()\n\tdefer db.syncDiag.Unlock()\n\tif db.syncDiag.executorWaiterCount == 0 {\n\t\tdb.syncDiag.executorWaitStarted = time.Now()\n\t}\n\tdb.syncDiag.executorWaiterCount++\n}\n\nfunc (db *DB) finishSyncExecutorWait() {\n\tdb.syncDiag.Lock()\n\tdefer db.syncDiag.Unlock()\n\tdb.syncDiag.executorWaiterCount--\n\tif db.syncDiag.executorWaiterCount == 0 {\n\t\tdb.syncDiag.executorWaitStarted = time.Time{}\n\t}\n}\n\n// IsOpen returns true if the database has been opened.\nfunc (db *DB) IsOpen() bool {\n\tdb.mu.RLock()\n\tdefer db.mu.RUnlock()\n\treturn db.opened\n}\n\n// WALPath returns the path to the database's WAL file.\nfunc (db *DB) WALPath() string {\n\treturn db.path + \"-wal\"\n}\n\n// MetaPath returns the path to the database metadata.\nfunc (db *DB) MetaPath() string {\n\treturn db.metaPath\n}\n\n// SetMetaPath sets the path to database metadata.\nfunc (db *DB) SetMetaPath(path string) {\n\tdb.metaPath = path\n}\n\n// LTXDir returns path of the root LTX directory.\nfunc (db *DB) LTXDir() string {\n\treturn filepath.Join(db.metaPath, \"ltx\")\n}\n\n// ResetLocalState removes local LTX files, forcing a fresh snapshot on next sync.\n// This is useful for recovering from corrupted or missing LTX files.\n// The database file itself is not modified.\nfunc (db *DB) ResetLocalState(ctx context.Context) error {\n\tdb.Logger.Info(\"resetting local litestream state\",\n\t\t\"meta_path\", db.metaPath,\n\t\t\"ltx_dir\", db.LTXDir())\n\n\t// Remove all LTX files\n\tif err := os.RemoveAll(db.LTXDir()); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"remove ltx directory: %w\", err)\n\t}\n\n\t// Clear cached LTX file info\n\tdb.maxLTXFileInfos.Lock()\n\tdb.maxLTXFileInfos.m = make(map[int]*ltx.FileInfo)\n\tdb.maxLTXFileInfos.Unlock()\n\n\tdb.invalidatePosCache()\n\n\tdb.Logger.Info(\"local state reset complete, next sync will create fresh snapshot\")\n\treturn nil\n}\n\n// LTXLevelDir returns path of the given LTX compaction level.\n// Panics if level is negative.\nfunc (db *DB) LTXLevelDir(level int) string {\n\treturn filepath.Join(db.LTXDir(), strconv.Itoa(level))\n}\n\n// LTXPath returns the local path of a single LTX file.\n// Panics if level or either txn ID is negative.\nfunc (db *DB) LTXPath(level int, minTXID, maxTXID ltx.TXID) string {\n\tassert(level \u003e= 0, \"level cannot be negative\")\n\treturn filepath.Join(db.LTXLevelDir(level), ltx.FormatFilename(minTXID, maxTXID))\n}\n\n// openLocalLTXFile opens a local LTX file for reading.\n// Used by the Compactor to prefer local files over remote.\nfunc (db *DB) openLocalLTXFile(level int, minTXID, maxTXID ltx.TXID) (io.ReadCloser, error) {\n\treturn os.Open(db.LTXPath(level, minTXID, maxTXID))\n}\n\n// deleteLocalLTXFile deletes a local LTX file.\n// Used by the Compactor for retention enforcement.\nfunc (db *DB) deleteLocalLTXFile(level int, minTXID, maxTXID ltx.TXID) error {\n\tpath := db.LTXPath(level, minTXID, maxTXID)\n\tif err := os.Remove(path); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\tif level == 0 {\n\t\tdb.invalidatePosCache()\n\t}\n\treturn nil\n}\n\n// MaxLTX returns the last LTX file written to level 0.\nfunc (db *DB) MaxLTX() (minTXID, maxTXID ltx.TXID, err error) {\n\tents, err := os.ReadDir(db.LTXLevelDir(0))\n\tif os.IsNotExist(err) {\n\t\treturn 0, 0, nil // no LTX files written\n\t} else if err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\t// Find highest txn ID.\n\tfor _, ent := range ents {\n\t\tif min, max, err := ltx.ParseFilename(ent.Name()); err != nil {\n\t\t\tcontinue // invalid LTX filename\n\t\t} else if max \u003e maxTXID {\n\t\t\tminTXID, maxTXID = min, max\n\t\t}\n\t}\n\treturn minTXID, maxTXID, nil\n}\n\n// FileInfo returns the cached file stats for the database file when it was initialized.\nfunc (db *DB) FileInfo() os.FileInfo {\n\treturn db.fileInfo\n}\n\n// DirInfo returns the cached file stats for the parent directory of the database file when it was initialized.\nfunc (db *DB) DirInfo() os.FileInfo {\n\treturn db.dirInfo\n}\n\n// Pos returns the current replication position of the database.\n// The result is cached and invalidated when L0 LTX files change.\nfunc (db *DB) Pos() (ltx.Pos, error) {\n\tdb.pos.Lock()\n\tdefer db.pos.Unlock()\n\n\tif db.pos.value != nil {\n\t\treturn *db.pos.value, nil\n\t}\n\n\tminTXID, maxTXID, err := db.MaxLTX()\n\tif err != nil {\n\t\treturn ltx.Pos{}, err\n\t} else if minTXID == 0 {\n\t\treturn ltx.Pos{}, nil // no replication yet\n\t}\n\n\tltxPath := db.LTXPath(0, minTXID, maxTXID)\n\tf, err := os.Open(ltxPath)\n\tif err != nil {\n\t\treturn ltx.Pos{}, NewLTXError(\"open\", ltxPath, 0, uint64(minTXID), uint64(maxTXID), err)\n\t}\n\tdefer func() { _ = f.Close() }()\n\n\tdec := ltx.NewDecoder(f)\n\tif err := dec.Verify(); err != nil {\n\t\treturn ltx.Pos{}, NewLTXError(\"verify\", ltxPath, 0, uint64(minTXID), uint64(maxTXID), fmt.Errorf(\"%w: %w\", ErrLTXCorrupted, err))\n\t}\n\n\tpos := dec.PostApplyPos()\n\tdb.pos.value = \u0026pos\n\n\treturn pos, nil\n}\n\n// invalidatePosCache clears the cached position so the next call to Pos()\n// recomputes it from disk. Call this when L0 LTX files are deleted or\n// when the L0 directory is cleared.\nfunc (db *DB) invalidatePosCache() {\n\tdb.pos.Lock()\n\tdb.pos.value = nil\n\tdb.pos.Unlock()\n}\n\n// Notify returns a channel that closes when the shadow WAL changes.\nfunc (db *DB) Notify() \u003c-chan struct{} {\n\tdb.mu.RLock()\n\tdefer db.mu.RUnlock()\n\treturn db.notify\n}\n\n// PageSize returns the page size of the underlying database.\n// Only valid after database exists \u0026 Init() has successfully run.\nfunc (db *DB) PageSize() int {\n\tdb.mu.RLock()\n\tdefer db.mu.RUnlock()\n\treturn db.pageSize\n}\n\n// RecordSuccessfulSync marks the current time as a successful sync.\n// Used by heartbeat monitoring to determine if a ping should be sent.\nfunc (db *DB) RecordSuccessfulSync() {\n\tdb.lastSuccessfulSyncMu.Lock()\n\tdefer db.lastSuccessfulSyncMu.Unlock()\n\tdb.lastSuccessfulSyncAt = time.Now()\n}\n\n// LastSuccessfulSyncAt returns the time of the last successful sync.\nfunc (db *DB) LastSuccessfulSyncAt() time.Time {\n\tdb.lastSuccessfulSyncMu.RLock()\n\tdefer db.lastSuccessfulSyncMu.RUnlock()\n\treturn db.lastSuccessfulSyncAt\n}\n\n// SyncStatus represents the current replication state of the database.\ntype SyncStatus struct {\n\tLocalTXID ltx.TXID\n\tRemoteTXID ltx.TXID\n\tInSync bool\n}\n\n// SyncStatus returns the current replication status of the database, comparing\n// the local transaction position against the remote replica position. The remote\n// position is queried from the replica storage, so this method may perform I/O.\nfunc (db *DB) SyncStatus(ctx context.Context) (SyncStatus, error) {\n\tif db.Replica == nil {\n\t\treturn SyncStatus{}, fmt.Errorf(\"no replica configured\")\n\t}\n\n\tlocalPos, err := db.Pos()\n\tif err != nil {\n\t\treturn SyncStatus{}, fmt.Errorf(\"local position: %w\", err)\n\t}\n\n\tremotePos, err := db.Replica.calcPos(ctx)\n\tif err != nil {\n\t\treturn SyncStatus{}, fmt.Errorf(\"remote position: %w\", err)\n\t}\n\n\treturn SyncStatus{\n\t\tLocalTXID: localPos.TXID,\n\t\tRemoteTXID: remotePos.TXID,\n\t\tInSync: localPos.TXID \u003e 0 \u0026\u0026 localPos.TXID == remotePos.TXID,\n\t}, nil\n}\n\n// SyncAndWait performs a full sync: WAL to LTX files, then LTX files to remote\n// replica. Blocks until both stages complete.\nfunc (db *DB) SyncAndWait(ctx context.Context) error {\n\tif db.Replica == nil {\n\t\treturn fmt.Errorf(\"no replica configured\")\n\t}\n\n\tif err := db.Sync(ctx); err != nil {\n\t\treturn fmt.Errorf(\"db sync: %w\", err)\n\t}\n\tif err := db.Replica.Sync(ctx); err != nil {\n\t\treturn fmt.Errorf(\"replica sync: %w\", err)\n\t}\n\treturn nil\n}\n\n// EnsureExists restores the database from the configured replica if the local\n// database file does not exist. If no backup is available, it returns nil and\n// a fresh database will be created on Open(). Must be called before Open().\nfunc (db *DB) EnsureExists(ctx context.Context) error {\n\tif db.Replica == nil {\n\t\treturn fmt.Errorf(\"no replica configured\")\n\t}\n\tif db.Replica.Client == nil {\n\t\treturn fmt.Errorf(\"no replica client configured\")\n\t}\n\n\tif _, err := os.Stat(db.Path()); err == nil {\n\t\treturn nil\n\t} else if !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"stat database: %w\", err)\n\t}\n\n\tif dir := filepath.Dir(db.Path()); dir != \".\" {\n\t\tif err := os.MkdirAll(dir, 0o750); err != nil {\n\t\t\treturn fmt.Errorf(\"create parent directory: %w\", err)\n\t\t}\n\t}\n\n\topt := NewRestoreOptions()\n\topt.OutputPath = db.Path()\n\topt.IntegrityCheck = IntegrityCheckQuick\n\n\tif err := db.Replica.Restore(ctx, opt); err != nil {\n\t\tif errors.Is(err, ErrTxNotAvailable) || errors.Is(err, ErrNoSnapshots) {\n\t\t\tdb.Logger.Debug(\"no backup found, will create fresh database\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"restore from backup: %w\", err)\n\t}\n\n\tdb.Logger.Info(\"database restored from backup\", \"path\", db.Path())\n\treturn nil\n}\n\n// Open initializes the background monitoring goroutine.\nfunc (db *DB) Open() (err error) {\n\tdb.mu.Lock()\n\tif db.opened {\n\t\tdb.mu.Unlock()\n\t\treturn nil // already open\n\t}\n\t// Recreate context for fresh start (handles reopen after close)\n\tdb.ctx, db.cancel = context.WithCancel(context.Background())\n\tdb.mu.Unlock()\n\n\t// Close deletes the per-database series, so recreate them.\n\tdb.initMetrics()\n\n\t// Validate fields on database.\n\tif db.Replica == nil {\n\t\treturn fmt.Errorf(\"replica required before opening database\")\n\t}\n\tif db.Replica.Client == nil {\n\t\treturn fmt.Errorf(\"replica client required before opening database\")\n\t}\n\tif db.MinCheckpointPageN \u003c= 0 {\n\t\treturn fmt.Errorf(\"minimum checkpoint page count required\")\n\t}\n\n\t// Clear old temporary files that my have been left from a crash.\n\tif err := removeTmpFiles(db.metaPath); err != nil {\n\t\treturn fmt.Errorf(\"cannot remove tmp files: %w\", err)\n\t}\n\n\t// Set the compactor client once before starting any goroutines.\n\tdb.compactor.VerifyCompaction = db.VerifyCompaction\n\tdb.compactor.RetentionEnabled = db.RetentionEnabled\n\tdb.compactor.client = db.Replica.Client\n\n\t// Start monitoring SQLite database in a separate goroutine.\n\tif db.MonitorInterval \u003e 0 {\n\t\tdb.wg.Add(1)\n\t\tgo func() { defer db.wg.Done(); db.monitor() }()\n\t}\n\n\t// Mark as opened only after successful initialization.\n\tdb.mu.Lock()\n\tdb.opened = true\n\tdb.mu.Unlock()\n\n\treturn nil\n}\n\n// Close flushes outstanding WAL writes to replicas, releases the read lock,\n// and closes the database. If Done is set, closing it interrupts the shutdown\n// sync retry loop and cancels any in-flight sync attempt.\nfunc (db *DB) Close(ctx context.Context) (err error) {\n\tdb.cancel()\n\tdb.wg.Wait()\n\n\t// Acquire without honoring caller cancellation: the cleanup below\n\t// (read lock release, handle closes, state reset) must always run or\n\t// the DB is left half-closed with its read lock held. Semaphore\n\t// acquisition fails immediately on an already-done context even when\n\t// the semaphore is free.\n\tif err := db.execSem.Acquire(context.WithoutCancel(ctx), 1); err != nil {\n\t\treturn err\n\t}\n\tdefer db.execSem.Release(1)\n\n\t// Perform a final db sync, if initialized.\n\tif db.db != nil {\n\t\tif _, e := db.syncLocked(ctx, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\t// Ensure replicas perform a final sync and stop replicating.\n\tif db.Replica != nil {\n\t\tif db.db != nil {\n\t\t\tif e := db.syncReplicaWithRetry(ctx); e != nil \u0026\u0026 err == nil {\n\t\t\t\terr = e\n\t\t\t}\n\t\t}\n\t\tdb.Replica.Stop(true)\n\t}\n\n\t// Release the read lock to allow other applications to handle checkpointing.\n\tif db.rtx != nil {\n\t\tif e := db.releaseReadLock(); e != nil \u0026\u0026 err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\tdb.mu.Lock()\n\tsqlDB := db.db\n\tf := db.f\n\tdb.db = nil\n\tdb.f = nil\n\tdb.opened = false\n\tdb.rtx = nil\n\tdb.mu.Unlock()\n\n\tif sqlDB != nil {\n\t\tif e := sqlDB.Close(); e != nil \u0026\u0026 err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\tif f != nil {\n\t\tif e := f.Close(); e != nil \u0026\u0026 err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\t// Remove this database's series now that the final sync has recorded\n\t// its last values.\n\tdb.deleteMetrics()\n\n\treturn err\n}\n\n// syncReplicaWithRetry attempts to sync the replica with retry logic for shutdown.\n// It retries until success, timeout, or context cancellation. If db.Done is non-nil,\n// closing it cancels any in-flight sync attempt and exits the retry loop.\n// If ShutdownSyncTimeout is 0, it performs a single sync attempt without retries.\nfunc (db *DB) syncReplicaWithRetry(ctx context.Context) error {\n\tif db.Replica == nil {\n\t\treturn nil\n\t}\n\n\ttimeout := db.ShutdownSyncTimeout\n\tinterval := db.ShutdownSyncInterval\n\n\t// If timeout is zero, just try once (no retry)\n\tif timeout == 0 {\n\t\treturn db.Replica.Sync(ctx)\n\t}\n\n\t// Use default interval if not set\n\tif interval == 0 {\n\t\tinterval = DefaultShutdownSyncInterval\n\t}\n\n\t// Create deadline context for total retry duration.\n\tdeadlineCtx, deadlineCancel := context.WithTimeout(ctx, timeout)\n\tdefer deadlineCancel()\n\n\t// If db.Done is set, derive a context that cancels when done is closed\n\t// so that in-flight Replica.Sync calls are interrupted immediately.\n\tsyncCtx := deadlineCtx\n\tif db.Done != nil {\n\t\tvar syncCancel context.CancelFunc\n\t\tsyncCtx, syncCancel = context.WithCancel(deadlineCtx)\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase \u003c-db.Done:\n\t\t\t\tsyncCancel()\n\t\t\tcase \u003c-deadlineCtx.Done():\n\t\t\t\tsyncCancel()\n\t\t\t}\n\t\t}()\n\t}\n\n\tvar lastErr error\n\tattempt := 0\n\tstartTime := time.Now()\n\n\tfor {\n\t\t// Check if done is already closed before attempting sync\n\t\tif db.Done != nil {\n\t\t\tselect {\n\t\t\tcase \u003c-db.Done:\n\t\t\t\tdb.Logger.Warn(\"shutdown sync skipped, interrupted by signal\",\n\t\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\t\"duration\", time.Since(startTime))\n\t\t\t\treturn fmt.Errorf(\"after %d attempts: %w\", attempt, ErrShutdownInterrupted)\n\t\t\tdefault:\n\t\t\t}\n\t\t}\n\n\t\tattempt++\n\n\t\t// Try sync\n\t\tif err := db.Replica.Sync(syncCtx); err == nil {\n\t\t\tif attempt \u003e 1 {\n\t\t\t\tdb.Logger.Info(\"shutdown sync succeeded after retry\",\n\t\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\t\"duration\", time.Since(startTime))\n\t\t\t}\n\t\t\treturn nil\n\t\t} else {\n\t\t\tlastErr = err\n\t\t}\n\n\t\t// Check if we should stop retrying (done signal or timeout)\n\t\tselect {\n\t\tcase \u003c-deadlineCtx.Done():\n\t\t\tdb.Logger.Error(\"shutdown sync failed after timeout\",\n\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\"duration\", time.Since(startTime),\n\t\t\t\t\"error\", lastErr)\n\t\t\treturn fmt.Errorf(\"shutdown sync timeout after %d attempts: %w\", attempt, lastErr)\n\t\tcase \u003c-db.Done:\n\t\t\tdb.Logger.Warn(\"shutdown sync interrupted by signal\",\n\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\"duration\", time.Since(startTime),\n\t\t\t\t\"error\", lastErr)\n\t\t\treturn fmt.Errorf(\"after %d attempts: %w\", attempt, ErrShutdownInterrupted)\n\t\tdefault:\n\t\t}\n\n\t\t// Log retry with hint about second signal if interruptible\n\t\tif db.Done != nil {\n\t\t\tdb.Logger.Warn(\"shutdown sync failed, retrying (press Ctrl+C again to skip)\",\n\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\"error\", lastErr,\n\t\t\t\t\"elapsed\", time.Since(startTime),\n\t\t\t\t\"remaining\", time.Until(startTime.Add(timeout)))\n\t\t} else {\n\t\t\tdb.Logger.Warn(\"shutdown sync failed, retrying\",\n\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\"error\", lastErr,\n\t\t\t\t\"elapsed\", time.Since(startTime),\n\t\t\t\t\"remaining\", time.Until(startTime.Add(timeout)))\n\t\t}\n\n\t\t// Wait before retry, but also listen for done signal\n\t\tselect {\n\t\tcase \u003c-time.After(interval):\n\t\tcase \u003c-deadlineCtx.Done():\n\t\t\treturn fmt.Errorf(\"shutdown sync timeout after %d attempts: %w\", attempt, lastErr)\n\t\tcase \u003c-db.Done:\n\t\t\tdb.Logger.Warn(\"shutdown sync interrupted by signal\",\n\t\t\t\t\"attempts\", attempt,\n\t\t\t\t\"duration\", time.Since(startTime))\n\t\t\treturn fmt.Errorf(\"after %d attempts: %w\", attempt, ErrShutdownInterrupted)\n\t\t}\n\t}\n}\n\n// setPersistWAL sets the PERSIST_WAL file control on the database connection.\n// This prevents SQLite from removing the WAL file when connections close.\nfunc (db *DB) setPersistWAL(ctx context.Context) error {\n\tconn, err := db.db.Conn(ctx)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get connection: %w\", err)\n\t}\n\tdefer conn.Close()\n\n\treturn conn.Raw(func(driverConn interface{}) error {\n\t\tfc, ok := driverConn.(sqlite.FileControl)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"driver does not implement FileControl\")\n\t\t}\n\n\t\t_, err := fc.FileControlPersistWAL(\"main\", 1)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"FileControlPersistWAL: %w\", err)\n\t\t}\n\n\t\treturn nil\n\t})\n}\n\n// init initializes the connection to the database.\n// Skipped if already initialized or if the database file does not exist.\nfunc (db *DB) init(ctx context.Context) (err error) {\n\t// Exit if already initialized.\n\tif db.db != nil {\n\t\treturn nil\n\t}\n\n\t// Exit if no database file exists.\n\tfi, err := os.Stat(db.path)\n\tif os.IsNotExist(err) {\n\t\treturn nil\n\t} else if err != nil {\n\t\treturn err\n\t}\n\tdb.fileInfo = fi\n\n\t// Obtain permissions for parent directory.\n\tif fi, err = os.Stat(filepath.Dir(db.path)); err != nil {\n\t\treturn err\n\t}\n\tdb.dirInfo = fi\n\n\tdsn := fmt.Sprintf(\"file:%s?_pragma=busy_timeout(%d)\u0026_pragma=wal_autocheckpoint(0)\",\n\t\tdb.path, db.BusyTimeout.Milliseconds())\n\n\tif db.db, err = sql.Open(\"sqlite\", dsn); err != nil {\n\t\treturn err\n\t}\n\n\t// Set PERSIST_WAL to prevent WAL file removal when database connections close.\n\tif err := db.setPersistWAL(ctx); err != nil {\n\t\treturn fmt.Errorf(\"set PERSIST_WAL: %w\", err)\n\t}\n\n\t// Open long-running database file descriptor. Required for non-OFD locks.\n\tif db.f, err = os.Open(db.path); err != nil {\n\t\treturn fmt.Errorf(\"open db file descriptor: %w\", err)\n\t}\n\n\t// Ensure database is closed if init fails.\n\t// Initialization can retry on next sync.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = db.releaseReadLock()\n\t\t\tdb.db.Close()\n\t\t\tdb.f.Close()\n\t\t\tdb.db, db.f = nil, nil\n\t\t}\n\t}()\n\n\t// Enable WAL and ensure it is set. New mode should be returned on success:\n\t// https://www.sqlite.org/pragma.html#pragma_journal_mode\n\tvar mode string\n\tif err := db.db.QueryRowContext(ctx, `PRAGMA journal_mode = wal;`).Scan(\u0026mode); err != nil {\n\t\treturn err\n\t} else if mode != \"wal\" {\n\t\treturn fmt.Errorf(\"enable wal failed, mode=%q\", mode)\n\t}\n\n\t// Create a table to force writes to the WAL when empty.\n\t// There should only ever be one row with id=1.\n\tif _, err := db.db.ExecContext(ctx, `CREATE TABLE IF NOT EXISTS _litestream_seq (id INTEGER PRIMARY KEY, seq INTEGER);`); err != nil {\n\t\treturn fmt.Errorf(\"create _litestream_seq table: %w\", err)\n\t}\n\n\t// Create a lock table to force write locks during sync.\n\t// The sync write transaction always rolls back so no data should be in this table.\n\tif _, err := db.db.ExecContext(ctx, `CREATE TABLE IF NOT EXISTS _litestream_lock (id INTEGER);`); err != nil {\n\t\treturn fmt.Errorf(\"create _litestream_lock table: %w\", err)\n\t}\n\n\t// Start a long-running read transaction to prevent other transactions\n\t// from checkpointing.\n\tif err := db.acquireReadLock(ctx); err != nil {\n\t\treturn fmt.Errorf(\"acquire read lock: %w\", err)\n\t}\n\n\t// Read page size.\n\tif err := db.db.QueryRowContext(ctx, `PRAGMA page_size;`).Scan(\u0026db.pageSize); err != nil {\n\t\treturn fmt.Errorf(\"read page size: %w\", err)\n\t} else if db.pageSize \u003c= 0 {\n\t\treturn fmt.Errorf(\"invalid db page size: %d\", db.pageSize)\n\t}\n\n\t// Ensure meta directory structure exists.\n\tif err := internal.MkdirAll(db.metaPath, db.dirInfo); err != nil {\n\t\treturn err\n\t}\n\n\t// Ensure WAL has at least one frame in it.\n\tif err := db.ensureWALExists(ctx); err != nil {\n\t\treturn fmt.Errorf(\"ensure wal exists: %w\", err)\n\t}\n\n\t// Check if database is behind replica (issue #781).\n\t// This must happen before replica.Start() to detect restore scenarios.\n\tif db.Replica != nil {\n\t\tif err := db.checkDatabaseBehindReplica(ctx); err != nil {\n\t\t\treturn fmt.Errorf(\"check database behind replica: %w\", err)\n\t\t}\n\t}\n\n\t// If we have an existing replication files, ensure the headers match.\n\t// if err := db.verifyHeadersMatch(); err != nil {\n\t// \treturn fmt.Errorf(\"cannot determine last wal position: %w\", err)\n\t// }\n\n\t// TODO(gen): Generate diff of current LTX snapshot and save as next LTX file.\n\n\t// Start replication.\n\tif db.Replica != nil {\n\t\tdb.Replica.Start(db.ctx)\n\t}\n\n\treturn nil\n}\n\n/*\n// verifyHeadersMatch returns an error if\nfunc (db *DB) verifyHeadersMatch() error {\n\tpos, err := db.Pos()\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"cannot determine position: %w\", err)\n\t} else if pos.TXID == 0 {\n\t\treturn true, nil // no replication performed yet\n\t}\n\n\thdr0, err := readWALHeader(db.WALPath())\n\tif os.IsNotExist(err) {\n\t\treturn false, fmt.Errorf(\"no wal: %w\", err)\n\t} else if err != nil {\n\t\treturn false, fmt.Errorf(\"read wal header: %w\", err)\n\t}\n\tsalt1 := binary.BigEndian.Uint32(hdr0[16:])\n\tsalt2 := binary.BigEndian.Uint32(hdr0[20:])\n\n\tltxPath := db.LTXPath(0, pos.TXID, pos.TXID)\n\tf, err := os.Open(ltxPath)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"open ltx path: %w\", err)\n\t}\n\tdefer func() { _ = f.Close() }()\n\n\tdec := ltx.NewDecoder(f)\n\tif err := dec.DecodeHeader(); err != nil {\n\t\treturn false, fmt.Errorf(\"decode ltx header: %w\", err)\n\t}\n\thdr1 := dec.Header()\n\tif salt1 != hdr1.WALSalt1 || salt2 != hdr1.WALSalt2 {\n\t\tdb.Logger.Log(internal.LevelTrace, \"salt mismatch\",\n\t\t\t\"path\", ltxPath,\n\t\t\t\"wal\", [2]uint32{salt1, salt2},\n\t\t\t\"ltx\", [2]uint32{hdr1.WALSalt1, hdr1.WALSalt2})\n\t\treturn false, nil\n\t}\n\treturn true, nil\n}\n*/\n\n// acquireReadLock begins a read transaction on the database to prevent checkpointing.\nfunc (db *DB) acquireReadLock(ctx context.Context) error {\n\tif db.rtx != nil {\n\t\treturn nil\n\t}\n\n\t// Start long running read-transaction to prevent checkpoints. The\n\t// transaction outlives this call, and database/sql rolls it back when its\n\t// BeginTx context is cancelled, so detach it from the caller's context\n\t// (e.g. a control socket request that is cancelled when it returns).\n\ttx, err := db.db.BeginTx(context.WithoutCancel(ctx), nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Execute read query to obtain read lock.\n\tif _, err := tx.ExecContext(ctx, `SELECT COUNT(1) FROM _litestream_seq;`); err != nil {\n\t\t_ = tx.Rollback()\n\t\treturn err\n\t}\n\n\t// Track transaction so we can release it later before checkpoint.\n\tdb.rtx = tx\n\treturn nil\n}\n\n// releaseReadLock rolls back the long-running read transaction.\nfunc (db *DB) releaseReadLock() error {\n\t// Ignore if we do not have a read lock.\n\tif db.rtx == nil {\n\t\treturn nil\n\t}\n\n\t// Rollback \u0026 clear read transaction.\n\t// Use rollback() helper to suppress \"already rolled back\" errors that can\n\t// occur during shutdown when concurrent checkpoint and close operations\n\t// both attempt to release the read lock. See issue #934.\n\terr := rollback(db.rtx)\n\tdb.rtx = nil\n\treturn err\n}\n\n// Sync copies pending data from the WAL to the shadow WAL.\nfunc (db *DB) Sync(ctx context.Context) error {\n\tfor {\n\t\tif err := ctx.Err(); err != nil {\n\t\t\treturn context.Cause(ctx)\n\t\t}\n\n\t\tresult, err := db.syncOnce(ctx, db.MaxSyncWALBytes)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t} else if !result.synced || !result.limited || result.syncedToWALEnd {\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\nfunc (db *DB) syncOnce(ctx context.Context, maxSyncWALBytes int64) (syncResult, error) {\n\tif err := db.lockExec(ctx); err != nil {\n\t\treturn syncResult{}, err\n\t}\n\tdefer db.execSem.Release(1)\n\n\treturn db.syncLocked(ctx, maxSyncWALBytes)\n}\n\nfunc (db *DB) lockExec(ctx context.Context) error {\n\tif db.execSem.TryAcquire(1) {\n\t\treturn nil\n\t}\n\tdb.beginSyncExecutorWait()\n\tdefer db.finishSyncExecutorWait()\n\n\tif err := db.execSem.Acquire(ctx, 1); err != nil {\n\t\treturn fmt.Errorf(\"wait for db sync executor: %w\", context.Cause(ctx))\n\t}\n\treturn nil\n}\n\n// addDurationToCounter records positive durations without allowing a clock\n// adjustment to panic a Prometheus counter.\nfunc addDurationToCounter(counter prometheus.Counter, d time.Duration) {\n\tif d \u003e 0 {\n\t\tcounter.Add(d.Seconds())\n\t}\n}\n\nfunc (db *DB) syncLocked(ctx context.Context, maxSyncWALBytes int64) (result syncResult, err error) {\n\tdb.beginSyncDiag(diagOpSync)\n\tdefer func() { db.finishSyncDiag(err) }()\n\n\t// Track total sync metrics.\n\tt := time.Now()\n\tdefer func() {\n\t\tdb.syncNCounter.Inc()\n\t\tif err != nil {\n\t\t\tdb.syncErrorNCounter.Inc()\n\t\t}\n\t\tif isDiskFullError(err) {\n\t\t\tdb.diskFullGauge.Set(1)\n\t\t} else {\n\t\t\tdb.diskFullGauge.Set(0)\n\t\t}\n\t\taddDurationToCounter(db.syncSecondsCounter, time.Since(t))\n\t}()\n\n\texec, err := db.newSyncExecutor(ctx)\n\tif err != nil {\n\t\treturn result, err\n\t} else if exec == nil {\n\t\tdb.Logger.Debug(\"sync: no database found\")\n\t\treturn result, nil\n\t}\n\tdefer db.applySyncExecutor(exec, true)\n\n\t// Ensure WAL has at least one frame in it.\n\tdb.setSyncDiagPhase(diagPhaseEnsureWAL, func(s *diagState) {\n\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t})\n\tif err := db.ensureWALExists(ctx); err != nil {\n\t\treturn result, fmt.Errorf(\"ensure wal exists: %w\", err)\n\t}\n\n\tdb.setSyncDiagPhase(diagPhaseVerifyAndSync, func(s *diagState) {\n\t\ts.txID = exec.pos.TXID + 1\n\t})\n\tresult, err = db.verifyAndSyncWithExecutor(ctx, false, exec, maxSyncWALBytes)\n\tif err != nil {\n\t\treturn result, err\n\t}\n\texec.applySyncResult(result)\n\n\t// Track that data was synced for time-based checkpoint decisions.\n\tif result.synced {\n\t\texec.state.syncedSinceCheckpoint = true\n\t}\n\n\t// Checkpoint checks normally wait until the WAL is fully synced, but the\n\t// emergency truncate threshold must be honored even mid catch-up:\n\t// sustained writes could otherwise keep every chunk limited and defer the\n\t// truncate checkpoint indefinitely, growing the WAL without bound.\n\tif !result.limited || result.syncedToWALEnd || db.exceedsTruncateThreshold(result.origWALSize) {\n\t\tdb.setSyncDiagPhase(diagPhaseCheckpointIfNeeded, func(s *diagState) {\n\t\t\ts.txID = exec.pos.TXID\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\t\tif err := db.checkpointIfNeeded(ctx, exec, result.origWALSize, result.newWALSize); err != nil {\n\t\t\treturn result, fmt.Errorf(\"checkpoint: %w\", err)\n\t\t}\n\t}\n\n\tdb.setSyncDiagPhase(diagPhaseUpdateMetrics, func(s *diagState) {\n\t\ts.txID = exec.pos.TXID\n\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t})\n\n\t// Compute current index and total shadow WAL size.\n\tdb.txIDGauge.Set(float64(exec.pos.TXID))\n\n\t// Update file size metrics.\n\tif fi, err := os.Stat(db.path); err == nil {\n\t\tdb.dbSizeGauge.Set(float64(fi.Size()))\n\t}\n\tdb.walSizeGauge.Set(float64(exec.state.lastSyncedWALOffset))\n\n\treturn result, nil\n}\n\nfunc (db *DB) verifyAndSync(ctx context.Context, checkpointing bool, state *syncState) (syncResult, error) {\n\tpos, err := db.Pos()\n\tif err != nil {\n\t\treturn syncResult{}, fmt.Errorf(\"pos: %w\", err)\n\t}\n\n\treturn db.verifyAndSyncWithExecutor(ctx, checkpointing, \u0026syncExecutor{\n\t\tstate: *state,\n\t\tpos: pos,\n\t}, 0)\n}\n\nfunc (db *DB) verifyAndSyncWithExecutor(ctx context.Context, checkpointing bool, exec *syncExecutor, maxSyncWALBytes int64) (syncResult, error) {\n\tdb.setSyncDiagPhase(diagPhaseStatWAL, func(s *diagState) {\n\t\ts.txID = exec.pos.TXID + 1\n\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t})\n\n\t// Use the last synced WAL offset as the logical size for checkpoint decisions.\n\t// This avoids using file size which may include stale frames with old salt\n\t// values after a checkpoint. See issue #997.\n\torigWALSize := exec.state.lastSyncedWALOffset\n\tif origWALSize == 0 {\n\t\t// First sync - use file size as fallback\n\t\tvar err error\n\t\torigWALSize, err = db.walFileSize()\n\t\tif err != nil {\n\t\t\treturn syncResult{}, fmt.Errorf(\"stat wal before sync: %w\", err)\n\t\t}\n\t}\n\n\t// Verify our last sync matches the current state of the WAL.\n\t// This ensures that the last sync position of the real WAL hasn't\n\t// been overwritten by another process.\n\tdb.setSyncDiagPhase(diagPhaseVerify)\n\tinfo, err := db.verifyWithExecutor(ctx, exec)\n\tif err != nil {\n\t\treturn syncResult{}, fmt.Errorf(\"cannot verify wal state: %w\", err)\n\t}\n\n\tdb.setSyncDiagPhase(diagPhaseSyncLTX, func(s *diagState) {\n\t\ts.txID = exec.pos.TXID + 1\n\t\ts.snapshotting = info.snapshotting\n\t\ts.reason = info.reason\n\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t})\n\tresult, err := db.sync(ctx, checkpointing, exec, info, maxSyncWALBytes)\n\tif err != nil {\n\t\treturn syncResult{}, fmt.Errorf(\"sync: %w\", err)\n\t}\n\n\tresult.origWALSize = origWALSize\n\treturn result, nil\n}\n\n// checkpointIfNeeded performs a checkpoint based on configured thresholds.\n// Checks thresholds in priority order: TruncatePageN → MinCheckpointPageN → CheckpointInterval.\n//\n// TruncatePageN uses TRUNCATE mode (blocking). Others use PASSIVE mode, which\n// briefly holds the write lock to seal the WAL and can be skipped when the\n// database is busy.\n//\n// Time-based checkpoints only trigger if exec.state.syncedSinceCheckpoint is true, indicating\n// that data has been synced since the last checkpoint. This prevents creating unnecessary\n// LTX files when the only WAL data is from internal bookkeeping (like _litestream_seq\n// updates from previous checkpoints). See issue #896.\nfunc (db *DB) checkpointIfNeeded(ctx context.Context, exec *syncExecutor, origWALSize, newWALSize int64) error {\n\tif db.pageSize == 0 {\n\t\treturn nil\n\t}\n\tif !db.exceedsTruncateThreshold(exec.state.lastSyncedWALOffset) {\n\t\texec.state.truncatePassiveFailed = false\n\t}\n\n\t// Priority 1: Emergency truncate checkpoint (TRUNCATE mode, blocking)\n\t// This prevents unbounded WAL growth from long-lived read transactions.\n\tif db.exceedsTruncateThreshold(origWALSize) {\n\t\ttruncateThreshold := calcWALSize(uint32(db.pageSize), uint32(db.effectiveTruncatePageN()))\n\n\t\tif !exec.state.truncatePassiveFailed {\n\t\t\t// Try a PASSIVE checkpoint first: if it restarts the WAL and brings\n\t\t\t// the synced offset below the threshold, the blocking TRUNCATE and\n\t\t\t// its mandatory boundary snapshot are skipped.\n\t\t\tif restarted, err := db.checkpointWithExecutor(ctx, CheckpointModePassive, exec); err != nil {\n\t\t\t\tif !isSQLiteBusyError(err) {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\texec.state.truncatePassiveFailed = true\n\t\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"passive checkpoint skipped\", \"reason\", \"database busy\")\n\t\t\t} else if restarted {\n\t\t\t\texec.state.truncatePassiveFailed = false\n\t\t\t\tif !db.exceedsTruncateThreshold(exec.state.lastSyncedWALOffset) {\n\t\t\t\t\tdb.Logger.Info(\"wal restarted by passive checkpoint, skipping truncate checkpoint\",\n\t\t\t\t\t\t\"wal_size\", origWALSize,\n\t\t\t\t\t\t\"threshold\", truncateThreshold)\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t} else if exec.checkpointAttempted {\n\t\t\t\texec.state.truncatePassiveFailed = true\n\t\t\t}\n\t\t}\n\n\t\tdb.Logger.Info(\"forcing truncate checkpoint\",\n\t\t\t\"wal_size\", origWALSize,\n\t\t\t\"threshold\", truncateThreshold)\n\t\trestarted, err := db.checkpointWithExecutor(ctx, CheckpointModeTruncate, exec)\n\t\tif restarted || !db.exceedsTruncateThreshold(exec.state.lastSyncedWALOffset) {\n\t\t\texec.state.truncatePassiveFailed = false\n\t\t}\n\t\treturn err\n\t}\n\n\t// Priority 2: Regular checkpoint at min threshold (PASSIVE mode)\n\tif newWALSize \u003e= calcWALSize(uint32(db.pageSize), uint32(db.MinCheckpointPageN)) {\n\t\tif _, err := db.checkpointWithExecutor(ctx, CheckpointModePassive, exec); err != nil {\n\t\t\t// PASSIVE checkpoints can fail with SQLITE_BUSY when database is locked.\n\t\t\t// This is expected behavior and not an error - just log and continue.\n\t\t\tif isSQLiteBusyError(err) {\n\t\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"passive checkpoint skipped\", \"reason\", \"database busy\")\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Priority 3: Time-based checkpoint (PASSIVE mode)\n\t// Only trigger if there have been actual changes synced since the last\n\t// checkpoint. This prevents creating unnecessary LTX files when the only\n\t// WAL data is from internal bookkeeping (like _litestream_seq updates).\n\tif db.CheckpointInterval \u003e 0 \u0026\u0026 exec.state.syncedSinceCheckpoint {\n\t\t// Get database file modification time\n\t\tfi, err := db.f.Stat()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"stat database: %w\", err)\n\t\t}\n\n\t\t// Only checkpoint if enough time has passed and WAL has data\n\t\tif time.Since(fi.ModTime()) \u003e db.CheckpointInterval \u0026\u0026 newWALSize \u003e calcWALSize(uint32(db.pageSize), 1) {\n\t\t\tif _, err := db.checkpointWithExecutor(ctx, CheckpointModePassive, exec); err != nil {\n\t\t\t\t// PASSIVE checkpoints can fail with SQLITE_BUSY when database is locked.\n\t\t\t\t// This is expected behavior and not an error - just log and continue.\n\t\t\t\tif isSQLiteBusyError(err) {\n\t\t\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"passive checkpoint skipped\", \"reason\", \"database busy\")\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// exceedsTruncateThreshold returns true once walSize has grown past the\n// emergency truncate checkpoint threshold.\nfunc (db *DB) exceedsTruncateThreshold(walSize int64) bool {\n\ttruncatePageN := db.effectiveTruncatePageN()\n\treturn truncatePageN \u003e 0 \u0026\u0026 db.pageSize != 0 \u0026\u0026\n\t\twalSize \u003e= calcWALSize(uint32(db.pageSize), uint32(truncatePageN))\n}\n\nfunc (db *DB) effectiveTruncatePageN() int {\n\tif db.TruncatePageN == 0 {\n\t\treturn DefaultTruncatePageN\n\t}\n\treturn db.TruncatePageN\n}\n\n// isSQLiteBusyError returns true if the error is an SQLITE_BUSY error.\nfunc isSQLiteBusyError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\t// Check for \"database is locked\" or \"SQLITE_BUSY\" in error message\n\terrStr := err.Error()\n\treturn strings.Contains(errStr, \"database is locked\") ||\n\t\tstrings.Contains(errStr, \"SQLITE_BUSY\")\n}\n\n// isDiskFullError returns true if the error indicates disk space issues.\n// This includes \"no space left on device\" (ENOSPC) and \"disk quota exceeded\" (EDQUOT).\nfunc isDiskFullError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tif errors.Is(err, ErrDiskFull) || errors.Is(err, syscall.ENOSPC) {\n\t\treturn true\n\t}\n\terrStr := strings.ToLower(err.Error())\n\treturn strings.Contains(errStr, \"no space left on device\") ||\n\t\tstrings.Contains(errStr, \"disk quota exceeded\") ||\n\t\tstrings.Contains(errStr, \"not enough space on the disk\") ||\n\t\tstrings.Contains(errStr, \"database or disk is full\") ||\n\t\tstrings.Contains(errStr, \"enospc\") ||\n\t\tstrings.Contains(errStr, \"edquot\")\n}\n\ntype ltxStagingFile interface {\n\tio.Writer\n\tSync() error\n\tClose() error\n}\n\nfunc defaultOpenLTXFile(name string, flag int, perm os.FileMode) (ltxStagingFile, error) {\n\treturn os.OpenFile(name, flag, perm)\n}\n\n// walFileSize returns the size of the WAL file in bytes.\nfunc (db *DB) walFileSize() (int64, error) {\n\tfi, err := os.Stat(db.WALPath())\n\tif os.IsNotExist(err) {\n\t\treturn 0, nil\n\t} else if err != nil {\n\t\treturn 0, err\n\t}\n\treturn fi.Size(), nil\n}\n\n// calcWALSize returns the size of the WAL for a given page size \u0026 count.\n// Casts to int64 before multiplication to prevent uint32 overflow with large page sizes.\nfunc calcWALSize(pageSize uint32, pageN uint32) int64 {\n\treturn int64(WALHeaderSize) + (int64(WALFrameHeaderSize+pageSize) * int64(pageN))\n}\n\nfunc (db *DB) bumpLitestreamSeq(ctx context.Context) error {\n\t_, err := db.db.ExecContext(ctx, `INSERT INTO _litestream_seq (id, seq) VALUES (1, 1) ON CONFLICT (id) DO UPDATE SET seq = seq + 1`)\n\treturn err\n}\n\n// ensureWALExists checks that the real WAL exists and has a header.\nfunc (db *DB) ensureWALExists(ctx context.Context) (err error) {\n\t// Exit early if WAL header exists.\n\tif fi, err := os.Stat(db.WALPath()); err == nil \u0026\u0026 fi.Size() \u003e= WALHeaderSize {\n\t\treturn nil\n\t}\n\n\t// Otherwise create transaction that updates the internal litestream table.\n\treturn db.bumpLitestreamSeq(ctx)\n}\n\n// checkDatabaseBehindReplica detects when a database has been restored to an\n// earlier state and the replica has a higher TXID. This handles issue #781.\n//\n// If detected, it clears local L0 files and fetches the latest L0 LTX file\n// from the replica to establish a baseline. The next DB.sync() will detect\n// the mismatch and trigger a snapshot at the current database state.\nfunc (db *DB) checkDatabaseBehindReplica(ctx context.Context) error {\n\t// Get database position from local L0 files\n\tdbPos, err := db.Pos()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get database position: %w\", err)\n\t}\n\n\t// Get replica position from remote\n\treplicaInfo, err := db.Replica.MaxLTXFileInfo(ctx, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get replica position: %w\", err)\n\t} else if replicaInfo.MaxTXID == 0 {\n\t\treturn nil // No remote replica data yet\n\t}\n\n\t// Check if database is behind replica\n\tif dbPos.TXID \u003e= replicaInfo.MaxTXID {\n\t\treturn nil // Database is ahead or equal\n\t}\n\n\tdb.Logger.Info(\"detected database behind replica\",\n\t\t\"db_txid\", dbPos.TXID,\n\t\t\"replica_txid\", replicaInfo.MaxTXID)\n\n\t// Clear local L0 files\n\tl0Dir := db.LTXLevelDir(0)\n\tif err := os.RemoveAll(l0Dir); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"remove L0 directory: %w\", err)\n\t}\n\tdb.invalidatePosCache()\n\tif err := internal.MkdirAll(l0Dir, db.dirInfo); err != nil {\n\t\treturn fmt.Errorf(\"recreate L0 directory: %w\", err)\n\t}\n\n\t// Fetch latest L0 LTX file from replica\n\tminTXID, maxTXID := replicaInfo.MinTXID, replicaInfo.MaxTXID\n\treader, err := db.Replica.Client.OpenLTXFile(ctx, 0, minTXID, maxTXID, 0, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open remote L0 file: %w\", err)\n\t}\n\tdefer func() { _ = reader.Close() }()\n\n\t// Write to temp file and atomically rename\n\tlocalPath := db.LTXPath(0, minTXID, maxTXID)\n\ttmpPath := localPath + \".tmp\"\n\n\ttmpFile, err := os.Create(tmpPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create temp L0 file: %w\", err)\n\t}\n\tdefer func() { _ = os.Remove(tmpPath) }() // Clean up temp file on error\n\n\tif _, err := io.Copy(tmpFile, reader); err != nil {\n\t\t_ = tmpFile.Close()\n\t\treturn fmt.Errorf(\"copy L0 file: %w\", err)\n\t}\n\n\tif err := tmpFile.Sync(); err != nil {\n\t\t_ = tmpFile.Close()\n\t\treturn fmt.Errorf(\"sync L0 file: %w\", err)\n\t}\n\n\tif err := tmpFile.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close L0 file: %w\", err)\n\t}\n\n\t// Atomically rename temp file to final path\n\tif err := os.Rename(tmpPath, localPath); err != nil {\n\t\treturn fmt.Errorf(\"rename L0 file: %w\", err)\n\t}\n\tdb.invalidatePosCache()\n\n\tdb.Logger.Info(\"fetched latest L0 file from replica\",\n\t\t\"min_txid\", minTXID,\n\t\t\"max_txid\", maxTXID)\n\n\treturn nil\n}\n\n// verify ensures the current LTX state matches where it left off from\n// the real WAL. Check info.ok if verification was successful.\nfunc (db *DB) verify(ctx context.Context, state *syncState) (info syncInfo, err error) {\n\tpos, err := db.Pos()\n\tif err != nil {\n\t\treturn info, fmt.Errorf(\"pos: %w\", err)\n\t}\n\n\treturn db.verifyWithExecutor(ctx, \u0026syncExecutor{\n\t\tstate: *state,\n\t\tpos: pos,\n\t})\n}\n\nfunc (db *DB) verifyWithExecutor(ctx context.Context, exec *syncExecutor) (info syncInfo, err error) {\n\tframeSize := int64(db.pageSize + WALFrameHeaderSize)\n\tinfo.snapshotting = true\n\n\tif exec.pos.TXID == 0 {\n\t\tinfo.offset = WALHeaderSize\n\t\treturn info, nil // first sync\n\t}\n\n\t// Determine last WAL offset we save from.\n\tltxPath := db.LTXPath(0, exec.pos.TXID, exec.pos.TXID)\n\tltxFile, err := os.Open(ltxPath)\n\tif err != nil {\n\t\treturn info, NewLTXError(\"open\", ltxPath, 0, uint64(exec.pos.TXID), uint64(exec.pos.TXID), err)\n\t}\n\tdefer func() { _ = ltxFile.Close() }()\n\n\tdec := ltx.NewDecoder(ltxFile)\n\tif err := dec.DecodeHeader(); err != nil {\n\t\t// Decode failure indicates corruption\n\t\tltxErr := NewLTXError(\"decode\", ltxPath, 0, uint64(exec.pos.TXID), uint64(exec.pos.TXID), fmt.Errorf(\"%w: %w\", ErrLTXCorrupted, err))\n\t\treturn info, ltxErr\n\t}\n\tinfo.offset = dec.Header().WALOffset + dec.Header().WALSize\n\tinfo.salt1 = dec.Header().WALSalt1\n\tinfo.salt2 = dec.Header().WALSalt2\n\tinfo.prevCommit = dec.Header().Commit\n\n\t// If LTX WAL offset is larger than real WAL then the WAL has been truncated.\n\tif fi, err := os.Stat(db.WALPath()); err != nil {\n\t\treturn info, fmt.Errorf(\"open wal file: %w\", err)\n\t} else if info.offset \u003e fi.Size() {\n\t\texec.state.truncatePassiveFailed = false\n\n\t\t// If we previously synced to the exact end of the WAL, this truncation\n\t\t// is expected (normal checkpoint behavior). Reset position and continue\n\t\t// incrementally rather than triggering a full snapshot. See issue #927.\n\t\tif exec.state.syncedToWALEnd {\n\t\t\t// Read new WAL header to get current salt values\n\t\t\thdr, err := readWALHeader(db.WALPath())\n\t\t\tif err != nil {\n\t\t\t\treturn info, fmt.Errorf(\"read wal header after expected truncation: %w\", err)\n\t\t\t}\n\n\t\t\tinfo.offset = WALHeaderSize\n\t\t\tinfo.salt1 = binary.BigEndian.Uint32(hdr[16:])\n\t\t\tinfo.salt2 = binary.BigEndian.Uint32(hdr[20:])\n\t\t\tinfo.snapshotting = false\n\t\t\tinfo.reason = \"\"\n\t\t\tinfo.clearSyncedToWALEnd = true\n\n\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"wal truncated after sync to end (expected checkpoint)\",\n\t\t\t\t\"new_salt1\", info.salt1,\n\t\t\t\t\"new_salt2\", info.salt2)\n\n\t\t\treturn info, nil\n\t\t}\n\n\t\tinfo.reason = \"wal truncated by another process\"\n\t\treturn info, nil\n\t}\n\n\t// Compare WAL headers. Restart from beginning of WAL if different.\n\thdr0, err := readWALHeader(db.WALPath())\n\tif err != nil {\n\t\treturn info, fmt.Errorf(\"cannot read wal header: %w\", err)\n\t}\n\tsalt1 := binary.BigEndian.Uint32(hdr0[16:])\n\tsalt2 := binary.BigEndian.Uint32(hdr0[20:])\n\tsaltMatch := salt1 == dec.Header().WALSalt1 \u0026\u0026 salt2 == dec.Header().WALSalt2\n\tif !saltMatch {\n\t\texec.state.truncatePassiveFailed = false\n\t}\n\n\t// Handle edge case where we're at WAL header (WALOffset=32, WALSize=0).\n\t// This can happen when an LTX file represents a state at the beginning of the WAL\n\t// with no frames written yet. We must check this before computing prevWALOffset\n\t// to avoid underflow (32 - 4120 = -4088).\n\t// See: https://github.com/benbjohnson/litestream/issues/900\n\tif info.offset == WALHeaderSize {\n\t\tdb.Logger.Debug(\"verify\", \"saltMatch\", saltMatch, \"atWALHeader\", true)\n\t\tif saltMatch {\n\t\t\tinfo.snapshotting = false\n\t\t\treturn info, nil\n\t\t}\n\t\tinfo.reason = \"wal header salt reset, snapshotting\"\n\t\treturn info, nil\n\t}\n\n\t// If offset is at the beginning of the first page, we can't check for previous page.\n\tprevWALOffset := info.offset - frameSize\n\tdb.Logger.Debug(\"verify\", \"saltMatch\", saltMatch, \"prevWALOffset\", prevWALOffset)\n\n\tif prevWALOffset == WALHeaderSize {\n\t\tif saltMatch { // No writes occurred since last sync, salt still matches\n\t\t\tinfo.snapshotting = false\n\t\t\treturn info, nil\n\t\t}\n\t\t// Salt has changed but we don't know if writes occurred since last sync\n\t\tinfo.reason = \"wal header salt reset, snapshotting\"\n\t\treturn info, nil\n\t} else if prevWALOffset \u003c WALHeaderSize {\n\t\treturn info, fmt.Errorf(\"prev WAL offset is less than the header size: %d\", prevWALOffset)\n\t}\n\n\t// If we can't verify the last page is in the last LTX file, then we need to snapshot.\n\tlastPageMatch, err := db.lastPageMatch(ctx, dec, prevWALOffset, frameSize)\n\tif err != nil {\n\t\treturn info, fmt.Errorf(\"last page match: %w\", err)\n\t} else if !lastPageMatch {\n\t\t// A snapshot must hold every frame not yet in the database file,\n\t\t// including those before the stale offset.\n\t\tinfo.offset = WALHeaderSize\n\t\tinfo.reason = \"last page does not exist in last ltx file, wal overwritten by another process\"\n\t\treturn info, nil\n\t}\n\n\tdb.Logger.Debug(\"verify.2\", \"lastPageMatch\", lastPageMatch)\n\n\t// Salt has changed which could indicate a FULL checkpoint.\n\t// If we have a last page match, then we can assume that the WAL has not been overwritten.\n\tif !saltMatch {\n\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"wal restarted\",\n\t\t\t\"salt1\", salt1,\n\t\t\t\"salt2\", salt2)\n\n\t\tinfo.offset = WALHeaderSize\n\t\tinfo.salt1, info.salt2 = salt1, salt2\n\n\t\tif detected, err := db.detectFullCheckpoint(ctx, [][2]uint32{{salt1, salt2}, {dec.Header().WALSalt1, dec.Header().WALSalt2}}); err != nil {\n\t\t\treturn info, fmt.Errorf(\"detect full checkpoint: %w\", err)\n\t\t} else if detected {\n\t\t\tinfo.reason = \"full or restart checkpoint detected, snapshotting\"\n\t\t} else {\n\t\t\tinfo.snapshotting = false\n\t\t}\n\n\t\treturn info, nil\n\t}\n\n\tinfo.snapshotting = false\n\n\treturn info, nil\n}\n\n// lastPageMatch checks if the last page read in the WAL exists in the last LTX file.\nfunc (db *DB) lastPageMatch(ctx context.Context, dec *ltx.Decoder, prevWALOffset, frameSize int64) (bool, error) {\n\tif prevWALOffset \u003c= WALHeaderSize {\n\t\treturn false, nil\n\t}\n\n\tframe, err := readWALFileAt(db.WALPath(), prevWALOffset, frameSize)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"cannot read last synced wal page: %w\", err)\n\t}\n\tpgno := binary.BigEndian.Uint32(frame[0:])\n\tfsalt1 := binary.BigEndian.Uint32(frame[8:])\n\tfsalt2 := binary.BigEndian.Uint32(frame[12:])\n\tdata := frame[WALFrameHeaderSize:]\n\n\tif fsalt1 != dec.Header().WALSalt1 || fsalt2 != dec.Header().WALSalt2 {\n\t\treturn false, nil\n\t}\n\n\t// Verify that the last page in the WAL exists in the last LTX file.\n\tbuf := make([]byte, dec.Header().PageSize)\n\tfor {\n\t\tvar hdr ltx.PageHeader\n\t\tif err := dec.DecodePage(\u0026hdr, buf); errors.Is(err, io.EOF) {\n\t\t\treturn false, nil // page not found in LTX file\n\t\t} else if err != nil {\n\t\t\treturn false, fmt.Errorf(\"decode ltx page: %w\", err)\n\t\t}\n\n\t\tif pgno != hdr.Pgno {\n\t\t\tcontinue // page number doesn't match\n\t\t}\n\t\tif !bytes.Equal(data, buf) {\n\t\t\tcontinue // page data doesn't match\n\t\t}\n\t\treturn true, nil // Page matches\n\t}\n}\n\n// detectFullCheckpoint attempts to detect checks if a FULL or RESTART checkpoint\n// has occurred and we may have missed some frames.\nfunc (db *DB) detectFullCheckpoint(ctx context.Context, knownSalts [][2]uint32) (bool, error) {\n\twalFile, err := os.Open(db.WALPath())\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"open wal file: %w\", err)\n\t}\n\tdefer walFile.Close()\n\n\tvar lastKnownSalt [2]uint32\n\tif len(knownSalts) \u003e 0 {\n\t\tlastKnownSalt = knownSalts[len(knownSalts)-1]\n\t}\n\n\trd, err := NewWALReader(walFile, db.Logger.With(LogKeySubsystem, LogSubsystemWALReader))\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"new wal reader: %w\", err)\n\t}\n\tm, err := rd.FrameSaltsUntil(ctx, lastKnownSalt)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"frame salts until: %w\", err)\n\t}\n\n\t// Remove known salts from the map.\n\tfor _, salt := range knownSalts {\n\t\tdelete(m, salt)\n\t}\n\n\t// If we have more than one unknown salt, then we have a FULL or RESTART checkpoint.\n\treturn len(m) \u003e= 1, nil\n}\n\ntype syncInfo struct {\n\toffset int64 // end of the previous LTX read\n\tsalt1 uint32\n\tsalt2 uint32\n\tprevCommit uint32\n\tsnapshotting bool // if true, a full snapshot is required\n\treason string // reason for snapshot\n\tclearSyncedToWALEnd bool\n}\n\ntype syncResult struct {\n\torigWALSize int64\n\tnewWALSize int64\n\tsynced bool\n\tlimited bool\n\tsyncedToWALEnd bool\n\tpos *ltx.Pos\n\tl0FileInfo *ltx.FileInfo\n}\n\nfunc (db *DB) applySyncResult(state *syncState, result syncResult) {\n\tstate.lastSyncedWALOffset = result.newWALSize\n\tstate.syncedToWALEnd = result.syncedToWALEnd\n\tif result.pos != nil {\n\t\tdb.pos.Lock()\n\t\tdb.pos.value = result.pos\n\t\tdb.pos.Unlock()\n\t}\n\tif result.l0FileInfo != nil {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tdb.maxLTXFileInfos.m[0] = result.l0FileInfo\n\t\tdb.maxLTXFileInfos.Unlock()\n\t}\n}\n\nfunc (db *DB) newSyncExecutor(ctx context.Context) (*syncExecutor, error) {\n\tdb.mu.Lock()\n\tdefer db.mu.Unlock()\n\n\tif err := db.init(ctx); err != nil {\n\t\treturn nil, err\n\t} else if db.db == nil {\n\t\treturn nil, nil\n\t}\n\n\tpos, err := db.Pos()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"pos: %w\", err)\n\t}\n\n\treturn \u0026syncExecutor{\n\t\tstate: db.syncState,\n\t\tpos: pos,\n\t}, nil\n}\n\nfunc (db *DB) applySyncExecutor(exec *syncExecutor, notify bool) {\n\tif exec == nil {\n\t\treturn\n\t}\n\n\t// Only publish the position if this executor advanced it. Republishing\n\t// the snapshot taken at executor start would clobber concurrent cache\n\t// invalidation (e.g. ResetLocalState) with a stale position.\n\tif exec.posChanged {\n\t\tdb.pos.Lock()\n\t\tpos := exec.pos\n\t\tdb.pos.value = \u0026pos\n\t\tdb.pos.Unlock()\n\t}\n\n\tif exec.l0FileInfo != nil {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tinfo := *exec.l0FileInfo\n\t\tdb.maxLTXFileInfos.m[0] = \u0026info\n\t\tdb.maxLTXFileInfos.Unlock()\n\t}\n\n\tdb.mu.Lock()\n\tdb.syncState = exec.state\n\tif notify \u0026\u0026 exec.synced {\n\t\tclose(db.notify)\n\t\tdb.notify = make(chan struct{})\n\t}\n\tdb.mu.Unlock()\n}\n\nfunc (exec *syncExecutor) applySyncResult(result syncResult) {\n\texec.state.lastSyncedWALOffset = result.newWALSize\n\texec.state.syncedToWALEnd = result.syncedToWALEnd\n\tif result.pos != nil {\n\t\texec.pos = *result.pos\n\t\texec.posChanged = true\n\t}\n\tif result.l0FileInfo != nil {\n\t\tinfo := *result.l0FileInfo\n\t\texec.l0FileInfo = \u0026info\n\t}\n\texec.synced = exec.synced || result.synced\n}\n\n// sync copies pending bytes from the real WAL to LTX.\n// Returns synced=true if an LTX file was created (i.e., there were new pages to sync).\nfunc (db *DB) sync(ctx context.Context, checkpointing bool, exec *syncExecutor, info syncInfo, maxSyncWALBytes int64) (result syncResult, err error) {\n\tresult.newWALSize = exec.state.lastSyncedWALOffset\n\tresult.syncedToWALEnd = exec.state.syncedToWALEnd\n\tif info.clearSyncedToWALEnd {\n\t\tresult.syncedToWALEnd = false\n\t}\n\n\t// Determine the next sequential transaction ID.\n\ttxID := exec.pos.TXID + 1\n\tdb.setSyncDiagPhase(diagPhaseSyncOpenLTX,\n\t\tfunc(s *diagState) {\n\t\t\ts.txID = txID\n\t\t\ts.snapshotting = info.snapshotting\n\t\t\ts.reason = info.reason\n\t\t})\n\n\tfilename := db.LTXPath(0, txID, txID)\n\n\tlogArgs := []any{\n\t\t\"txid\", txID.String(),\n\t\t\"offset\", info.offset,\n\t}\n\tif checkpointing {\n\t\tlogArgs = append(logArgs, \"chkpt\", \"true\")\n\t}\n\tif info.snapshotting {\n\t\tlogArgs = append(logArgs, \"snap\", \"true\")\n\t}\n\tif info.reason != \"\" {\n\t\tlogArgs = append(logArgs, \"reason\", info.reason)\n\t}\n\tdb.Logger.Debug(\"sync\", logArgs...)\n\n\t// Prevent internal checkpoints during sync. Ignore if already in a checkpoint.\n\tif !checkpointing {\n\t\tdb.chkMu.RLock()\n\t\tdefer db.chkMu.RUnlock()\n\t}\n\n\tfi, err := db.f.Stat()\n\tif err != nil {\n\t\treturn result, err\n\t}\n\tmode := fi.Mode()\n\tcommit := uint32(fi.Size() / int64(db.pageSize))\n\n\twalFile, err := os.Open(db.WALPath())\n\tif err != nil {\n\t\treturn result, err\n\t}\n\tdefer walFile.Close()\n\n\twalReaderLogger := db.Logger.With(LogKeySubsystem, LogSubsystemWALReader)\n\tvar rd *WALReader\n\tif info.offset == WALHeaderSize {\n\t\tif rd, err = NewWALReader(walFile, walReaderLogger); err != nil {\n\t\t\treturn result, fmt.Errorf(\"new wal reader: %w\", err)\n\t\t}\n\t} else {\n\t\t// If we cannot verify the previous frame\n\t\tvar pfmError *PrevFrameMismatchError\n\t\tif rd, err = NewWALReaderWithOffset(ctx, walFile, info.offset, info.salt1, info.salt2, walReaderLogger); errors.As(err, \u0026pfmError) {\n\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"prev frame mismatch, snapshotting\", \"err\", pfmError.Err)\n\t\t\tinfo.offset = WALHeaderSize\n\t\t\tif rd, err = NewWALReader(walFile, walReaderLogger); err != nil {\n\t\t\t\treturn result, fmt.Errorf(\"new wal reader, after reset\")\n\t\t\t}\n\t\t} else if err != nil {\n\t\t\treturn result, fmt.Errorf(\"new wal reader with offset: %w\", err)\n\t\t}\n\t}\n\n\t// Build a mapping of changed page numbers and their latest content.\n\tdb.setSyncDiagPhase(diagPhaseSyncPageMap,\n\t\tfunc(s *diagState) {\n\t\t\ts.txID = txID\n\t\t\ts.snapshotting = info.snapshotting\n\t\t\ts.reason = info.reason\n\t\t})\n\tif info.snapshotting {\n\t\tmaxSyncWALBytes = 0\n\t}\n\tpageMap, maxOffset, walCommit, limited, err := rd.pageMap(ctx, maxSyncWALBytes)\n\tif err != nil {\n\t\treturn result, fmt.Errorf(\"page map: %w\", err)\n\t}\n\tresult.limited = limited\n\tif walCommit \u003e 0 {\n\t\tcommit = walCommit\n\t}\n\tvar sz int64\n\tif maxOffset \u003e 0 {\n\t\tsz = maxOffset - info.offset\n\t}\n\tassert(sz \u003e= 0, fmt.Sprintf(\"wal size must be positive: sz=%d, maxOffset=%d, info.offset=%d\", sz, maxOffset, info.offset))\n\tdb.setSyncDiagPhase(diagPhaseSyncPrepareLTX,\n\t\tfunc(s *diagState) {\n\t\t\ts.txID = txID\n\t\t\ts.walSize = sz\n\t\t\ts.snapshotting = info.snapshotting\n\t\t\ts.reason = info.reason\n\t\t})\n\n\t// Track total WAL bytes synced.\n\tif sz \u003e 0 {\n\t\tdb.totalWALBytesCounter.Add(float64(sz))\n\t}\n\n\t// Exit if we have no new WAL pages and we aren't snapshotting.\n\tif !info.snapshotting \u0026\u0026 sz == 0 {\n\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"sync: skip\", \"reason\", \"no new wal pages\")\n\t\treturn result, nil\n\t}\n\n\ttmpFilename := filename + \".tmp\"\n\tif err := internal.MkdirAll(filepath.Dir(tmpFilename), db.dirInfo); err != nil {\n\t\tif isDiskFullError(err) {\n\t\t\treturn result, NewLTXError(\"stage-mkdir\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t}\n\t\treturn result, err\n\t}\n\n\tltxFile, err := db.openLTXFile(tmpFilename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)\n\tif err != nil {\n\t\tif isDiskFullError(err) {\n\t\t\treturn result, NewLTXError(\"stage-open\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t}\n\t\treturn result, fmt.Errorf(\"open temp ltx file: %w\", err)\n\t}\n\tdefer func() { _ = os.Remove(tmpFilename) }()\n\tdefer func() { _ = ltxFile.Close() }()\n\n\tuid, gid := internal.Fileinfo(db.fileInfo)\n\t_ = os.Chown(tmpFilename, uid, gid)\n\n\tdb.Logger.Log(ctx, internal.LevelTrace, \"encode header\",\n\t\t\"txid\", txID.String(),\n\t\t\"commit\", commit,\n\t\t\"walOffset\", info.offset,\n\t\t\"walSize\", sz,\n\t\t\"salt1\", rd.salt1,\n\t\t\"salt2\", rd.salt2)\n\n\ttimestamp := time.Now()\n\tenc, err := ltx.NewEncoder(ltxFile)\n\tif err != nil {\n\t\treturn result, fmt.Errorf(\"new ltx encoder: %w\", err)\n\t}\n\tif err := enc.EncodeHeader(ltx.Header{\n\t\tVersion: ltx.Version,\n\t\tFlags: ltx.HeaderFlagNoChecksum,\n\t\tPageSize: uint32(db.pageSize),\n\t\tCommit: commit,\n\t\tMinTXID: txID,\n\t\tMaxTXID: txID,\n\t\tTimestamp: timestamp.UnixMilli(),\n\t\tWALOffset: info.offset,\n\t\tWALSize: sz,\n\t\tWALSalt1: rd.salt1,\n\t\tWALSalt2: rd.salt2,\n\t}); err != nil {\n\t\tif isDiskFullError(err) {\n\t\t\treturn result, NewLTXError(\"stage-write\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t}\n\t\treturn result, fmt.Errorf(\"encode ltx header: %w\", err)\n\t}\n\n\t// If we need a full snapshot, then copy from the database \u0026 WAL.\n\t// Otherwise, just copy incrementally from the WAL.\n\tif info.snapshotting {\n\t\tdb.setSyncDiagPhase(diagPhaseWriteLTXFromDB,\n\t\t\tfunc(s *diagState) {\n\t\t\t\ts.txID = txID\n\t\t\t\ts.walSize = sz\n\t\t\t\ts.snapshotting = true\n\t\t\t\ts.reason = info.reason\n\t\t\t})\n\t\tif err := db.writeLTXFromDB(ctx, enc, walFile, commit, pageMap); err != nil {\n\t\t\tif isDiskFullError(err) {\n\t\t\t\treturn result, NewLTXError(\"stage-write\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t\t}\n\t\t\treturn result, fmt.Errorf(\"write ltx from db: %w\", err)\n\t\t}\n\t} else {\n\t\tdb.setSyncDiagPhase(diagPhaseWriteLTXFromWAL,\n\t\t\tfunc(s *diagState) {\n\t\t\t\ts.txID = txID\n\t\t\t\ts.walSize = sz\n\t\t\t\ts.snapshotting = false\n\t\t\t\ts.reason = info.reason\n\t\t\t})\n\t\tif err := db.writeLTXFromWAL(ctx, enc, walFile, info.prevCommit, commit, pageMap); err != nil {\n\t\t\tif isDiskFullError(err) {\n\t\t\t\treturn result, NewLTXError(\"stage-write\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t\t}\n\t\t\treturn result, fmt.Errorf(\"write ltx from wal: %w\", err)\n\t\t}\n\t}\n\n\t// Encode final trailer to the end of the LTX file.\n\tdb.setSyncDiagPhase(diagPhaseCloseLTX, func(s *diagState) {\n\t\ts.txID = txID\n\t\ts.walSize = sz\n\t})\n\tif err := enc.Close(); err != nil {\n\t\tif isDiskFullError(err) {\n\t\t\treturn result, NewLTXError(\"stage-write\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t}\n\t\treturn result, fmt.Errorf(\"close ltx encoder: %w\", err)\n\t}\n\n\t// Sync \u0026 close LTX file.\n\tdb.setSyncDiagPhase(diagPhaseFsyncLTX, func(s *diagState) {\n\t\ts.txID = txID\n\t\ts.walSize = sz\n\t})\n\tif err := ltxFile.Sync(); err != nil {\n\t\tif isDiskFullError(err) {\n\t\t\treturn result, NewLTXError(\"stage-sync\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t}\n\t\treturn result, fmt.Errorf(\"sync ltx file: %w\", err)\n\t}\n\tif err := ltxFile.Close(); err != nil {\n\t\tif isDiskFullError(err) {\n\t\t\treturn result, NewLTXError(\"stage-close\", tmpFilename, 0, uint64(txID), uint64(txID), fmt.Errorf(\"%w: %w\", ErrDiskFull, err))\n\t\t}\n\t\treturn result, fmt.Errorf(\"close ltx file: %w\", err)\n\t}\n\n\t// Atomically rename file to final path.\n\tdb.setSyncDiagPhase(diagPhaseRenameLTX, func(s *diagState) {\n\t\ts.txID = txID\n\t\ts.walSize = sz\n\t})\n\tif err := os.Rename(tmpFilename, filename); err != nil {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tdelete(db.maxLTXFileInfos.m, 0) // clear cache if in unknown state\n\t\tdb.maxLTXFileInfos.Unlock()\n\t\tdb.invalidatePosCache()\n\t\treturn result, fmt.Errorf(\"rename ltx file: %w\", err)\n\t}\n\tif err := internal.FsyncDir(filepath.Dir(filename)); err != nil {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tdelete(db.maxLTXFileInfos.m, 0) // clear cache if in unknown state\n\t\tdb.maxLTXFileInfos.Unlock()\n\t\tdb.invalidatePosCache()\n\t\treturn result, fmt.Errorf(\"sync ltx dir: %w\", err)\n\t}\n\n\tresult.synced = true\n\tresult.l0FileInfo = \u0026ltx.FileInfo{\n\t\tLevel: 0,\n\t\tMinTXID: txID,\n\t\tMaxTXID: txID,\n\t\tCreatedAt: time.Now(),\n\t\tSize: enc.N(),\n\t}\n\n\tencPos := enc.PostApplyPos()\n\tresult.pos = \u0026encPos\n\n\t// Track the logical end of WAL content for checkpoint decisions.\n\t// This is the WALOffset + WALSize from the LTX we just created.\n\t// Using this instead of file size prevents issue #997 where stale\n\t// frames with old salt values cause perpetual checkpoint triggering.\n\tfinalOffset := info.offset + sz\n\tresult.newWALSize = finalOffset\n\n\t// Track if we synced to the exact end of the WAL file.\n\t// This is used by verify() to distinguish expected checkpoint truncation\n\t// from unexpected external WAL modifications. See issue #927.\n\tif walSize, err := db.walFileSize(); err == nil {\n\t\tresult.syncedToWALEnd = finalOffset == walSize\n\t} else {\n\t\tresult.syncedToWALEnd = false\n\t}\n\tdb.setSyncDiagPhase(diagPhaseSyncComplete,\n\t\tfunc(s *diagState) {\n\t\t\ts.txID = txID\n\t\t\ts.walSize = sz\n\t\t\ts.lastSyncedWALOffset = finalOffset\n\t\t\ts.snapshotting = info.snapshotting\n\t\t\ts.reason = info.reason\n\t\t})\n\n\tdb.Logger.Debug(\"db sync\", \"status\", \"ok\")\n\n\treturn result, nil\n}\n\nfunc (db *DB) writeLTXFromDB(ctx context.Context, enc *ltx.Encoder, walFile *os.File, commit uint32, pageMap map[uint32]int64) error {\n\tlockPgno := ltx.LockPgno(uint32(db.pageSize))\n\tdata := make([]byte, db.pageSize)\n\n\tfor pgno := uint32(1); pgno \u003c= commit; pgno++ {\n\t\tif pgno == lockPgno {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check if the caller has canceled during processing.\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\treturn context.Cause(ctx)\n\t\tdefault:\n\t\t}\n\n\t\t// If page exists in the WAL, read from there.\n\t\tif offset, ok := pageMap[pgno]; ok {\n\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"encode page from wal\", \"txid\", enc.Header().MinTXID, \"offset\", offset, \"pgno\", pgno, \"type\", \"db+wal\")\n\n\t\t\tif n, err := walFile.ReadAt(data, offset+WALFrameHeaderSize); err != nil {\n\t\t\t\treturn fmt.Errorf(\"read page %d @ %d: %w\", pgno, offset, err)\n\t\t\t} else if n != len(data) {\n\t\t\t\treturn fmt.Errorf(\"short read page %d @ %d\", pgno, offset)\n\t\t\t}\n\n\t\t\tif err := enc.EncodePage(ltx.PageHeader{Pgno: pgno}, data); err != nil {\n\t\t\t\treturn fmt.Errorf(\"encode ltx frame (pgno=%d): %w\", pgno, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\toffset := int64(pgno-1) * int64(db.pageSize)\n\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"encode page from database\", \"offset\", offset, \"pgno\", pgno)\n\n\t\t// Otherwise read directly from the database file.\n\t\tif _, err := db.f.ReadAt(data, offset); err != nil {\n\t\t\treturn fmt.Errorf(\"read database page %d: %w\", pgno, err)\n\t\t}\n\t\tif err := enc.EncodePage(ltx.PageHeader{Pgno: pgno}, data); err != nil {\n\t\t\treturn fmt.Errorf(\"encode ltx frame (pgno=%d): %w\", pgno, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (db *DB) writeLTXFromWAL(ctx context.Context, enc *ltx.Encoder, walFile *os.File, prevCommit, commit uint32, pageMap map[uint32]int64) error {\n\t// Create an ordered list of page numbers since the LTX encoder requires it.\n\tpgnos := make([]uint32, 0, len(pageMap))\n\tfor pgno := range pageMap {\n\t\tpgnos = append(pgnos, pgno)\n\t}\n\tlockPgno := ltx.LockPgno(uint32(db.pageSize))\n\tif commit \u003e prevCommit {\n\t\twalPgnoN := len(pgnos)\n\t\tfor pgno := prevCommit + 1; pgno \u003c= commit; pgno++ {\n\t\t\tif pgno == lockPgno {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif _, ok := pageMap[pgno]; ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpgnos = append(pgnos, pgno)\n\t\t}\n\t\tif growthPgnoN := len(pgnos) - walPgnoN; growthPgnoN \u003e 0 {\n\t\t\tdb.Logger.Debug(\"filling wal growth pages from database\",\n\t\t\t\t\"txid\", enc.Header().MinTXID,\n\t\t\t\t\"n\", growthPgnoN,\n\t\t\t\t\"prev_commit\", prevCommit,\n\t\t\t\t\"commit\", commit)\n\t\t}\n\t}\n\tslices.Sort(pgnos)\n\n\tdata := make([]byte, db.pageSize)\n\tfor _, pgno := range pgnos {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\treturn context.Cause(ctx)\n\t\tdefault:\n\t\t}\n\t\tif offset, ok := pageMap[pgno]; ok {\n\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"encode page from wal\", \"txid\", enc.Header().MinTXID, \"offset\", offset, \"pgno\", pgno, \"type\", \"walonly\")\n\n\t\t\tif n, err := walFile.ReadAt(data, offset+WALFrameHeaderSize); err != nil {\n\t\t\t\treturn fmt.Errorf(\"read page %d @ %d: %w\", pgno, offset, err)\n\t\t\t} else if n != len(data) {\n\t\t\t\treturn fmt.Errorf(\"short read page %d @ %d\", pgno, offset)\n\t\t\t}\n\t\t} else {\n\t\t\toffset := int64(pgno-1) * int64(db.pageSize)\n\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"encode page from database\", \"txid\", enc.Header().MinTXID, \"offset\", offset, \"pgno\", pgno, \"type\", \"walgrowth\")\n\n\t\t\tif _, err := db.f.ReadAt(data, offset); err != nil {\n\t\t\t\treturn fmt.Errorf(\"read database page %d: %w\", pgno, err)\n\t\t\t}\n\t\t}\n\n\t\tif err := enc.EncodePage(ltx.PageHeader{Pgno: pgno}, data); err != nil {\n\t\t\treturn fmt.Errorf(\"encode ltx frame (pgno=%d): %w\", pgno, err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Checkpoint performs a checkpoint on the WAL file.\nfunc (db *DB) Checkpoint(ctx context.Context, mode string) (err error) {\n\tif err := db.lockExec(ctx); err != nil {\n\t\treturn err\n\t}\n\tdefer db.execSem.Release(1)\n\tdb.beginSyncDiag(diagOpCheckpoint)\n\tdefer func() { db.finishSyncDiag(err) }()\n\n\texec, err := db.newSyncExecutor(ctx)\n\tif err != nil {\n\t\treturn err\n\t} else if exec == nil {\n\t\treturn nil\n\t}\n\tdefer db.applySyncExecutor(exec, true)\n\n\t_, err = db.checkpointWithExecutor(ctx, mode, exec)\n\treturn err\n}\n\n// checkpoint performs a checkpoint on the WAL file and initializes a\n// new shadow WAL file.\nfunc (db *DB) checkpoint(ctx context.Context, mode string, state *syncState) error {\n\tpos, err := db.Pos()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"pos: %w\", err)\n\t}\n\n\texec := \u0026syncExecutor{\n\t\tstate: *state,\n\t\tpos: pos,\n\t}\n\tif _, err := db.checkpointWithExecutor(ctx, mode, exec); err != nil {\n\t\treturn err\n\t}\n\n\t*state = exec.state\n\tdb.pos.Lock()\n\tpos = exec.pos\n\tdb.pos.value = \u0026pos\n\tdb.pos.Unlock()\n\tif exec.l0FileInfo != nil {\n\t\tdb.maxLTXFileInfos.Lock()\n\t\tinfo := *exec.l0FileInfo\n\t\tdb.maxLTXFileInfos.m[0] = \u0026info\n\t\tdb.maxLTXFileInfos.Unlock()\n\t}\n\treturn nil\n}\n\n// checkpointWithExecutor performs a checkpoint in the given mode and reports\n// whether the checkpoint restarted the WAL. It returns false without\n// checkpointing when the checkpoint lock is held by an in-progress snapshot.\nfunc (db *DB) checkpointWithExecutor(ctx context.Context, mode string, exec *syncExecutor) (walRestarted bool, err error) {\n\texec.checkpointAttempted = false\n\tdb.setSyncDiagPhase(diagPhaseCheckpointLock,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\t// Try getting a checkpoint lock, will fail during snapshots. Skipping is\n\t// safe since the next sync retries.\n\tif !db.chkMu.TryLock() {\n\t\tif mode == CheckpointModeTruncate {\n\t\t\tdb.Logger.Info(\"checkpoint skipped, snapshot in progress\", \"mode\", mode)\n\t\t} else {\n\t\t\tdb.Logger.Log(ctx, internal.LevelTrace, \"checkpoint skipped, snapshot in progress\", \"mode\", mode)\n\t\t}\n\t\treturn false, nil\n\t}\n\tdefer db.chkMu.Unlock()\n\texec.checkpointAttempted = true\n\n\t// Read WAL header before checkpoint to check if it has been restarted.\n\tdb.setSyncDiagPhase(diagPhaseCheckpointReadWALHeader,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\thdr, err := readWALHeader(db.WALPath())\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Copy end of WAL before checkpoint to copy as much as possible.\n\tdb.setSyncDiagPhase(diagPhaseCheckpointCopyBefore,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\tresult, err := db.verifyAndSyncWithExecutor(ctx, true, exec, 0)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"cannot copy wal before checkpoint: %w\", err)\n\t}\n\texec.applySyncResult(result)\n\n\tvar barrierTx *sql.Tx\n\tif mode == CheckpointModePassive {\n\t\tbarrierTx, err = db.db.BeginTx(ctx, nil)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"begin passive checkpoint barrier: %w\", err)\n\t\t}\n\t\tdefer func() {\n\t\t\tif barrierTx != nil {\n\t\t\t\t_ = rollback(barrierTx)\n\t\t\t}\n\t\t}()\n\n\t\tif _, err := barrierTx.ExecContext(ctx, `INSERT INTO _litestream_lock (id) VALUES (1);`); err != nil {\n\t\t\treturn false, fmt.Errorf(\"_litestream_lock: %w\", err)\n\t\t}\n\n\t\tresult, err = db.verifyAndSyncWithExecutor(ctx, true, exec, 0)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"cannot seal wal before passive checkpoint: %w\", err)\n\t\t}\n\t\texec.applySyncResult(result)\n\t}\n\n\tframeSize := int64(db.pageSize + WALFrameHeaderSize)\n\tpreCheckpointFrameN := 0\n\tif exec.state.lastSyncedWALOffset \u003e WALHeaderSize {\n\t\tpreCheckpointFrameN = int((exec.state.lastSyncedWALOffset - WALHeaderSize) / frameSize)\n\t}\n\n\t// Execute checkpoint and immediately issue a write to the WAL to ensure\n\t// a new page is written.\n\tdb.setSyncDiagPhase(diagPhaseCheckpointExec,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\twalFrameN, err := db.execCheckpoint(ctx, mode)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tif barrierTx != nil {\n\t\tif err = rollback(barrierTx); err != nil {\n\t\t\treturn false, fmt.Errorf(\"rollback passive checkpoint barrier: %w\", err)\n\t\t}\n\t\tbarrierTx = nil\n\t}\n\n\tif err = db.bumpLitestreamSeq(ctx); err != nil {\n\t\treturn false, fmt.Errorf(\"bump litestream seq: %w\", err)\n\t}\n\n\t// If WAL hasn't been restarted, exit.\n\tdb.setSyncDiagPhase(diagPhaseCheckpointVerifyRestart,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\tother, err := readWALHeader(db.WALPath())\n\tif err != nil {\n\t\treturn false, err\n\t} else if bytes.Equal(hdr, other) {\n\t\texec.state.syncedSinceCheckpoint = false\n\t\treturn false, nil\n\t}\n\texec.state.truncatePassiveFailed = false\n\n\tif mode == CheckpointModePassive {\n\t\tresult, err = db.verifyAndSyncWithExecutor(ctx, true, exec, 0)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"cannot copy wal after passive checkpoint: %w\", err)\n\t\t}\n\t\texec.applySyncResult(result)\n\t\texec.state.syncedSinceCheckpoint = false\n\t\treturn true, nil\n\t}\n\n\t// A successful TRUNCATE checkpoint always reports zero frames because\n\t// the WAL is reset before the counters are read, so the comparison\n\t// below can never prove that no commits landed between the sealed\n\t// sync and the checkpoint taking the writer lock. Those commits are\n\t// backfilled and truncated unseen, so TRUNCATE must take the boundary\n\t// snapshot unconditionally.\n\tif mode != CheckpointModeTruncate \u0026\u0026 walFrameN \u003c= preCheckpointFrameN {\n\t\tresult, err = db.verifyAndSyncWithExecutor(ctx, true, exec, 0)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"cannot copy wal after checkpoint: %w\", err)\n\t\t}\n\t\texec.applySyncResult(result)\n\t\texec.state.syncedSinceCheckpoint = false\n\t\treturn true, nil\n\t}\n\n\t// Start a transaction. This will be promoted immediately after.\n\tdb.setSyncDiagPhase(diagPhaseCheckpointSnapshotBoundaryLock,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\ttx, err := db.db.BeginTx(ctx, nil)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"begin: %w\", err)\n\t}\n\tdefer func() { _ = rollback(tx) }()\n\n\t// Insert into the lock table to promote to a write tx. The lock table\n\t// insert will never actually occur because our tx will be rolled back,\n\t// however, it will ensure our tx grabs the write lock. Unfortunately,\n\t// we can't call \"BEGIN IMMEDIATE\" as we are already in a transaction.\n\tif _, err := tx.ExecContext(ctx, `INSERT INTO _litestream_lock (id) VALUES (1);`); err != nil {\n\t\treturn false, fmt.Errorf(\"_litestream_lock: %w\", err)\n\t}\n\n\t// Copy anything that may have occurred after the checkpoint.\n\tdb.setSyncDiagPhase(diagPhaseCheckpointSnapshotBoundary,\n\t\tfunc(s *diagState) {\n\t\t\ts.checkpointMode = mode\n\t\t\ts.lastSyncedWALOffset = exec.state.lastSyncedWALOffset\n\t\t})\n\tsnapshotInfo := syncInfo{\n\t\toffset: WALHeaderSize,\n\t\tsalt1: binary.BigEndian.Uint32(other[16:]),\n\t\tsalt2: binary.BigEndian.Uint32(other[20:]),\n\t\tsnapshotting: true,\n\t\treason: \"checkpoint boundary snapshot\",\n\t}\n\tresult, err = db.sync(ctx, true, exec, snapshotInfo, 0)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"cannot snapshot after checkpoint: %w\", err)\n\t}\n\texec.applySyncResult(result)\n\n\t// Release write lock before exiting.\n\t// Use rollback() helper for consistency with releaseReadLock() and the\n\t// defer above. See issue #934.\n\tif err := rollback(tx); err != nil {\n\t\treturn false, fmt.Errorf(\"rollback post-checkpoint tx: %w\", err)\n\t}\n\n\texec.state.syncedSinceCheckpoint = false\n\treturn true, nil\n}\n\n// execCheckpoint issues a wal_checkpoint PRAGMA in the given mode and returns\n// the number of frames in the WAL as reported by the checkpoint.\nfunc (db *DB) execCheckpoint(ctx context.Context, mode string) (walFrameN int, err error) {\n\t// Ignore if there is no underlying database.\n\tif db.db == nil {\n\t\treturn 0, nil\n\t}\n\n\t// Track checkpoint metrics.\n\tt := time.Now()\n\tdefer func() {\n\t\tlabels := prometheus.Labels{\"mode\": mode}\n\t\tdb.checkpointNCounterVec.With(labels).Inc()\n\t\tif err != nil {\n\t\t\tdb.checkpointErrorNCounterVec.With(labels).Inc()\n\t\t}\n\t\taddDurationToCounter(db.checkpointSecondsCounterVec.With(labels), time.Since(t))\n\t}()\n\n\t// Ensure the read lock has been removed before issuing a checkpoint.\n\t// We defer the re-acquire to ensure it occurs even on an early return.\n\tif err := db.releaseReadLock(); err != nil {\n\t\treturn 0, fmt.Errorf(\"release read lock: %w\", err)\n\t}\n\tdefer func() { _ = db.acquireReadLock(ctx) }()\n\n\t// A non-forced checkpoint is issued as \"PASSIVE\". This will only checkpoint\n\t// if there are not pending transactions. A forced checkpoint (\"RESTART\")\n\t// will wait for pending transactions to end \u0026 block new transactions before\n\t// forcing the checkpoint and restarting the WAL.\n\t//\n\t// See: https://www.sqlite.org/pragma.html#pragma_wal_checkpoint\n\trawsql := `PRAGMA wal_checkpoint(` + mode + `);`\n\n\tvar row [3]int\n\tif err := db.db.QueryRowContext(ctx, rawsql).Scan(\u0026row[0], \u0026row[1], \u0026row[2]); err != nil {\n\t\treturn 0, err\n\t}\n\tdb.Logger.Debug(\"checkpoint\", \"mode\", mode, \"result\", fmt.Sprintf(\"%d,%d,%d\", row[0], row[1], row[2]))\n\n\t// Reacquire the read lock immediately after the checkpoint.\n\tif err := db.acquireReadLock(ctx); err != nil {\n\t\treturn 0, fmt.Errorf(\"reacquire read lock: %w\", err)\n\t}\n\n\treturn row[1], nil\n}\n\ntype snapshotReadPosition struct {\n\tpos ltx.Pos\n\tpageSize int\n\twalEndOffset int64\n\tdb *DB\n\tcloseOnce sync.Once\n}\n\nfunc (p *snapshotReadPosition) close() {\n\tp.closeOnce.Do(func() { p.db.chkMu.RUnlock() })\n}\n\ntype snapshotReadCloser struct {\n\t*io.PipeReader\n\tpos *snapshotReadPosition\n}\n\nfunc (r *snapshotReadCloser) Close() error {\n\tdefer r.pos.close()\n\treturn r.PipeReader.Close()\n}\n\n// SnapshotReader returns the current position of the database \u0026 a reader that contains a full database snapshot.\n// Internal checkpoints remain disabled until the reader reaches EOF or is\n// closed. Callers must close readers they do not fully consume; abandoning a\n// reader blocks checkpoints indefinitely.\nfunc (db *DB) SnapshotReader(ctx context.Context) (ltx.Pos, io.ReadCloser, error) {\n\tpos, err := db.snapshotPosition(ctx)\n\tif err != nil {\n\t\treturn ltx.Pos{}, nil, err\n\t}\n\n\tr, err := db.snapshotReader(ctx, pos)\n\tif err != nil {\n\t\tpos.close()\n\t\treturn pos.pos, nil, err\n\t}\n\treturn pos.pos, r, nil\n}\n\nfunc (db *DB) snapshotPosition(ctx context.Context) (*snapshotReadPosition, error) {\n\tif err := db.lockExec(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\tdefer db.execSem.Release(1)\n\n\tpageSize := db.PageSize()\n\tpos, err := db.Pos()\n\n\tif pageSize == 0 {\n\t\tdb.Logger.Debug(\"page size not initialized yet\", \"pageSize\", 0)\n\t\treturn nil, \u0026DBNotReadyError{Reason: \"page size not initialized\"}\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"pos: %w\", err)\n\t}\n\n\twalEndOffset, err := db.snapshotWALEndOffset(pos)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif walEndOffset \u003c WALHeaderSize {\n\t\twalEndOffset = WALHeaderSize\n\t}\n\n\t// Acquire the checkpoint read lock while the executor semaphore is still\n\t// held (the deferred release runs after this function returns). Every\n\t// checkpoint takes chkMu under execSem, so this handoff guarantees no\n\t// checkpoint can run between capturing pos and locking chkMu — the\n\t// snapshot always matches the advertised position.\n\tdb.chkMu.RLock()\n\treturn \u0026snapshotReadPosition{\n\t\tpos: pos,\n\t\tpageSize: pageSize,\n\t\twalEndOffset: walEndOffset,\n\t\tdb: db,\n\t}, nil\n}\n\n// snapshotWALEndOffset returns the WAL offset a snapshot may read up to for\n// the given position. db.syncState is read without db.mu because every writer\n// mutates it while holding execSem, which the caller also holds.\nfunc (db *DB) snapshotWALEndOffset(pos ltx.Pos) (int64, error) {\n\tif db.syncState.lastSyncedWALOffset \u003e 0 {\n\t\treturn db.syncState.lastSyncedWALOffset, nil\n\t}\n\tif pos.TXID == 0 {\n\t\treturn WALHeaderSize, nil\n\t}\n\n\tltxPath := db.LTXPath(0, pos.TXID, pos.TXID)\n\tf, err := os.Open(ltxPath)\n\tif err != nil {\n\t\treturn 0, NewLTXError(\"open\", ltxPath, 0, uint64(pos.TXID), uint64(pos.TXID), err)\n\t}\n\tdefer func() { _ = f.Close() }()\n\n\tdec := ltx.NewDecoder(f)\n\tif err := dec.DecodeHeader(); err != nil {\n\t\treturn 0, NewLTXError(\"decode\", ltxPath, 0, uint64(pos.TXID), uint64(pos.TXID), fmt.Errorf(\"%w: %w\", ErrLTXCorrupted, err))\n\t}\n\n\t// Compare WAL headers. If the WAL was restarted since this LTX file was\n\t// written, its salts no longer match and its recorded extent does not\n\t// apply to the current WAL.\n\thdr, err := readWALHeader(db.WALPath())\n\tif os.IsNotExist(err) || errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {\n\t\treturn WALHeaderSize, nil\n\t} else if err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot read wal header: %w\", err)\n\t}\n\tsalt1 := binary.BigEndian.Uint32(hdr[16:])\n\tsalt2 := binary.BigEndian.Uint32(hdr[20:])\n\tif salt1 != dec.Header().WALSalt1 || salt2 != dec.Header().WALSalt2 {\n\t\treturn WALHeaderSize, nil\n\t}\n\n\treturn dec.Header().WALOffset + dec.Header().WALSize, nil\n}\n\nfunc (db *DB) snapshotReader(ctx context.Context, pos *snapshotReadPosition) (io.ReadCloser, error) {\n\tdb.Logger.Debug(\"snapshot\", \"txid\", pos.pos.TXID.String(), \"walEndOffset\", pos.walEndOffset)\n\n\t// TODO(ltx): Read database size from database header.\n\n\tfi, err := db.f.Stat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcommit := uint32(fi.Size() / int64(pos.pageSize))\n\n\t// Execute encoding in a separate goroutine so the caller can initialize before reading.\n\tpr, pw := io.Pipe()\n\tgo func() {\n\t\tdefer pos.close()\n\n\t\twalFile, err := os.Open(db.WALPath())\n\t\tif err != nil {\n\t\t\tpw.CloseWithError(err)\n\t\t\treturn\n\t\t}\n\t\tdefer walFile.Close()\n\n\t\trd, err := NewWALReader(walFile, db.Logger.With(LogKeySubsystem, LogSubsystemWALReader))\n\t\tif err != nil {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"new wal reader: %w\", err))\n\t\t\treturn\n\t\t}\n\n\t\t// Build a mapping of changed page numbers and their latest content.\n\t\tmaxBytes := pos.walEndOffset - WALHeaderSize\n\t\tpageMap := make(map[uint32]int64)\n\t\tvar maxOffset int64\n\t\tvar walCommit uint32\n\t\tif maxBytes \u003e 0 {\n\t\t\tpageMap, maxOffset, walCommit, _, err = rd.pageMap(ctx, maxBytes)\n\t\t\tif err != nil {\n\t\t\t\tpw.CloseWithError(fmt.Errorf(\"page map: %w\", err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif walCommit \u003e 0 {\n\t\t\tcommit = walCommit\n\t\t}\n\n\t\tif maxOffset \u003e pos.walEndOffset {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"snapshot wal read exceeded bound: max offset %d \u003e end offset %d\", maxOffset, pos.walEndOffset))\n\t\t\treturn\n\t\t}\n\t\twalOffset, walSize := snapshotHeaderWALRange(maxOffset, int64(WALFrameHeaderSize+pos.pageSize))\n\n\t\tdb.Logger.Debug(\"encode snapshot header\",\n\t\t\t\"txid\", pos.pos.TXID.String(),\n\t\t\t\"commit\", commit,\n\t\t\t\"walOffset\", walOffset,\n\t\t\t\"walSize\", walSize,\n\t\t\t\"walEndOffset\", pos.walEndOffset,\n\t\t\t\"salt1\", rd.salt1,\n\t\t\t\"salt2\", rd.salt2)\n\n\t\tenc, err := ltx.NewEncoder(pw)\n\t\tif err != nil {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"new ltx encoder: %w\", err))\n\t\t\treturn\n\t\t}\n\t\tif err := enc.EncodeHeader(ltx.Header{\n\t\t\tVersion: ltx.Version,\n\t\t\tFlags: ltx.HeaderFlagNoChecksum,\n\t\t\tPageSize: uint32(pos.pageSize),\n\t\t\tCommit: commit,\n\t\t\tMinTXID: 1,\n\t\t\tMaxTXID: pos.pos.TXID,\n\t\t\tTimestamp: time.Now().UnixMilli(),\n\t\t\tWALOffset: walOffset,\n\t\t\tWALSize: walSize,\n\t\t\tWALSalt1: rd.salt1,\n\t\t\tWALSalt2: rd.salt2,\n\t\t}); err != nil {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"encode ltx snapshot header: %w\", err))\n\t\t\treturn\n\t\t}\n\n\t\tif err := db.writeLTXFromDB(ctx, enc, walFile, commit, pageMap); err != nil {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"write snapshot ltx: %w\", err))\n\t\t\treturn\n\t\t}\n\n\t\tif err := enc.Close(); err != nil {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"close ltx snapshot encoder: %w\", err))\n\t\t\treturn\n\t\t}\n\t\t_ = pw.Close()\n\t}()\n\n\treturn \u0026snapshotReadCloser{PipeReader: pr, pos: pos}, nil\n}\n\nfunc snapshotHeaderWALRange(maxOffset, frameSize int64) (offset, size int64) {\n\tif maxOffset \u003c= WALHeaderSize || frameSize \u003c= 0 {\n\t\treturn WALHeaderSize, 0\n\t}\n\toffset = max(maxOffset-frameSize, WALHeaderSize)\n\treturn offset, maxOffset - offset\n}\n\n// Compact performs a compaction of the LTX file at the previous level into dstLevel.\n// Returns metadata for the newly written compaction file. Returns ErrNoCompaction\n// if no new files are available to be compacted.\nfunc (db *DB) Compact(ctx context.Context, dstLevel int) (*ltx.FileInfo, error) {\n\tinfo, err := db.compactor.Compact(ctx, dstLevel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If this is L1, clean up L0 files using the time-based retention policy.\n\tif dstLevel == 1 {\n\t\tif err := db.EnforceL0RetentionByTime(ctx); err != nil {\n\t\t\t// Don't log context cancellation errors during shutdown\n\t\t\tif !isShutdownError(ctx, err) {\n\t\t\t\tdb.Logger.Error(\"enforce L0 time retention\", \"error\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn info, nil\n}\n\n// Snapshot writes a snapshot to the replica for the current database position.\n// It always writes, even when a snapshot already exists at the current\n// position, so operators can force a re-upload (replicate -force-snapshot).\n// Callers that want to skip duplicates check first, as Store.CompactDB does.\nfunc (db *DB) Snapshot(ctx context.Context) (*ltx.FileInfo, error) {\n\tpos, r, err := db.SnapshotReader(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer func() { _ = r.Close() }()\n\n\tinfo, err := db.Replica.Client.WriteLTXFile(ctx, SnapshotLevel, 1, pos.TXID, r)\n\tif err != nil {\n\t\treturn info, err\n\t}\n\n\tdb.maxLTXFileInfos.Lock()\n\tdb.maxLTXFileInfos.m[SnapshotLevel] = info\n\tdb.maxLTXFileInfos.Unlock()\n\n\treturn info, nil\n}\n\n// EnforceSnapshotRetention enforces retention of the snapshot level in the database by timestamp.\nfunc (db *DB) EnforceSnapshotRetention(ctx context.Context, timestamp time.Time) (minSnapshotTXID ltx.TXID, err error) {\n\tdb.Logger.Debug(\"enforcing snapshot retention\", \"timestamp\", timestamp)\n\n\t// Normal operation - use fast timestamps\n\titr, err := db.Replica.Client.LTXFiles(ctx, SnapshotLevel, 0, false)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"fetch ltx files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar deleted []*ltx.FileInfo\n\tvar snapshots []*ltx.FileInfo\n\tvar lastInfo *ltx.FileInfo\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tsnapshots = append(snapshots, info)\n\t\tlastInfo = info\n\n\t\t// If this snapshot is before the retention timestamp, mark it for deletion.\n\t\tif info.CreatedAt.Before(timestamp) {\n\t\t\tdeleted = append(deleted, info)\n\t\t\tcontinue\n\t\t}\n\t}\n\n\t// If this is the snapshot level, we need to ensure that at least one snapshot exists.\n\tif len(deleted) \u003e 0 \u0026\u0026 deleted[len(deleted)-1] == lastInfo {\n\t\tdeleted = deleted[:len(deleted)-1]\n\t}\n\n\t// Use the last deleted snapshot's MaxTXID, rather than the first retained\n\t// snapshot's MaxTXID, to preserve lower-level files in an in-flight restore\n\t// plan. TestStore_EnforceSnapshotRetention_RetainsInFlightRestorePlanFiles\n\t// guards this conservative floor.\n\tfor i, info := range snapshots {\n\t\tif slices.Contains(deleted, info) {\n\t\t\tcontinue\n\t\t}\n\t\tif i \u003e 0 {\n\t\t\tminSnapshotTXID = snapshots[i-1].MaxTXID\n\t\t}\n\t\tbreak\n\t}\n\n\t// Remove files marked for deletion from remote storage (unless retention disabled).\n\tif !db.RetentionEnabled {\n\t\tdb.Logger.Debug(\"skipping remote deletion (retention disabled)\", \"level\", SnapshotLevel, \"count\", len(deleted))\n\t} else if err := db.Replica.Client.DeleteLTXFiles(ctx, deleted); err != nil {\n\t\treturn 0, fmt.Errorf(\"remove ltx files: %w\", err)\n\t}\n\n\t// Always clean up local files.\n\tfor _, info := range deleted {\n\t\tlocalPath := db.LTXPath(SnapshotLevel, info.MinTXID, info.MaxTXID)\n\t\tdb.Logger.Debug(\"deleting local ltx file\", \"level\", SnapshotLevel, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"path\", localPath)\n\n\t\tif err := os.Remove(localPath); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\tdb.Logger.Error(\"failed to remove local ltx file\", \"path\", localPath, \"error\", err)\n\t\t}\n\t}\n\n\treturn minSnapshotTXID, nil\n}\n\n// EnforceL0RetentionByTime retains L0 files until they have been compacted into\n// L1 and have existed for at least L0Retention.\nfunc (db *DB) EnforceL0RetentionByTime(ctx context.Context) error {\n\tif db.L0Retention \u003c= 0 {\n\t\treturn nil\n\t}\n\n\tdb.Logger.Debug(\"starting l0 retention enforcement\", \"retention\", db.L0Retention)\n\n\tdbName := filepath.Base(db.Path())\n\n\t// Determine the highest TXID that has been compacted into L1.\n\titr, err := db.Replica.Client.LTXFiles(ctx, 1, 0, false)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch l1 files: %w\", err)\n\t}\n\tvar maxL1TXID ltx.TXID\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tif info.MaxTXID \u003e maxL1TXID {\n\t\t\tmaxL1TXID = info.MaxTXID\n\t\t}\n\t}\n\tif err := itr.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close l1 iterator: %w\", err)\n\t}\n\tif maxL1TXID == 0 {\n\t\tinternal.L0RetentionGaugeVec.WithLabelValues(dbName, \"eligible\").Set(0)\n\t\tinternal.L0RetentionGaugeVec.WithLabelValues(dbName, \"not_compacted\").Set(0)\n\t\tinternal.L0RetentionGaugeVec.WithLabelValues(dbName, \"too_recent\").Set(0)\n\t\treturn nil\n\t}\n\n\tthreshold := time.Now().Add(-db.L0Retention)\n\titr, err = db.Replica.Client.LTXFiles(ctx, 0, 0, false)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch l0 files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar (\n\t\tdeleted []*ltx.FileInfo\n\t\tlastInfo *ltx.FileInfo\n\t\tprocessedAll = true\n\t\ttotalFiles int\n\t\tnotCompactedCount int\n\t\ttooRecentCount int\n\t)\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tlastInfo = info\n\t\ttotalFiles++\n\n\t\tcreatedAt := info.CreatedAt\n\t\tif createdAt.IsZero() {\n\t\t\tif fi, err := os.Stat(db.LTXPath(0, info.MinTXID, info.MaxTXID)); err == nil {\n\t\t\t\tcreatedAt = fi.ModTime().UTC()\n\t\t\t} else {\n\t\t\t\tcreatedAt = threshold\n\t\t\t}\n\t\t}\n\n\t\tif createdAt.After(threshold) {\n\t\t\t// L0 entries are ordered; once we reach a newer file we stop so we don't\n\t\t\t// create gaps between retained files. VFS expects contiguous coverage.\n\t\t\tprocessedAll = false\n\t\t\ttooRecentCount++\n\t\t\tbreak\n\t\t}\n\n\t\tif info.MaxTXID \u003c= maxL1TXID {\n\t\t\tdeleted = append(deleted, info)\n\t\t} else {\n\t\t\tnotCompactedCount++\n\t\t}\n\t}\n\n\t// Count remaining files as too_recent if we stopped early\n\tif !processedAll {\n\t\tfor itr.Next() {\n\t\t\ttooRecentCount++\n\t\t}\n\t}\n\n\t// Ensure we do not delete the newest L0 file only if we processed the entire level.\n\tif processedAll \u0026\u0026 len(deleted) \u003e 0 \u0026\u0026 lastInfo != nil \u0026\u0026 deleted[len(deleted)-1] == lastInfo {\n\t\tdeleted = deleted[:len(deleted)-1]\n\t}\n\n\tinternal.L0RetentionGaugeVec.WithLabelValues(dbName, \"eligible\").Set(float64(len(deleted)))\n\tinternal.L0RetentionGaugeVec.WithLabelValues(dbName, \"not_compacted\").Set(float64(notCompactedCount))\n\tinternal.L0RetentionGaugeVec.WithLabelValues(dbName, \"too_recent\").Set(float64(tooRecentCount))\n\n\tdb.Logger.Debug(\"l0 retention scan complete\",\n\t\t\"total_l0_files\", totalFiles,\n\t\t\"eligible_for_deletion\", len(deleted),\n\t\t\"not_compacted_yet\", notCompactedCount,\n\t\t\"too_recent\", tooRecentCount,\n\t\t\"max_l1_txid\", maxL1TXID)\n\n\tif len(deleted) == 0 {\n\t\treturn nil\n\t}\n\n\tif !db.RetentionEnabled {\n\t\tdb.Logger.Debug(\"skipping remote deletion (retention disabled)\", \"level\", 0, \"count\", len(deleted))\n\t} else if err := db.Replica.Client.DeleteLTXFiles(ctx, deleted); err != nil {\n\t\treturn fmt.Errorf(\"remove expired l0 files: %w\", err)\n\t}\n\n\tfor _, info := range deleted {\n\t\tlocalPath := db.LTXPath(0, info.MinTXID, info.MaxTXID)\n\t\tdb.Logger.Debug(\"deleting expired local l0 file\", \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"path\", localPath)\n\t\tif err := os.Remove(localPath); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\tdb.Logger.Error(\"failed to remove local l0 file\", \"path\", localPath, \"error\", err)\n\t\t}\n\t}\n\tif len(deleted) \u003e 0 {\n\t\tdb.invalidatePosCache()\n\t}\n\n\tdb.Logger.Info(\"l0 retention enforced\", \"deleted_count\", len(deleted), \"max_l1_txid\", maxL1TXID)\n\n\treturn nil\n}\n\n// EnforceRetentionByTXID enforces retention so that any LTX files below\n// the target TXID are deleted. Always keep at least one file.\nfunc (db *DB) EnforceRetentionByTXID(ctx context.Context, level int, txID ltx.TXID) (err error) {\n\treturn db.compactor.EnforceRetentionByTXID(ctx, level, txID)\n}\n\n// monitor runs in a separate goroutine and monitors the database \u0026 WAL.\n//\n// Implements exponential backoff on repeated sync errors to prevent disk churn\n// when persistent errors (like disk full) occur. See issue #927.\nfunc (db *DB) monitor() {\n\tticker := time.NewTicker(db.MonitorInterval)\n\tdefer ticker.Stop()\n\n\t// Backoff state for error handling.\n\tvar backoff time.Duration\n\tvar lastLogTime time.Time\n\tvar consecutiveErrs int\n\n\tfor {\n\t\t// Wait for ticker or context close.\n\t\tselect {\n\t\tcase \u003c-db.ctx.Done():\n\t\t\treturn\n\t\tcase \u003c-ticker.C:\n\t\t}\n\n\t\t// If in backoff mode, wait additional time before retrying.\n\t\tif backoff \u003e 0 {\n\t\t\tselect {\n\t\t\tcase \u003c-db.ctx.Done():\n\t\t\t\treturn\n\t\t\tcase \u003c-time.After(backoff):\n\t\t\t}\n\t\t}\n\n\t\t// Sync the database to the shadow WAL. Sync() loops over bounded\n\t\t// chunks, releasing the executor lock between each so checkpoints\n\t\t// and snapshots can interleave, but always catches up to the WAL\n\t\t// end so checkpointIfNeeded() runs. A single bounded chunk per\n\t\t// tick would cap drain throughput and starve the TruncatePageN\n\t\t// emergency checkpoint while behind, growing the WAL unbounded.\n\t\tif err := db.Sync(db.ctx); err != nil \u0026\u0026 !isShutdownError(db.ctx, err) {\n\t\t\tconsecutiveErrs++\n\n\t\t\t// Exponential backoff: MonitorInterval -\u003e 2x -\u003e 4x -\u003e ... -\u003e max\n\t\t\tif backoff == 0 {\n\t\t\t\tbackoff = db.MonitorInterval\n\t\t\t} else {\n\t\t\t\tbackoff *= 2\n\t\t\t\tif backoff \u003e DefaultSyncBackoffMax {\n\t\t\t\t\tbackoff = DefaultSyncBackoffMax\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Log with rate limiting to avoid log spam during persistent errors.\n\t\t\tif time.Since(lastLogTime) \u003e= SyncErrorLogInterval {\n\t\t\t\tvar ltxErr *LTXError\n\t\t\t\tif errors.Is(err, ErrDiskFull) \u0026\u0026 errors.As(err, \u0026ltxErr) {\n\t\t\t\t\t// Recovery is automatic but can lag up to max_backoff\n\t\t\t\t\t// behind space being freed.\n\t\t\t\t\tdb.Logger.Error(\"disk full while staging ltx file, replication paused until space is freed\",\n\t\t\t\t\t\t\"error\", err,\n\t\t\t\t\t\t\"path\", ltxErr.Path,\n\t\t\t\t\t\t\"txid\", ltx.TXID(ltxErr.MaxTXID).String(),\n\t\t\t\t\t\t\"consecutive_errors\", consecutiveErrs,\n\t\t\t\t\t\t\"backoff\", backoff,\n\t\t\t\t\t\t\"max_backoff\", DefaultSyncBackoffMax)\n\t\t\t\t} else {\n\t\t\t\t\tdb.Logger.Error(\"sync error\",\n\t\t\t\t\t\t\"error\", err,\n\t\t\t\t\t\t\"consecutive_errors\", consecutiveErrs,\n\t\t\t\t\t\t\"backoff\", backoff)\n\t\t\t\t}\n\t\t\t\tlastLogTime = time.Now()\n\t\t\t}\n\n\t\t\t// Try to clean up stale temp files after persistent disk errors.\n\t\t\tif isDiskFullError(err) \u0026\u0026 consecutiveErrs \u003e= 3 {\n\t\t\t\tdb.Logger.Warn(\"attempting temp file cleanup due to persistent disk errors\")\n\t\t\t\tif cleanupErr := removeTmpFiles(db.metaPath); cleanupErr != nil {\n\t\t\t\t\tdb.Logger.Error(\"temp file cleanup failed\", \"error\", cleanupErr)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Success - reset backoff and error counter.\n\t\tif consecutiveErrs \u003e 0 {\n\t\t\tdb.Logger.Info(\"sync recovered\", \"previous_errors\", consecutiveErrs)\n\t\t}\n\t\tbackoff = 0\n\t\tconsecutiveErrs = 0\n\t}\n}\n\n// CRC64 returns a CRC-64 ISO checksum of the database and its current position.\n//\n// This function obtains a read lock so it prevents syncs from occurring until\n// the operation is complete. The database will still be usable but it will be\n// unable to checkpoint during this time.\n//\n// If dst is set, the database file is copied to that location before checksum.\nfunc (db *DB) CRC64(ctx context.Context) (uint64, ltx.Pos, error) {\n\tif err := db.lockExec(ctx); err != nil {\n\t\treturn 0, ltx.Pos{}, err\n\t}\n\tdefer db.execSem.Release(1)\n\n\texec, err := db.newSyncExecutor(ctx)\n\tif err != nil {\n\t\treturn 0, ltx.Pos{}, err\n\t} else if exec == nil {\n\t\treturn 0, ltx.Pos{}, os.ErrNotExist\n\t}\n\tdefer db.applySyncExecutor(exec, true)\n\n\t// Force a RESTART checkpoint to ensure the database is at the start of the WAL.\n\tif _, err := db.checkpointWithExecutor(ctx, CheckpointModeRestart, exec); err != nil {\n\t\treturn 0, ltx.Pos{}, err\n\t}\n\n\t// Seek to the beginning of the db file descriptor and checksum whole file.\n\th := crc64.New(crc64.MakeTable(crc64.ISO))\n\tif _, err := db.f.Seek(0, io.SeekStart); err != nil {\n\t\treturn 0, exec.pos, err\n\t} else if _, err := io.Copy(h, db.f); err != nil {\n\t\treturn 0, exec.pos, err\n\t}\n\treturn h.Sum64(), exec.pos, nil\n}\n\n// MaxLTXFileInfo returns the metadata for the last LTX file in a level.\n// If cached, it will returned the local copy. Otherwise, it fetches from the replica.\nfunc (db *DB) MaxLTXFileInfo(ctx context.Context, level int) (ltx.FileInfo, error) {\n\tdb.maxLTXFileInfos.Lock()\n\tdefer db.maxLTXFileInfos.Unlock()\n\n\tinfo, ok := db.maxLTXFileInfos.m[level]\n\tif ok {\n\t\treturn *info, nil\n\t}\n\n\tremoteInfo, err := db.Replica.MaxLTXFileInfo(ctx, level)\n\tif err != nil {\n\t\treturn ltx.FileInfo{}, fmt.Errorf(\"cannot determine L%d max ltx file for %q: %w\", level, db.Path(), err)\n\t}\n\n\tdb.maxLTXFileInfos.m[level] = \u0026remoteInfo\n\treturn remoteInfo, nil\n}\n\n// DefaultRestoreParallelism is the default parallelism when downloading WAL files.\nconst DefaultRestoreParallelism = 8\n\n// DefaultFollowInterval is the default polling interval for follow mode.\nconst DefaultFollowInterval = 1 * time.Second\n\n// IntegrityCheckMode specifies the level of integrity checking after restore.\ntype IntegrityCheckMode int\n\nconst (\n\tIntegrityCheckNone IntegrityCheckMode = iota\n\tIntegrityCheckQuick\n\tIntegrityCheckFull\n)\n\n// RestoreOptions represents options for DB.Restore().\ntype RestoreOptions struct {\n\t// Target path to restore into.\n\t// If blank, the original DB path is used.\n\tOutputPath string\n\n\t// Specific transaction to restore to.\n\t// If zero, TXID is ignored.\n\tTXID ltx.TXID\n\n\t// Point-in-time to restore database.\n\t// If zero, database restore to most recent state available.\n\tTimestamp time.Time\n\n\t// Specifies how many WAL files are downloaded in parallel during restore.\n\tParallelism int\n\n\t// Follow enables continuous restore mode, polling for new LTX files\n\t// and applying them to the restored database. Similar to tail -f.\n\tFollow bool\n\n\t// FollowInterval specifies how often to poll for new LTX files in follow mode.\n\tFollowInterval time.Duration\n\n\t// IntegrityCheck specifies the level of integrity checking after restore.\n\t// Zero value (IntegrityCheckNone) skips the check for backward compatibility.\n\tIntegrityCheck IntegrityCheckMode\n}\n\n// NewRestoreOptions returns a new instance of RestoreOptions with defaults.\nfunc NewRestoreOptions() RestoreOptions {\n\treturn RestoreOptions{\n\t\tParallelism: DefaultRestoreParallelism,\n\t\tFollowInterval: DefaultFollowInterval,\n\t}\n}\n\n// Database metrics.\nvar (\n\tdbMetricOwners = struct {\n\t\tsync.Mutex\n\t\tpaths map[string]int\n\t\tbasenames map[string]int\n\t}{\n\t\tpaths: make(map[string]int),\n\t\tbasenames: make(map[string]int),\n\t}\n\n\tdbSizeGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_db_size\",\n\t\tHelp: \"The current size of the real DB\",\n\t}, []string{\"db\"})\n\n\twalSizeGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_wal_size\",\n\t\tHelp: \"The current size of the real WAL\",\n\t}, []string{\"db\"})\n\n\ttotalWALBytesCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_total_wal_bytes\",\n\t\tHelp: \"Total number of bytes written to shadow WAL\",\n\t}, []string{\"db\"})\n\n\ttxIDIndexGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_txid\",\n\t\tHelp: \"The current transaction ID\",\n\t}, []string{\"db\"})\n\n\tsyncNCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_sync_count\",\n\t\tHelp: \"Number of sync operations performed\",\n\t}, []string{\"db\"})\n\n\tsyncErrorNCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_sync_error_count\",\n\t\tHelp: \"Number of sync errors that have occurred\",\n\t}, []string{\"db\"})\n\n\tsyncSecondsCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_sync_seconds\",\n\t\tHelp: \"Time spent syncing shadow WAL, in seconds\",\n\t}, []string{\"db\"})\n\n\tdiskFullGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_disk_full\",\n\t\tHelp: \"Whether replication is paused because the local disk is full\",\n\t}, []string{\"db\"})\n\n\tcheckpointNCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_checkpoint_count\",\n\t\tHelp: \"Number of checkpoint operations performed\",\n\t}, []string{\"db\", \"mode\"})\n\n\tcheckpointErrorNCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_checkpoint_error_count\",\n\t\tHelp: \"Number of checkpoint errors that have occurred\",\n\t}, []string{\"db\", \"mode\"})\n\n\tcheckpointSecondsCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_checkpoint_seconds\",\n\t\tHelp: \"Time spent checkpointing WAL, in seconds\",\n\t}, []string{\"db\", \"mode\"})\n\n\tcompactionVerifyErrorCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_compaction_verify_error_count\",\n\t\tHelp: \"Number of post-compaction verification failures\",\n\t}, []string{\"db\"})\n)\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[29,37]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[38,48]}},{"name":"sql","path":"database/sql","span":{"start":[6,1],"end":[6,16],"bytes":[49,64]}},{"name":"binary","path":"encoding/binary","span":{"start":[7,1],"end":[7,19],"bytes":[65,83]}},{"name":"errors","path":"errors","span":{"start":[8,1],"end":[8,10],"bytes":[84,93]}},{"name":"fmt","path":"fmt","span":{"start":[9,1],"end":[9,7],"bytes":[94,100]}},{"name":"crc64","path":"hash/crc64","span":{"start":[10,1],"end":[10,14],"bytes":[101,114]}},{"name":"io","path":"io","span":{"start":[11,1],"end":[11,6],"bytes":[115,120]}},{"name":"slog","path":"log/slog","span":{"start":[12,1],"end":[12,12],"bytes":[121,132]}},{"name":"os","path":"os","span":{"start":[13,1],"end":[13,6],"bytes":[133,138]}},{"name":"filepath","path":"path/filepath","span":{"start":[14,1],"end":[14,17],"bytes":[139,155]}},{"name":"slices","path":"slices","span":{"start":[15,1],"end":[15,10],"bytes":[156,165]}},{"name":"strconv","path":"strconv","span":{"start":[16,1],"end":[16,11],"bytes":[166,176]}},{"name":"strings","path":"strings","span":{"start":[17,1],"end":[17,11],"bytes":[177,187]}},{"name":"sync","path":"sync","span":{"start":[18,1],"end":[18,8],"bytes":[188,195]}},{"name":"syscall","path":"syscall","span":{"start":[19,1],"end":[19,11],"bytes":[196,206]}},{"name":"time","path":"time","span":{"start":[20,1],"end":[20,8],"bytes":[207,214]}},{"name":"prometheus","path":"github.com/prometheus/client_golang/prometheus","span":{"start":[22,1],"end":[22,50],"bytes":[216,265]}},{"name":"promauto","path":"github.com/prometheus/client_golang/prometheus/promauto","span":{"start":[23,1],"end":[23,59],"bytes":[266,324]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[24,1],"end":[24,27],"bytes":[325,351]}},{"name":"semaphore","path":"golang.org/x/sync/semaphore","span":{"start":[25,1],"end":[25,31],"bytes":[352,382]}},{"name":"sqlite","path":"modernc.org/sqlite","span":{"start":[26,1],"end":[26,22],"bytes":[383,404]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[28,1],"end":[28,46],"bytes":[406,451]}}],"types":{"DB":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB","kind":"struct","span":{"start":[67,1],"end":[193,2],"bytes":[2132,6925]},"callables":{"github.com/benbjohnson/litestream.DB.CRC64":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.CRC64","kind":"method","span":{"start":[3320,1],"end":[3347,2],"bytes":[106358,107235]},"signature":"github.com/benbjohnson/litestream.DB.CRC64","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[3320,1],"end":[3320,68],"bytes":[106358,106425]}}],"return_type":"(uint64, github.com/superfly/ltx.Pos, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"3321:12":{"kind":"call","span":{"start":[3321,12],"end":[3321,28],"bytes":[106437,106453]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec"},"3324:8":{"kind":"call","span":{"start":[3324,8],"end":[3324,29],"bytes":[106505,106526]},"callee":null},"3326:15":{"kind":"call","span":{"start":[3326,15],"end":[3326,38],"bytes":[106542,106565]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor"},"3332:8":{"kind":"call","span":{"start":[3332,8],"end":[3332,40],"bytes":[106683,106715]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor"},"3335:15":{"kind":"call","span":{"start":[3335,15],"end":[3335,74],"bytes":[106813,106872]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"},"3340:17":{"kind":"call","span":{"start":[3340,17],"end":[3340,43],"bytes":[107011,107037]},"callee":null},"3340:7":{"kind":"call","span":{"start":[3340,7],"end":[3340,44],"bytes":[107001,107038]},"callee":null},"3341:15":{"kind":"call","span":{"start":[3341,15],"end":[3341,41],"bytes":[107053,107079]},"callee":null},"3343:22":{"kind":"call","span":{"start":[3343,22],"end":[3343,38],"bytes":[107141,107157]},"callee":null},"3346:9":{"kind":"call","span":{"start":[3346,9],"end":[3346,18],"bytes":[107209,107218]},"callee":null}}},"github.com/benbjohnson/litestream.DB.Checkpoint":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint","kind":"method","span":{"start":[2469,1],"end":[2487,2],"bytes":[79355,79811]},"signature":"github.com/benbjohnson/litestream.DB.Checkpoint","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2469,1],"end":[2469,73],"bytes":[79355,79427]}},{"name":"mode","type":"string","span":{"start":[2469,1],"end":[2469,73],"bytes":[79355,79427]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"2470:12":{"kind":"call","span":{"start":[2470,12],"end":[2470,28],"bytes":[79439,79455]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec"},"2473:8":{"kind":"call","span":{"start":[2473,8],"end":[2473,29],"bytes":[79493,79514]},"callee":null},"2474:2":{"kind":"call","span":{"start":[2474,2],"end":[2474,36],"bytes":[79516,79550]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncDiag"},"2475:8":{"kind":"call","span":{"start":[2475,8],"end":[2475,43],"bytes":[79558,79593]},"callee":null},"2477:15":{"kind":"call","span":{"start":[2477,15],"end":[2477,38],"bytes":[79609,79632]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor"},"2483:8":{"kind":"call","span":{"start":[2483,8],"end":[2483,40],"bytes":[79711,79743]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor"},"2485:11":{"kind":"call","span":{"start":[2485,11],"end":[2485,53],"bytes":[79755,79797]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint/github.com/benbjohnson/litestream.DB.Checkpoint.closure_1","kind":"function","span":{"start":[2475,1],"end":[2475,43],"bytes":[79551,79593]},"signature":"github.com/benbjohnson/litestream.DB.Checkpoint.closure_1","parameters":[],"body":{"2475:17":{"kind":"call","span":{"start":[2475,17],"end":[2475,39],"bytes":[79567,79589]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.Close":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","kind":"method","span":{"start":[874,1],"end":[938,2],"bytes":[29441,30885]},"signature":"github.com/benbjohnson/litestream.DB.Close","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[874,1],"end":[874,55],"bytes":[29441,29495]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"875:2":{"kind":"call","span":{"start":[875,2],"end":[875,13],"bytes":[29497,29508]},"callee":null},"876:2":{"kind":"call","span":{"start":[876,2],"end":[876,14],"bytes":[29510,29522]},"callee":null},"883:12":{"kind":"call","span":{"start":[883,12],"end":[883,61],"bytes":[29838,29887]},"callee":null},"883:31":{"kind":"call","span":{"start":[883,31],"end":[883,57],"bytes":[29857,29883]},"callee":null},"886:8":{"kind":"call","span":{"start":[886,8],"end":[886,29],"bytes":[29925,29946]},"callee":null},"890:14":{"kind":"call","span":{"start":[890,14],"end":[890,35],"bytes":[30025,30046]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked"},"898:12":{"kind":"call","span":{"start":[898,12],"end":[898,40],"bytes":[30196,30224]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncReplicaWithRetry"},"902:3":{"kind":"call","span":{"start":[902,3],"end":[902,24],"bytes":[30274,30295]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Stop"},"907:11":{"kind":"call","span":{"start":[907,11],"end":[907,31],"bytes":[30409,30429]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.releaseReadLock"},"912:2":{"kind":"call","span":{"start":[912,2],"end":[912,14],"bytes":[30476,30488]},"callee":null},"919:2":{"kind":"call","span":{"start":[919,2],"end":[919,16],"bytes":[30575,30589]},"callee":null},"922:11":{"kind":"call","span":{"start":[922,11],"end":[922,24],"bytes":[30620,30633]},"callee":null},"928:11":{"kind":"call","span":{"start":[928,11],"end":[928,20],"bytes":[30704,30713]},"callee":null},"935:2":{"kind":"call","span":{"start":[935,2],"end":[935,20],"bytes":[30852,30870]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.deleteMetrics"}}},"github.com/benbjohnson/litestream.DB.Compact":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Compact","kind":"method","span":{"start":[2984,1],"end":[3001,2],"bytes":[95536,96052]},"signature":"github.com/benbjohnson/litestream.DB.Compact","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2984,1],"end":[2984,82],"bytes":[95536,95617]}},{"name":"dstLevel","type":"int","span":{"start":[2984,1],"end":[2984,82],"bytes":[95536,95617]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"2985:15":{"kind":"call","span":{"start":[2985,15],"end":[2985,50],"bytes":[95632,95667]},"callee":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact"},"2992:13":{"kind":"call","span":{"start":[2992,13],"end":[2992,45],"bytes":[95815,95847]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime"},"2994:8":{"kind":"call","span":{"start":[2994,8],"end":[2994,33],"bytes":[95929,95954]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"2995:5":{"kind":"call","span":{"start":[2995,5],"end":[2995,63],"bytes":[95961,96019]},"callee":null}}},"github.com/benbjohnson/litestream.DB.DirInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.DirInfo","kind":"method","span":{"start":[657,1],"end":[659,2],"bytes":[23069,23127]},"signature":"github.com/benbjohnson/litestream.DB.DirInfo","parameters":[],"return_type":"os.FileInfo","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","kind":"method","span":{"start":[3093,1],"end":[3215,2],"bytes":[99222,102862]},"signature":"github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[3093,1],"end":[3093,68],"bytes":[99222,99289]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":22},"body":{"3098:2":{"kind":"call","span":{"start":[3098,2],"end":[3098,83],"bytes":[99334,99415]},"callee":null},"3100:12":{"kind":"call","span":{"start":[3100,12],"end":[3100,36],"bytes":[99428,99452]},"callee":null},"3100:26":{"kind":"call","span":{"start":[3100,26],"end":[3100,35],"bytes":[99442,99451]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"3103:14":{"kind":"call","span":{"start":[3103,14],"end":[3103,58],"bytes":[99531,99575]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"3105:10":{"kind":"call","span":{"start":[3105,10],"end":[3105,47],"bytes":[99602,99639]},"callee":null},"3108:6":{"kind":"call","span":{"start":[3108,6],"end":[3108,16],"bytes":[99672,99682]},"callee":null},"3109:11":{"kind":"call","span":{"start":[3109,11],"end":[3109,21],"bytes":[99695,99705]},"callee":null},"3114:12":{"kind":"call","span":{"start":[3114,12],"end":[3114,23],"bytes":[99784,99795]},"callee":null},"3115:10":{"kind":"call","span":{"start":[3115,10],"end":[3115,50],"bytes":[99819,99859]},"callee":null},"3118:3":{"kind":"call","span":{"start":[3118,3],"end":[3118,67],"bytes":[99886,99950]},"callee":null},"3119:3":{"kind":"call","span":{"start":[3119,3],"end":[3119,72],"bytes":[99960,100029]},"callee":null},"3120:3":{"kind":"call","span":{"start":[3120,3],"end":[3120,69],"bytes":[100039,100105]},"callee":null},"3124:15":{"kind":"call","span":{"start":[3124,15],"end":[3124,25],"bytes":[100144,100154]},"callee":null},"3125:13":{"kind":"call","span":{"start":[3125,13],"end":[3125,57],"bytes":[100188,100232]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"3127:10":{"kind":"call","span":{"start":[3127,10],"end":[3127,47],"bytes":[100259,100296]},"callee":null},"3129:8":{"kind":"call","span":{"start":[3129,8],"end":[3129,19],"bytes":[100307,100318]},"callee":null},"3139:6":{"kind":"call","span":{"start":[3139,6],"end":[3139,16],"bytes":[100504,100514]},"callee":null},"3140:11":{"kind":"call","span":{"start":[3140,11],"end":[3140,21],"bytes":[100527,100537]},"callee":null},"3145:6":{"kind":"call","span":{"start":[3145,6],"end":[3145,24],"bytes":[100607,100625]},"callee":null},"3146:18":{"kind":"call","span":{"start":[3146,18],"end":[3146,68],"bytes":[100645,100695]},"callee":null},"3146:26":{"kind":"call","span":{"start":[3146,26],"end":[3146,67],"bytes":[100653,100694]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"3147:17":{"kind":"call","span":{"start":[3147,17],"end":[3147,29],"bytes":[100726,100738]},"callee":null},"3153:6":{"kind":"call","span":{"start":[3153,6],"end":[3153,32],"bytes":[100798,100824]},"callee":null},"3162:14":{"kind":"call","span":{"start":[3162,14],"end":[3162,35],"bytes":[101083,101104]},"callee":null},"3170:7":{"kind":"call","span":{"start":[3170,7],"end":[3170,17],"bytes":[101233,101243]},"callee":null},"3176:21":{"kind":"call","span":{"start":[3176,21],"end":[3176,33],"bytes":[101380,101392]},"callee":null},"3176:68":{"kind":"call","span":{"start":[3176,68],"end":[3176,80],"bytes":[101427,101439]},"callee":null},"3177:22":{"kind":"call","span":{"start":[3177,22],"end":[3177,34],"bytes":[101478,101490]},"callee":null},"3180:2":{"kind":"call","span":{"start":[3180,2],"end":[3180,66],"bytes":[101499,101563]},"callee":null},"3180:71":{"kind":"call","span":{"start":[3180,71],"end":[3180,92],"bytes":[101568,101589]},"callee":null},"3180:79":{"kind":"call","span":{"start":[3180,79],"end":[3180,91],"bytes":[101576,101588]},"callee":null},"3181:2":{"kind":"call","span":{"start":[3181,2],"end":[3181,71],"bytes":[101592,101661]},"callee":null},"3181:76":{"kind":"call","span":{"start":[3181,76],"end":[3181,102],"bytes":[101666,101692]},"callee":null},"3182:2":{"kind":"call","span":{"start":[3182,2],"end":[3182,68],"bytes":[101695,101761]},"callee":null},"3182:73":{"kind":"call","span":{"start":[3182,73],"end":[3182,96],"bytes":[101766,101789]},"callee":null},"3184:2":{"kind":"call","span":{"start":[3184,2],"end":[3189,28],"bytes":[101793,102013]},"callee":null},"3186:28":{"kind":"call","span":{"start":[3186,28],"end":[3186,40],"bytes":[101898,101910]},"callee":null},"3191:5":{"kind":"call","span":{"start":[3191,5],"end":[3191,17],"bytes":[102019,102031]},"callee":null},"3196:3":{"kind":"call","span":{"start":[3196,3],"end":[3196,102],"bytes":[102085,102184]},"callee":null},"3196:89":{"kind":"call","span":{"start":[3196,89],"end":[3196,101],"bytes":[102171,102183]},"callee":null},"3197:19":{"kind":"call","span":{"start":[3197,19],"end":[3197,65],"bytes":[102203,102249]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles"},"3198:10":{"kind":"call","span":{"start":[3198,10],"end":[3198,56],"bytes":[102273,102319]},"callee":null},"3202:16":{"kind":"call","span":{"start":[3202,16],"end":[3202,57],"bytes":[102371,102412]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"3203:3":{"kind":"call","span":{"start":[3203,3],"end":[3203,121],"bytes":[102415,102533]},"callee":null},"3204:13":{"kind":"call","span":{"start":[3204,13],"end":[3204,33],"bytes":[102546,102566]},"callee":null},"3204:50":{"kind":"call","span":{"start":[3204,50],"end":[3204,68],"bytes":[102583,102601]},"callee":null},"3205:4":{"kind":"call","span":{"start":[3205,4],"end":[3205,86],"bytes":[102607,102689]},"callee":null},"3208:5":{"kind":"call","span":{"start":[3208,5],"end":[3208,17],"bytes":[102701,102713]},"callee":null},"3209:3":{"kind":"call","span":{"start":[3209,3],"end":[3209,26],"bytes":[102722,102745]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"},"3212:2":{"kind":"call","span":{"start":[3212,2],"end":[3212,98],"bytes":[102751,102847]},"callee":null},"3212:59":{"kind":"call","span":{"start":[3212,59],"end":[3212,71],"bytes":[102808,102820]},"callee":null}}},"github.com/benbjohnson/litestream.DB.EnforceRetentionByTXID":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceRetentionByTXID","kind":"method","span":{"start":[3219,1],"end":[3221,2],"bytes":[103000,103161]},"signature":"github.com/benbjohnson/litestream.DB.EnforceRetentionByTXID","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[3219,1],"end":[3219,98],"bytes":[103000,103097]}},{"name":"level","type":"int","span":{"start":[3219,1],"end":[3219,98],"bytes":[103000,103097]}},{"name":"txID","type":"github.com/superfly/ltx.TXID","span":{"start":[3219,1],"end":[3219,98],"bytes":[103000,103097]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"3220:9":{"kind":"call","span":{"start":[3220,9],"end":[3220,62],"bytes":[103106,103159]},"callee":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID"}}},"github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention","kind":"method","span":{"start":[3027,1],"end":[3089,2],"bytes":[96884,99090]},"signature":"github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[3027,1],"end":[3027,121],"bytes":[96884,97004]}},{"name":"timestamp","type":"time.Time","span":{"start":[3027,1],"end":[3027,121],"bytes":[96884,97004]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"3028:2":{"kind":"call","span":{"start":[3028,2],"end":[3028,73],"bytes":[97006,97077]},"callee":null},"3031:14":{"kind":"call","span":{"start":[3031,14],"end":[3031,70],"bytes":[97135,97191]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"3033:13":{"kind":"call","span":{"start":[3033,13],"end":[3033,51],"bytes":[97221,97259]},"callee":null},"3035:8":{"kind":"call","span":{"start":[3035,8],"end":[3035,19],"bytes":[97270,97281]},"callee":null},"3040:6":{"kind":"call","span":{"start":[3040,6],"end":[3040,16],"bytes":[97376,97386]},"callee":null},"3041:11":{"kind":"call","span":{"start":[3041,11],"end":[3041,21],"bytes":[97399,97409]},"callee":null},"3042:15":{"kind":"call","span":{"start":[3042,15],"end":[3042,38],"bytes":[97424,97447]},"callee":null},"3046:6":{"kind":"call","span":{"start":[3046,6],"end":[3046,38],"bytes":[97551,97583]},"callee":null},"3047:14":{"kind":"call","span":{"start":[3047,14],"end":[3047,35],"bytes":[97599,97620]},"callee":null},"3053:33":{"kind":"call","span":{"start":[3053,33],"end":[3053,45],"bytes":[97761,97773]},"callee":null},"3053:5":{"kind":"call","span":{"start":[3053,5],"end":[3053,17],"bytes":[97733,97745]},"callee":null},"3054:22":{"kind":"call","span":{"start":[3054,22],"end":[3054,34],"bytes":[97812,97824]},"callee":null},"3062:6":{"kind":"call","span":{"start":[3062,6],"end":[3062,36],"bytes":[98138,98168]},"callee":null},"3073:101":{"kind":"call","span":{"start":[3073,101],"end":[3073,113],"bytes":[98473,98485]},"callee":null},"3073:3":{"kind":"call","span":{"start":[3073,3],"end":[3073,114],"bytes":[98375,98486]},"callee":null},"3074:19":{"kind":"call","span":{"start":[3074,19],"end":[3074,65],"bytes":[98505,98551]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles"},"3075:13":{"kind":"call","span":{"start":[3075,13],"end":[3075,52],"bytes":[98578,98617]},"callee":null},"3080:16":{"kind":"call","span":{"start":[3080,16],"end":[3080,69],"bytes":[98702,98755]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"3081:3":{"kind":"call","span":{"start":[3081,3],"end":[3081,138],"bytes":[98758,98893]},"callee":null},"3083:13":{"kind":"call","span":{"start":[3083,13],"end":[3083,33],"bytes":[98907,98927]},"callee":null},"3083:50":{"kind":"call","span":{"start":[3083,50],"end":[3083,68],"bytes":[98944,98962]},"callee":null},"3084:4":{"kind":"call","span":{"start":[3084,4],"end":[3084,87],"bytes":[98968,99051]},"callee":null}}},"github.com/benbjohnson/litestream.DB.EnsureExists":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnsureExists","kind":"method","span":{"start":[786,1],"end":[820,2],"bytes":[26853,27824]},"signature":"github.com/benbjohnson/litestream.DB.EnsureExists","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[786,1],"end":[786,56],"bytes":[26853,26908]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"788:10":{"kind":"call","span":{"start":[788,10],"end":[788,45],"bytes":[26942,26977]},"callee":null},"791:10":{"kind":"call","span":{"start":[791,10],"end":[791,52],"bytes":[27021,27063]},"callee":null},"794:15":{"kind":"call","span":{"start":[794,15],"end":[794,33],"bytes":[27082,27100]},"callee":null},"794:23":{"kind":"call","span":{"start":[794,23],"end":[794,32],"bytes":[27090,27099]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"796:13":{"kind":"call","span":{"start":[796,13],"end":[796,31],"bytes":[27140,27158]},"callee":null},"797:10":{"kind":"call","span":{"start":[797,10],"end":[797,46],"bytes":[27170,27206]},"callee":null},"800:12":{"kind":"call","span":{"start":[800,12],"end":[800,35],"bytes":[27222,27245]},"callee":null},"800:25":{"kind":"call","span":{"start":[800,25],"end":[800,34],"bytes":[27235,27244]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"801:13":{"kind":"call","span":{"start":[801,13],"end":[801,36],"bytes":[27272,27295]},"callee":null},"802:11":{"kind":"call","span":{"start":[802,11],"end":[802,57],"bytes":[27320,27366]},"callee":null},"806:9":{"kind":"call","span":{"start":[806,9],"end":[806,28],"bytes":[27383,27402]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions"},"807:19":{"kind":"call","span":{"start":[807,19],"end":[807,28],"bytes":[27421,27430]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"810:12":{"kind":"call","span":{"start":[810,12],"end":[810,40],"bytes":[27485,27513]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore"},"811:43":{"kind":"call","span":{"start":[811,43],"end":[811,73],"bytes":[27570,27600]},"callee":null},"811:6":{"kind":"call","span":{"start":[811,6],"end":[811,39],"bytes":[27533,27566]},"callee":null},"812:4":{"kind":"call","span":{"start":[812,4],"end":[812,66],"bytes":[27606,27668]},"callee":null},"815:10":{"kind":"call","span":{"start":[815,10],"end":[815,52],"bytes":[27696,27738]},"callee":null},"818:2":{"kind":"call","span":{"start":[818,2],"end":[818,68],"bytes":[27744,27810]},"callee":null},"818:58":{"kind":"call","span":{"start":[818,58],"end":[818,67],"bytes":[27800,27809]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"}}},"github.com/benbjohnson/litestream.DB.FileInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.FileInfo","kind":"method","span":{"start":[652,1],"end":[654,2],"bytes":[22895,22955]},"signature":"github.com/benbjohnson/litestream.DB.FileInfo","parameters":[],"return_type":"os.FileInfo","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.IsOpen":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","kind":"method","span":{"start":[549,1],"end":[553,2],"bytes":[19789,19876]},"signature":"github.com/benbjohnson/litestream.DB.IsOpen","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"550:2":{"kind":"call","span":{"start":[550,2],"end":[550,15],"bytes":[19820,19833]},"callee":null},"551:8":{"kind":"call","span":{"start":[551,8],"end":[551,23],"bytes":[19841,19856]},"callee":null}}},"github.com/benbjohnson/litestream.DB.LTXDir":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir","kind":"method","span":{"start":[571,1],"end":[573,2],"bytes":[20272,20347]},"signature":"github.com/benbjohnson/litestream.DB.LTXDir","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{"572:9":{"kind":"call","span":{"start":[572,9],"end":[572,42],"bytes":[20312,20345]},"callee":null}}},"github.com/benbjohnson/litestream.DB.LTXLevelDir":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir","kind":"method","span":{"start":[601,1],"end":[603,2],"bytes":[21229,21332]},"signature":"github.com/benbjohnson/litestream.DB.LTXLevelDir","parameters":[{"name":"level","type":"int","span":{"start":[601,1],"end":[601,46],"bytes":[21229,21274]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"602:23":{"kind":"call","span":{"start":[602,23],"end":[602,34],"bytes":[21297,21308]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir"},"602:36":{"kind":"call","span":{"start":[602,36],"end":[602,55],"bytes":[21310,21329]},"callee":null},"602:9":{"kind":"call","span":{"start":[602,9],"end":[602,56],"bytes":[21283,21330]},"callee":null}}},"github.com/benbjohnson/litestream.DB.LTXPath":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","kind":"method","span":{"start":[607,1],"end":[610,2],"bytes":[21439,21640]},"signature":"github.com/benbjohnson/litestream.DB.LTXPath","parameters":[{"name":"level","type":"int","span":{"start":[607,1],"end":[607,69],"bytes":[21439,21507]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[607,1],"end":[607,69],"bytes":[21439,21507]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[607,1],"end":[607,69],"bytes":[21439,21507]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"608:2":{"kind":"call","span":{"start":[608,2],"end":[608,48],"bytes":[21509,21555]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert"},"609:23":{"kind":"call","span":{"start":[609,23],"end":[609,44],"bytes":[21578,21599]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir"},"609:46":{"kind":"call","span":{"start":[609,46],"end":[609,82],"bytes":[21601,21637]},"callee":null},"609:9":{"kind":"call","span":{"start":[609,9],"end":[609,83],"bytes":[21564,21638]},"callee":null}}},"github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt","kind":"method","span":{"start":[729,1],"end":[733,2],"bytes":[25065,25221]},"signature":"github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt","parameters":[],"return_type":"time.Time","metrics":{"cyclomatic":1},"body":{"730:2":{"kind":"call","span":{"start":[730,2],"end":[730,33],"bytes":[25115,25146]},"callee":null},"731:8":{"kind":"call","span":{"start":[731,8],"end":[731,41],"bytes":[25154,25187]},"callee":null}}},"github.com/benbjohnson/litestream.DB.MaxLTX":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","kind":"method","span":{"start":[632,1],"end":[649,2],"bytes":[22329,22804]},"signature":"github.com/benbjohnson/litestream.DB.MaxLTX","parameters":[],"return_type":"(github.com/superfly/ltx.TXID, github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"633:15":{"kind":"call","span":{"start":[633,15],"end":[633,44],"bytes":[22407,22436]},"callee":null},"633:26":{"kind":"call","span":{"start":[633,26],"end":[633,43],"bytes":[22418,22435]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir"},"634:5":{"kind":"call","span":{"start":[634,5],"end":[634,23],"bytes":[22441,22459]},"callee":null},"642:23":{"kind":"call","span":{"start":[642,23],"end":[642,52],"bytes":[22627,22656]},"callee":null},"642:41":{"kind":"call","span":{"start":[642,41],"end":[642,51],"bytes":[22645,22655]},"callee":null}}},"github.com/benbjohnson/litestream.DB.MaxLTXFileInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTXFileInfo","kind":"method","span":{"start":[3351,1],"end":[3367,2],"bytes":[107397,107873]},"signature":"github.com/benbjohnson/litestream.DB.MaxLTXFileInfo","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[3351,1],"end":[3351,85],"bytes":[107397,107481]}},{"name":"level","type":"int","span":{"start":[3351,1],"end":[3351,85],"bytes":[107397,107481]}}],"return_type":"(github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"3352:2":{"kind":"call","span":{"start":[3352,2],"end":[3352,27],"bytes":[107483,107508]},"callee":null},"3353:8":{"kind":"call","span":{"start":[3353,8],"end":[3353,35],"bytes":[107516,107543]},"callee":null},"3360:21":{"kind":"call","span":{"start":[3360,21],"end":[3360,58],"bytes":[107639,107676]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo"},"3362:26":{"kind":"call","span":{"start":[3362,26],"end":[3362,107],"bytes":[107719,107800]},"callee":null},"3362:92":{"kind":"call","span":{"start":[3362,92],"end":[3362,101],"bytes":[107785,107794]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"}}},"github.com/benbjohnson/litestream.DB.MetaPath":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MetaPath","kind":"method","span":{"start":[561,1],"end":[563,2],"bytes":[20050,20105]},"signature":"github.com/benbjohnson/litestream.DB.MetaPath","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.Notify":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Notify","kind":"method","span":{"start":[706,1],"end":[710,2],"bytes":[24382,24480]},"signature":"github.com/benbjohnson/litestream.DB.Notify","parameters":[],"return_type":"\u003c-chan struct{}","metrics":{"cyclomatic":1},"body":{"707:2":{"kind":"call","span":{"start":[707,2],"end":[707,15],"bytes":[24424,24437]},"callee":null},"708:8":{"kind":"call","span":{"start":[708,8],"end":[708,23],"bytes":[24445,24460]},"callee":null}}},"github.com/benbjohnson/litestream.DB.Open":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open","kind":"method","span":{"start":[823,1],"end":[869,2],"bytes":[27883,29224]},"signature":"github.com/benbjohnson/litestream.DB.Open","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"824:2":{"kind":"call","span":{"start":[824,2],"end":[824,14],"bytes":[27919,27931]},"callee":null},"826:3":{"kind":"call","span":{"start":[826,3],"end":[826,17],"bytes":[27950,27964]},"callee":null},"830:22":{"kind":"call","span":{"start":[830,22],"end":[830,62],"bytes":[28084,28124]},"callee":null},"830:41":{"kind":"call","span":{"start":[830,41],"end":[830,61],"bytes":[28103,28123]},"callee":null},"831:2":{"kind":"call","span":{"start":[831,2],"end":[831,16],"bytes":[28126,28140]},"callee":null},"834:2":{"kind":"call","span":{"start":[834,2],"end":[834,18],"bytes":[28204,28220]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.initMetrics"},"838:10":{"kind":"call","span":{"start":[838,10],"end":[838,64],"bytes":[28288,28342]},"callee":null},"841:10":{"kind":"call","span":{"start":[841,10],"end":[841,71],"bytes":[28386,28447]},"callee":null},"844:10":{"kind":"call","span":{"start":[844,10],"end":[844,62],"bytes":[28493,28545]},"callee":null},"848:12":{"kind":"call","span":{"start":[848,12],"end":[848,39],"bytes":[28628,28655]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.removeTmpFiles"},"849:10":{"kind":"call","span":{"start":[849,10],"end":[849,56],"bytes":[28679,28725]},"callee":null},"859:3":{"kind":"call","span":{"start":[859,3],"end":[859,15],"bytes":[29037,29049]},"callee":null},"860:6":{"kind":"call","span":{"start":[860,6],"end":[860,51],"bytes":[29055,29100]},"callee":null,"is_goroutine":true},"864:2":{"kind":"call","span":{"start":[864,2],"end":[864,14],"bytes":[29163,29175]},"callee":null},"866:2":{"kind":"call","span":{"start":[866,2],"end":[866,16],"bytes":[29195,29209]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open/github.com/benbjohnson/litestream.DB.Open.closure_1","kind":"function","span":{"start":[860,1],"end":[860,51],"bytes":[29050,29100]},"signature":"github.com/benbjohnson/litestream.DB.Open.closure_1","parameters":[],"body":{"860:21":{"kind":"call","span":{"start":[860,21],"end":[860,33],"bytes":[29070,29082]},"callee":null},"860:35":{"kind":"call","span":{"start":[860,35],"end":[860,47],"bytes":[29084,29096]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.PageSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.PageSize","kind":"method","span":{"start":[714,1],"end":[718,2],"bytes":[24611,24701]},"signature":"github.com/benbjohnson/litestream.DB.PageSize","parameters":[],"return_type":"int","metrics":{"cyclomatic":1},"body":{"715:2":{"kind":"call","span":{"start":[715,2],"end":[715,15],"bytes":[24643,24656]},"callee":null},"716:8":{"kind":"call","span":{"start":[716,8],"end":[716,23],"bytes":[24664,24679]},"callee":null}}},"github.com/benbjohnson/litestream.DB.Path":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","kind":"method","span":{"start":[438,1],"end":[440,2],"bytes":[16743,16790]},"signature":"github.com/benbjohnson/litestream.DB.Path","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.Pos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","kind":"method","span":{"start":[663,1],"end":[694,2],"bytes":[23260,24036]},"signature":"github.com/benbjohnson/litestream.DB.Pos","parameters":[],"return_type":"(github.com/superfly/ltx.Pos, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"664:2":{"kind":"call","span":{"start":[664,2],"end":[664,15],"bytes":[23300,23313]},"callee":null},"665:8":{"kind":"call","span":{"start":[665,8],"end":[665,23],"bytes":[23321,23336]},"callee":null},"671:27":{"kind":"call","span":{"start":[671,27],"end":[671,38],"bytes":[23422,23433]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX"},"678:13":{"kind":"call","span":{"start":[678,13],"end":[678,44],"bytes":[23563,23594]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"679:12":{"kind":"call","span":{"start":[679,12],"end":[679,28],"bytes":[23606,23622]},"callee":null},"681:21":{"kind":"call","span":{"start":[681,21],"end":[681,91],"bytes":[23660,23730]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"681:53":{"kind":"call","span":{"start":[681,53],"end":[681,68],"bytes":[23692,23707]},"callee":null},"681:70":{"kind":"call","span":{"start":[681,70],"end":[681,85],"bytes":[23709,23724]},"callee":null},"683:8":{"kind":"call","span":{"start":[683,8],"end":[683,34],"bytes":[23741,23767]},"callee":null},"685:9":{"kind":"call","span":{"start":[685,9],"end":[685,26],"bytes":[23777,23794]},"callee":null},"686:12":{"kind":"call","span":{"start":[686,12],"end":[686,24],"bytes":[23806,23818]},"callee":null},"687:21":{"kind":"call","span":{"start":[687,21],"end":[687,132],"bytes":[23853,23964]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"687:55":{"kind":"call","span":{"start":[687,55],"end":[687,70],"bytes":[23887,23902]},"callee":null},"687:72":{"kind":"call","span":{"start":[687,72],"end":[687,87],"bytes":[23904,23919]},"callee":null},"687:89":{"kind":"call","span":{"start":[687,89],"end":[687,131],"bytes":[23921,23963]},"callee":null},"690:9":{"kind":"call","span":{"start":[690,9],"end":[690,27],"bytes":[23977,23995]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos/github.com/benbjohnson/litestream.DB.Pos.closure_1","kind":"function","span":{"start":[683,1],"end":[683,34],"bytes":[23734,23767]},"signature":"github.com/benbjohnson/litestream.DB.Pos.closure_1","parameters":[],"body":{"683:21":{"kind":"call","span":{"start":[683,21],"end":[683,30],"bytes":[23754,23763]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.RecordSuccessfulSync":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.RecordSuccessfulSync","kind":"method","span":{"start":[722,1],"end":[726,2],"bytes":[24843,24993]},"signature":"github.com/benbjohnson/litestream.DB.RecordSuccessfulSync","parameters":[],"metrics":{"cyclomatic":1},"body":{"723:2":{"kind":"call","span":{"start":[723,2],"end":[723,32],"bytes":[24883,24913]},"callee":null},"724:8":{"kind":"call","span":{"start":[724,8],"end":[724,40],"bytes":[24921,24953]},"callee":null},"725:28":{"kind":"call","span":{"start":[725,28],"end":[725,38],"bytes":[24981,24991]},"callee":null}}},"github.com/benbjohnson/litestream.DB.ResetLocalState":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState","kind":"method","span":{"start":[578,1],"end":[597,2],"bytes":[20547,21132]},"signature":"github.com/benbjohnson/litestream.DB.ResetLocalState","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[578,1],"end":[578,59],"bytes":[20547,20605]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"579:2":{"kind":"call","span":{"start":[579,2],"end":[581,26],"bytes":[20607,20711]},"callee":null},"581:14":{"kind":"call","span":{"start":[581,14],"end":[581,25],"bytes":[20699,20710]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir"},"584:12":{"kind":"call","span":{"start":[584,12],"end":[584,37],"bytes":[20749,20774]},"callee":null},"584:25":{"kind":"call","span":{"start":[584,25],"end":[584,36],"bytes":[20762,20773]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir"},"584:54":{"kind":"call","span":{"start":[584,54],"end":[584,72],"bytes":[20791,20809]},"callee":null},"585:10":{"kind":"call","span":{"start":[585,10],"end":[585,53],"bytes":[20821,20864]},"callee":null},"589:2":{"kind":"call","span":{"start":[589,2],"end":[589,27],"bytes":[20901,20926]},"callee":null},"590:25":{"kind":"call","span":{"start":[590,25],"end":[590,52],"bytes":[20951,20978]},"callee":null},"591:2":{"kind":"call","span":{"start":[591,2],"end":[591,29],"bytes":[20980,21007]},"callee":null},"593:2":{"kind":"call","span":{"start":[593,2],"end":[593,25],"bytes":[21010,21033]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"},"595:2":{"kind":"call","span":{"start":[595,2],"end":[595,84],"bytes":[21036,21118]},"callee":null}}},"github.com/benbjohnson/litestream.DB.SQLDB":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SQLDB","kind":"method","span":{"start":[433,1],"end":[435,2],"bytes":[16652,16699]},"signature":"github.com/benbjohnson/litestream.DB.SQLDB","parameters":[],"return_type":"*database/sql.DB","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.SetLogger":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetLogger","kind":"method","span":{"start":[419,1],"end":[430,2],"bytes":[16254,16584]},"signature":"github.com/benbjohnson/litestream.DB.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[419,1],"end":[419,47],"bytes":[16254,16300]}}],"metrics":{"cyclomatic":4},"body":{"421:12":{"kind":"call","span":{"start":[421,12],"end":[421,26],"bytes":[16332,16346]},"callee":null},"425:26":{"kind":"call","span":{"start":[425,26],"end":[425,77],"bytes":[16421,16472]},"callee":null},"425:3":{"kind":"call","span":{"start":[425,3],"end":[425,78],"bytes":[16398,16473]},"callee":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.setLogger"},"428:3":{"kind":"call","span":{"start":[428,3],"end":[428,51],"bytes":[16531,16579]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.SetLogger"},"428:31":{"kind":"call","span":{"start":[428,31],"end":[428,50],"bytes":[16559,16578]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger"}}},"github.com/benbjohnson/litestream.DB.SetMetaPath":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetMetaPath","kind":"method","span":{"start":[566,1],"end":[568,2],"bytes":[20158,20220]},"signature":"github.com/benbjohnson/litestream.DB.SetMetaPath","parameters":[{"name":"path","type":"string","span":{"start":[566,1],"end":[566,41],"bytes":[20158,20198]}}],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.Snapshot":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot","kind":"method","span":{"start":[3007,1],"end":[3024,2],"bytes":[96361,96783]},"signature":"github.com/benbjohnson/litestream.DB.Snapshot","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[3007,1],"end":[3007,69],"bytes":[96361,96429]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"3008:17":{"kind":"call","span":{"start":[3008,17],"end":[3008,39],"bytes":[96446,96468]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SnapshotReader"},"3012:8":{"kind":"call","span":{"start":[3012,8],"end":[3012,34],"bytes":[96514,96540]},"callee":null},"3014:15":{"kind":"call","span":{"start":[3014,15],"end":[3014,81],"bytes":[96556,96622]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile"},"3019:2":{"kind":"call","span":{"start":[3019,2],"end":[3019,27],"bytes":[96664,96689]},"callee":null},"3021:2":{"kind":"call","span":{"start":[3021,2],"end":[3021,29],"bytes":[96735,96762]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot/github.com/benbjohnson/litestream.DB.Snapshot.closure_1","kind":"function","span":{"start":[3012,1],"end":[3012,34],"bytes":[96507,96540]},"signature":"github.com/benbjohnson/litestream.DB.Snapshot.closure_1","parameters":[],"body":{"3012:21":{"kind":"call","span":{"start":[3012,21],"end":[3012,30],"bytes":[96527,96536]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.SnapshotReader":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SnapshotReader","kind":"method","span":{"start":[2782,1],"end":[2794,2],"bytes":[89442,89739]},"signature":"github.com/benbjohnson/litestream.DB.SnapshotReader","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2782,1],"end":[2782,84],"bytes":[89442,89525]}}],"return_type":"(github.com/superfly/ltx.Pos, io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"2783:14":{"kind":"call","span":{"start":[2783,14],"end":[2783,38],"bytes":[89539,89563]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition"},"2788:12":{"kind":"call","span":{"start":[2788,12],"end":[2788,39],"bytes":[89625,89652]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotReader"},"2790:3":{"kind":"call","span":{"start":[2790,3],"end":[2790,14],"bytes":[89672,89683]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/github.com/benbjohnson/litestream.snapshotReadPosition.close"}}},"github.com/benbjohnson/litestream.DB.Sync":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync","kind":"method","span":{"start":[1286,1],"end":[1299,2],"bytes":[41251,41557]},"signature":"github.com/benbjohnson/litestream.DB.Sync","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1286,1],"end":[1286,48],"bytes":[41251,41298]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"1288:13":{"kind":"call","span":{"start":[1288,13],"end":[1288,22],"bytes":[41318,41327]},"callee":null},"1289:11":{"kind":"call","span":{"start":[1289,11],"end":[1289,29],"bytes":[41352,41370]},"callee":null},"1292:18":{"kind":"call","span":{"start":[1292,18],"end":[1292,54],"bytes":[41393,41429]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncOnce"}}},"github.com/benbjohnson/litestream.DB.SyncAndWait":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncAndWait","kind":"method","span":{"start":[769,1],"end":[781,2],"bytes":[26300,26616]},"signature":"github.com/benbjohnson/litestream.DB.SyncAndWait","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[769,1],"end":[769,55],"bytes":[26300,26354]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"771:10":{"kind":"call","span":{"start":[771,10],"end":[771,45],"bytes":[26388,26423]},"callee":null},"774:12":{"kind":"call","span":{"start":[774,12],"end":[774,24],"bytes":[26439,26451]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync"},"775:10":{"kind":"call","span":{"start":[775,10],"end":[775,40],"bytes":[26475,26505]},"callee":null},"777:12":{"kind":"call","span":{"start":[777,12],"end":[777,32],"bytes":[26520,26540]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync"},"778:10":{"kind":"call","span":{"start":[778,10],"end":[778,45],"bytes":[26564,26599]},"callee":null}}},"github.com/benbjohnson/litestream.DB.SyncDiagnostic":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncDiagnostic","kind":"method","span":{"start":[443,1],"end":[482,2],"bytes":[16866,18214]},"signature":"github.com/benbjohnson/litestream.DB.SyncDiagnostic","parameters":[],"return_type":"github.com/benbjohnson/litestream.SyncDiagnostic","metrics":{"cyclomatic":6},"body":{"444:2":{"kind":"call","span":{"start":[444,2],"end":[444,21],"bytes":[16915,16934]},"callee":null},"445:8":{"kind":"call","span":{"start":[445,8],"end":[445,29],"bytes":[16942,16963]},"callee":null},"450:24":{"kind":"call","span":{"start":[450,24],"end":[450,53],"bytes":[17088,17117]},"callee":null},"451:24":{"kind":"call","span":{"start":[451,24],"end":[451,49],"bytes":[17142,17167]},"callee":null},"452:24":{"kind":"call","span":{"start":[452,24],"end":[452,48],"bytes":[17192,17216]},"callee":null},"461:6":{"kind":"call","span":{"start":[461,6],"end":[461,46],"bytes":[17565,17605]},"callee":null},"464:30":{"kind":"call","span":{"start":[464,30],"end":[464,73],"bytes":[17724,17767]},"callee":null},"466:6":{"kind":"call","span":{"start":[466,6],"end":[466,36],"bytes":[17786,17816]},"callee":null},"470:6":{"kind":"call","span":{"start":[470,6],"end":[470,36],"bytes":[17894,17924]},"callee":null},"474:6":{"kind":"call","span":{"start":[474,6],"end":[474,36],"bytes":[18002,18032]},"callee":null},"476:28":{"kind":"call","span":{"start":[476,28],"end":[476,40],"bytes":[18093,18105]},"callee":null},"477:10":{"kind":"call","span":{"start":[477,10],"end":[477,20],"bytes":[18117,18127]},"callee":null},"479:25":{"kind":"call","span":{"start":[479,25],"end":[479,55],"bytes":[18156,18186]},"callee":null}}},"github.com/benbjohnson/litestream.DB.SyncStatus":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncStatus","kind":"method","span":{"start":[745,1],"end":[765,2],"bytes":[25625,26171]},"signature":"github.com/benbjohnson/litestream.DB.SyncStatus","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[745,1],"end":[745,68],"bytes":[25625,25692]}}],"return_type":"(github.com/benbjohnson/litestream.SyncStatus, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"747:24":{"kind":"call","span":{"start":[747,24],"end":[747,59],"bytes":[25740,25775]},"callee":null},"750:19":{"kind":"call","span":{"start":[750,19],"end":[750,27],"bytes":[25798,25806]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"752:24":{"kind":"call","span":{"start":[752,24],"end":[752,61],"bytes":[25847,25884]},"callee":null},"755:20":{"kind":"call","span":{"start":[755,20],"end":[755,43],"bytes":[25908,25931]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.calcPos"},"757:24":{"kind":"call","span":{"start":[757,24],"end":[757,62],"bytes":[25972,26010]},"callee":null}}},"github.com/benbjohnson/litestream.DB.WALPath":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","kind":"method","span":{"start":[556,1],"end":[558,2],"bytes":[19934,19993]},"signature":"github.com/benbjohnson/litestream.DB.WALPath","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.DB.acquireReadLock":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.acquireReadLock","kind":"method","span":{"start":[1244,1],"end":[1267,2],"bytes":[39962,40703]},"signature":"github.com/benbjohnson/litestream.DB.acquireReadLock","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1244,1],"end":[1244,59],"bytes":[39962,40020]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1253:13":{"kind":"call","span":{"start":[1253,13],"end":[1253,59],"bytes":[40358,40404]},"callee":null},"1253:27":{"kind":"call","span":{"start":[1253,27],"end":[1253,53],"bytes":[40372,40398]},"callee":null},"1259:15":{"kind":"call","span":{"start":[1259,15],"end":[1259,75],"bytes":[40497,40557]},"callee":null},"1260:7":{"kind":"call","span":{"start":[1260,7],"end":[1260,20],"bytes":[40578,40591]},"callee":null}}},"github.com/benbjohnson/litestream.DB.applySyncExecutor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor","kind":"method","span":{"start":[2025,1],"end":[2054,2],"bytes":[65496,66196]},"signature":"github.com/benbjohnson/litestream.DB.applySyncExecutor","parameters":[{"name":"exec","type":"*github.com/benbjohnson/litestream.syncExecutor","span":{"start":[2025,1],"end":[2025,67],"bytes":[65496,65562]}},{"name":"notify","type":"bool","span":{"start":[2025,1],"end":[2025,67],"bytes":[65496,65562]}}],"metrics":{"cyclomatic":5},"body":{"2034:3":{"kind":"call","span":{"start":[2034,3],"end":[2034,16],"bytes":[65826,65839]},"callee":null},"2037:3":{"kind":"call","span":{"start":[2037,3],"end":[2037,18],"bytes":[65882,65897]},"callee":null},"2041:3":{"kind":"call","span":{"start":[2041,3],"end":[2041,28],"bytes":[65933,65958]},"callee":null},"2044:3":{"kind":"call","span":{"start":[2044,3],"end":[2044,30],"bytes":[66022,66049]},"callee":null},"2047:2":{"kind":"call","span":{"start":[2047,2],"end":[2047,14],"bytes":[66055,66067]},"callee":null},"2050:3":{"kind":"call","span":{"start":[2050,3],"end":[2050,19],"bytes":[66125,66141]},"callee":null},"2051:15":{"kind":"call","span":{"start":[2051,15],"end":[2051,34],"bytes":[66156,66175]},"callee":null},"2053:2":{"kind":"call","span":{"start":[2053,2],"end":[2053,16],"bytes":[66180,66194]},"callee":null}}},"github.com/benbjohnson/litestream.DB.applySyncResult":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncResult","kind":"method","span":{"start":[1989,1],"end":[2002,2],"bytes":[64732,65122]},"signature":"github.com/benbjohnson/litestream.DB.applySyncResult","parameters":[{"name":"state","type":"*github.com/benbjohnson/litestream.syncState","span":{"start":[1989,1],"end":[1989,69],"bytes":[64732,64800]}},{"name":"result","type":"github.com/benbjohnson/litestream.syncResult","span":{"start":[1989,1],"end":[1989,69],"bytes":[64732,64800]}}],"metrics":{"cyclomatic":3},"body":{"1993:3":{"kind":"call","span":{"start":[1993,3],"end":[1993,16],"bytes":[64920,64933]},"callee":null},"1995:3":{"kind":"call","span":{"start":[1995,3],"end":[1995,18],"bytes":[64964,64979]},"callee":null},"1998:3":{"kind":"call","span":{"start":[1998,3],"end":[1998,28],"bytes":[65016,65041]},"callee":null},"2000:3":{"kind":"call","span":{"start":[2000,3],"end":[2000,30],"bytes":[65090,65117]},"callee":null}}},"github.com/benbjohnson/litestream.DB.beginSyncDiag":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncDiag","kind":"method","span":{"start":[484,1],"end":[502,2],"bytes":[18216,18753]},"signature":"github.com/benbjohnson/litestream.DB.beginSyncDiag","parameters":[{"name":"operation","type":"github.com/benbjohnson/litestream.diagOp","span":{"start":[484,1],"end":[484,48],"bytes":[18216,18263]}}],"metrics":{"cyclomatic":1},"body":{"485:9":{"kind":"call","span":{"start":[485,9],"end":[485,19],"bytes":[18272,18282]},"callee":null},"486:16":{"kind":"call","span":{"start":[486,16],"end":[486,32],"bytes":[18298,18314]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize"},"488:2":{"kind":"call","span":{"start":[488,2],"end":[488,20],"bytes":[18317,18335]},"callee":null},"501:2":{"kind":"call","span":{"start":[501,2],"end":[501,22],"bytes":[18731,18751]},"callee":null}}},"github.com/benbjohnson/litestream.DB.beginSyncExecutorWait":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncExecutorWait","kind":"method","span":{"start":[530,1],"end":[537,2],"bytes":[19293,19510]},"signature":"github.com/benbjohnson/litestream.DB.beginSyncExecutorWait","parameters":[],"metrics":{"cyclomatic":2},"body":{"531:2":{"kind":"call","span":{"start":[531,2],"end":[531,20],"bytes":[19334,19352]},"callee":null},"532:8":{"kind":"call","span":{"start":[532,8],"end":[532,28],"bytes":[19360,19380]},"callee":null},"534:37":{"kind":"call","span":{"start":[534,37],"end":[534,47],"bytes":[19460,19470]},"callee":null}}},"github.com/benbjohnson/litestream.DB.bumpLitestreamSeq":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.bumpLitestreamSeq","kind":"method","span":{"start":[1638,1],"end":[1641,2],"bytes":[53165,53373]},"signature":"github.com/benbjohnson/litestream.DB.bumpLitestreamSeq","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1638,1],"end":[1638,61],"bytes":[53165,53225]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"1639:12":{"kind":"call","span":{"start":[1639,12],"end":[1639,134],"bytes":[53237,53359]},"callee":null}}},"github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","kind":"method","span":{"start":[1660,1],"end":[1737,2],"bytes":[54138,56383]},"signature":"github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1660,1],"end":[1660,70],"bytes":[54138,54207]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"1662:16":{"kind":"call","span":{"start":[1662,16],"end":[1662,24],"bytes":[54269,54277]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"1664:10":{"kind":"call","span":{"start":[1664,10],"end":[1664,54],"bytes":[54304,54348]},"callee":null},"1668:22":{"kind":"call","span":{"start":[1668,22],"end":[1668,55],"bytes":[54411,54444]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo"},"1670:10":{"kind":"call","span":{"start":[1670,10],"end":[1670,53],"bytes":[54471,54514]},"callee":null},"1680:2":{"kind":"call","span":{"start":[1680,2],"end":[1682,39],"bytes":[54728,54842]},"callee":null},"1685:11":{"kind":"call","span":{"start":[1685,11],"end":[1685,28],"bytes":[54879,54896]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir"},"1686:12":{"kind":"call","span":{"start":[1686,12],"end":[1686,31],"bytes":[54908,54927]},"callee":null},"1686:48":{"kind":"call","span":{"start":[1686,48],"end":[1686,66],"bytes":[54944,54962]},"callee":null},"1687:10":{"kind":"call","span":{"start":[1687,10],"end":[1687,52],"bytes":[54974,55016]},"callee":null},"1689:2":{"kind":"call","span":{"start":[1689,2],"end":[1689,25],"bytes":[55021,55044]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"},"1690:12":{"kind":"call","span":{"start":[1690,12],"end":[1690,48],"bytes":[55056,55092]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll"},"1691:10":{"kind":"call","span":{"start":[1691,10],"end":[1691,54],"bytes":[55116,55160]},"callee":null},"1696:17":{"kind":"call","span":{"start":[1696,17],"end":[1696,78],"bytes":[55285,55346]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile"},"1698:10":{"kind":"call","span":{"start":[1698,10],"end":[1698,52],"bytes":[55373,55415]},"callee":null},"1700:8":{"kind":"call","span":{"start":[1700,8],"end":[1700,39],"bytes":[55426,55457]},"callee":null},"1703:15":{"kind":"call","span":{"start":[1703,15],"end":[1703,46],"bytes":[55518,55549]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"1706:18":{"kind":"call","span":{"start":[1706,18],"end":[1706,36],"bytes":[55599,55617]},"callee":null},"1708:10":{"kind":"call","span":{"start":[1708,10],"end":[1708,52],"bytes":[55644,55686]},"callee":null},"1710:8":{"kind":"call","span":{"start":[1710,8],"end":[1710,43],"bytes":[55697,55732]},"callee":null},"1712:15":{"kind":"call","span":{"start":[1712,15],"end":[1712,39],"bytes":[55779,55803]},"callee":null},"1713:7":{"kind":"call","span":{"start":[1713,7],"end":[1713,22],"bytes":[55824,55839]},"callee":null},"1714:10":{"kind":"call","span":{"start":[1714,10],"end":[1714,45],"bytes":[55849,55884]},"callee":null},"1717:12":{"kind":"call","span":{"start":[1717,12],"end":[1717,26],"bytes":[55900,55914]},"callee":null},"1718:7":{"kind":"call","span":{"start":[1718,7],"end":[1718,22],"bytes":[55935,55950]},"callee":null},"1719:10":{"kind":"call","span":{"start":[1719,10],"end":[1719,45],"bytes":[55960,55995]},"callee":null},"1722:12":{"kind":"call","span":{"start":[1722,12],"end":[1722,27],"bytes":[56011,56026]},"callee":null},"1723:10":{"kind":"call","span":{"start":[1723,10],"end":[1723,46],"bytes":[56050,56086]},"callee":null},"1727:12":{"kind":"call","span":{"start":[1727,12],"end":[1727,41],"bytes":[56148,56177]},"callee":null},"1728:10":{"kind":"call","span":{"start":[1728,10],"end":[1728,47],"bytes":[56201,56238]},"callee":null},"1730:2":{"kind":"call","span":{"start":[1730,2],"end":[1730,25],"bytes":[56243,56266]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"},"1732:2":{"kind":"call","span":{"start":[1732,2],"end":[1734,23],"bytes":[56269,56368]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica.closure_1","kind":"function","span":{"start":[1700,1],"end":[1700,39],"bytes":[55419,55457]},"signature":"github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica.closure_1","parameters":[],"body":{"1700:21":{"kind":"call","span":{"start":[1700,21],"end":[1700,35],"bytes":[55439,55453]},"callee":null}}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica.closure_2","kind":"function","span":{"start":[1710,1],"end":[1710,74],"bytes":[55690,55763]},"signature":"github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica.closure_2","parameters":[],"body":{"1710:21":{"kind":"call","span":{"start":[1710,21],"end":[1710,39],"bytes":[55710,55728]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.checkpoint":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpoint","kind":"method","span":{"start":[2491,1],"end":[2517,2],"bytes":[79907,80471]},"signature":"github.com/benbjohnson/litestream.DB.checkpoint","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2491,1],"end":[2491,85],"bytes":[79907,79991]}},{"name":"mode","type":"string","span":{"start":[2491,1],"end":[2491,85],"bytes":[79907,79991]}},{"name":"state","type":"*github.com/benbjohnson/litestream.syncState","span":{"start":[2491,1],"end":[2491,85],"bytes":[79907,79991]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"2492:14":{"kind":"call","span":{"start":[2492,14],"end":[2492,22],"bytes":[80005,80013]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"2494:10":{"kind":"call","span":{"start":[2494,10],"end":[2494,36],"bytes":[80040,80066]},"callee":null},"2501:15":{"kind":"call","span":{"start":[2501,15],"end":[2501,57],"bytes":[80143,80185]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"},"2506:2":{"kind":"call","span":{"start":[2506,2],"end":[2506,15],"bytes":[80239,80252]},"callee":null},"2509:2":{"kind":"call","span":{"start":[2509,2],"end":[2509,17],"bytes":[80291,80306]},"callee":null},"2511:3":{"kind":"call","span":{"start":[2511,3],"end":[2511,28],"bytes":[80338,80363]},"callee":null},"2514:3":{"kind":"call","span":{"start":[2514,3],"end":[2514,30],"bytes":[80427,80454]},"callee":null}}},"github.com/benbjohnson/litestream.DB.checkpointIfNeeded":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","kind":"method","span":{"start":[1478,1],"end":[1565,2],"bytes":[47383,50904]},"signature":"github.com/benbjohnson/litestream.DB.checkpointIfNeeded","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1478,1],"end":[1478,113],"bytes":[47383,47495]}},{"name":"exec","type":"*github.com/benbjohnson/litestream.syncExecutor","span":{"start":[1478,1],"end":[1478,113],"bytes":[47383,47495]}},{"name":"origWALSize","type":"int64","span":{"start":[1478,1],"end":[1478,113],"bytes":[47383,47495]}},{"name":"newWALSize","type":"int64","span":{"start":[1478,1],"end":[1478,113],"bytes":[47383,47495]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":19},"body":{"1482:6":{"kind":"call","span":{"start":[1482,6],"end":[1482,65],"bytes":[47540,47599]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold"},"1488:5":{"kind":"call","span":{"start":[1488,5],"end":[1488,45],"bytes":[47799,47839]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold"},"1489:24":{"kind":"call","span":{"start":[1489,24],"end":[1489,93],"bytes":[47865,47934]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize"},"1489:36":{"kind":"call","span":{"start":[1489,36],"end":[1489,55],"bytes":[47877,47896]},"callee":null},"1489:57":{"kind":"call","span":{"start":[1489,57],"end":[1489,92],"bytes":[47898,47933]},"callee":null},"1489:64":{"kind":"call","span":{"start":[1489,64],"end":[1489,91],"bytes":[47905,47932]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.effectiveTruncatePageN"},"1495:25":{"kind":"call","span":{"start":[1495,25],"end":[1495,84],"bytes":[48195,48254]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"},"1496:9":{"kind":"call","span":{"start":[1496,9],"end":[1496,31],"bytes":[48277,48299]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isSQLiteBusyError"},"1500:5":{"kind":"call","span":{"start":[1500,5],"end":[1500,101],"bytes":[48372,48468]},"callee":null},"1503:9":{"kind":"call","span":{"start":[1503,9],"end":[1503,68],"bytes":[48547,48606]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold"},"1504:6":{"kind":"call","span":{"start":[1504,6],"end":[1506,38],"bytes":[48614,48766]},"callee":null},"1514:3":{"kind":"call","span":{"start":[1514,3],"end":[1516,35],"bytes":[48885,48993]},"callee":null},"1517:21":{"kind":"call","span":{"start":[1517,21],"end":[1517,81],"bytes":[49014,49074]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"},"1518:20":{"kind":"call","span":{"start":[1518,20],"end":[1518,79],"bytes":[49094,49153]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold"},"1525:19":{"kind":"call","span":{"start":[1525,19],"end":[1525,82],"bytes":[49306,49369]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize"},"1525:31":{"kind":"call","span":{"start":[1525,31],"end":[1525,50],"bytes":[49318,49337]},"callee":null},"1525:52":{"kind":"call","span":{"start":[1525,52],"end":[1525,81],"bytes":[49339,49368]},"callee":null},"1526:16":{"kind":"call","span":{"start":[1526,16],"end":[1526,75],"bytes":[49387,49446]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"},"1529:7":{"kind":"call","span":{"start":[1529,7],"end":[1529,29],"bytes":[49618,49640]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isSQLiteBusyError"},"1530:5":{"kind":"call","span":{"start":[1530,5],"end":[1530,101],"bytes":[49647,49743]},"callee":null},"1544:14":{"kind":"call","span":{"start":[1544,14],"end":[1544,25],"bytes":[50196,50207]},"callee":null},"1546:11":{"kind":"call","span":{"start":[1546,11],"end":[1546,47],"bytes":[50236,50272]},"callee":null},"1550:17":{"kind":"call","span":{"start":[1550,17],"end":[1550,29],"bytes":[50358,50370]},"callee":null},"1550:6":{"kind":"call","span":{"start":[1550,6],"end":[1550,30],"bytes":[50347,50371]},"callee":null},"1550:71":{"kind":"call","span":{"start":[1550,71],"end":[1550,106],"bytes":[50412,50447]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize"},"1550:83":{"kind":"call","span":{"start":[1550,83],"end":[1550,102],"bytes":[50424,50443]},"callee":null},"1551:17":{"kind":"call","span":{"start":[1551,17],"end":[1551,76],"bytes":[50466,50525]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor"},"1554:8":{"kind":"call","span":{"start":[1554,8],"end":[1554,30],"bytes":[50700,50722]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isSQLiteBusyError"},"1555:6":{"kind":"call","span":{"start":[1555,6],"end":[1555,102],"bytes":[50730,50826]},"callee":null}}},"github.com/benbjohnson/litestream.DB.checkpointWithExecutor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","kind":"method","span":{"start":[2522,1],"end":[2706,2],"bytes":[80699,86958]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2522,1],"end":[2522,124],"bytes":[80699,80822]}},{"name":"mode","type":"string","span":{"start":[2522,1],"end":[2522,124],"bytes":[80699,80822]}},{"name":"exec","type":"*github.com/benbjohnson/litestream.syncExecutor","span":{"start":[2522,1],"end":[2522,124],"bytes":[80699,80822]}}],"return_type":"(bool, error)","error_channel":["error"],"metrics":{"cyclomatic":25},"body":{"2524:2":{"kind":"call","span":{"start":[2524,2],"end":[2528,5],"bytes":[80858,81015]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2531:6":{"kind":"call","span":{"start":[2531,6],"end":[2531,24],"bytes":[81134,81152]},"callee":null},"2533:4":{"kind":"call","span":{"start":[2533,4],"end":[2533,76],"bytes":[81196,81268]},"callee":null},"2535:4":{"kind":"call","span":{"start":[2535,4],"end":[2535,101],"bytes":[81283,81380]},"callee":null},"2539:8":{"kind":"call","span":{"start":[2539,8],"end":[2539,25],"bytes":[81415,81432]},"callee":null},"2543:2":{"kind":"call","span":{"start":[2543,2],"end":[2547,5],"bytes":[81541,81707]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2548:14":{"kind":"call","span":{"start":[2548,14],"end":[2548,41],"bytes":[81721,81748]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader"},"2548:28":{"kind":"call","span":{"start":[2548,28],"end":[2548,40],"bytes":[81735,81747]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"2554:2":{"kind":"call","span":{"start":[2554,2],"end":[2558,5],"bytes":[81858,82021]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2559:17":{"kind":"call","span":{"start":[2559,17],"end":[2559,65],"bytes":[82038,82086]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor"},"2561:17":{"kind":"call","span":{"start":[2561,17],"end":[2561,73],"bytes":[82120,82176]},"callee":null},"2563:2":{"kind":"call","span":{"start":[2563,2],"end":[2563,30],"bytes":[82181,82209]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult"},"2567:20":{"kind":"call","span":{"start":[2567,20],"end":[2567,43],"bytes":[82289,82312]},"callee":null},"2569:18":{"kind":"call","span":{"start":[2569,18],"end":[2569,73],"bytes":[82348,82403]},"callee":null},"2571:9":{"kind":"call","span":{"start":[2571,9],"end":[2575,6],"bytes":[82416,82488]},"callee":null},"2577:16":{"kind":"call","span":{"start":[2577,16],"end":[2577,91],"bytes":[82505,82580]},"callee":null},"2578:18":{"kind":"call","span":{"start":[2578,18],"end":[2578,57],"bytes":[82612,82651]},"callee":null},"2581:17":{"kind":"call","span":{"start":[2581,17],"end":[2581,65],"bytes":[82673,82721]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor"},"2583:18":{"kind":"call","span":{"start":[2583,18],"end":[2583,82],"bytes":[82757,82821]},"callee":null},"2585:3":{"kind":"call","span":{"start":[2585,3],"end":[2585,31],"bytes":[82828,82856]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult"},"2588:15":{"kind":"call","span":{"start":[2588,15],"end":[2588,54],"bytes":[82875,82914]},"callee":null},"2591:25":{"kind":"call","span":{"start":[2591,25],"end":[2591,90],"bytes":[83018,83083]},"callee":null},"2596:2":{"kind":"call","span":{"start":[2596,2],"end":[2600,5],"bytes":[83190,83347]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2601:20":{"kind":"call","span":{"start":[2601,20],"end":[2601,48],"bytes":[83367,83395]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint"},"2607:12":{"kind":"call","span":{"start":[2607,12],"end":[2607,31],"bytes":[83471,83490]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.rollback"},"2608:18":{"kind":"call","span":{"start":[2608,18],"end":[2608,76],"bytes":[83522,83580]},"callee":null},"2613:11":{"kind":"call","span":{"start":[2613,11],"end":[2613,36],"bytes":[83617,83642]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.bumpLitestreamSeq"},"2614:17":{"kind":"call","span":{"start":[2614,17],"end":[2614,59],"bytes":[83673,83715]},"callee":null},"2618:2":{"kind":"call","span":{"start":[2618,2],"end":[2622,5],"bytes":[83761,83927]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2623:16":{"kind":"call","span":{"start":[2623,16],"end":[2623,43],"bytes":[83943,83970]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader"},"2623:30":{"kind":"call","span":{"start":[2623,30],"end":[2623,42],"bytes":[83957,83969]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"2626:12":{"kind":"call","span":{"start":[2626,12],"end":[2626,35],"bytes":[84019,84042]},"callee":null},"2633:17":{"kind":"call","span":{"start":[2633,17],"end":[2633,65],"bytes":[84206,84254]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor"},"2635:18":{"kind":"call","span":{"start":[2635,18],"end":[2635,81],"bytes":[84290,84353]},"callee":null},"2637:3":{"kind":"call","span":{"start":[2637,3],"end":[2637,31],"bytes":[84360,84388]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult"},"2649:17":{"kind":"call","span":{"start":[2649,17],"end":[2649,65],"bytes":[84925,84973]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor"},"2651:18":{"kind":"call","span":{"start":[2651,18],"end":[2651,73],"bytes":[85009,85064]},"callee":null},"2653:3":{"kind":"call","span":{"start":[2653,3],"end":[2653,31],"bytes":[85071,85099]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult"},"2659:2":{"kind":"call","span":{"start":[2659,2],"end":[2663,5],"bytes":[85233,85406]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2664:13":{"kind":"call","span":{"start":[2664,13],"end":[2664,36],"bytes":[85419,85442]},"callee":null},"2666:17":{"kind":"call","span":{"start":[2666,17],"end":[2666,45],"bytes":[85476,85504]},"callee":null},"2668:8":{"kind":"call","span":{"start":[2668,8],"end":[2668,37],"bytes":[85515,85544]},"callee":null},"2674:15":{"kind":"call","span":{"start":[2674,15],"end":[2674,83],"bytes":[85849,85917]},"callee":null},"2675:17":{"kind":"call","span":{"start":[2675,17],"end":[2675,56],"bytes":[85948,85987]},"callee":null},"2679:2":{"kind":"call","span":{"start":[2679,2],"end":[2683,5],"bytes":[86056,86225]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2686:17":{"kind":"call","span":{"start":[2686,17],"end":[2686,52],"bytes":[86300,86335]},"callee":null},"2687:17":{"kind":"call","span":{"start":[2687,17],"end":[2687,52],"bytes":[86353,86388]},"callee":null},"2691:16":{"kind":"call","span":{"start":[2691,16],"end":[2691,57],"bytes":[86478,86519]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync"},"2693:17":{"kind":"call","span":{"start":[2693,17],"end":[2693,72],"bytes":[86553,86608]},"callee":null},"2695:2":{"kind":"call","span":{"start":[2695,2],"end":[2695,30],"bytes":[86613,86641]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult"},"2700:12":{"kind":"call","span":{"start":[2700,12],"end":[2700,24],"bytes":[86799,86811]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.rollback"},"2701:17":{"kind":"call","span":{"start":[2701,17],"end":[2701,67],"bytes":[86842,86892]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_1","kind":"function","span":{"start":[2525,1],"end":[2528,5],"bytes":[80903,81015]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_1","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2525,1],"end":[2525,23],"bytes":[80903,80925]}}],"body":{}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_2","kind":"function","span":{"start":[2544,1],"end":[2547,5],"bytes":[81595,81707]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_2","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2544,1],"end":[2544,23],"bytes":[81595,81617]}}],"body":{}},"closure_3":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_3","kind":"function","span":{"start":[2555,1],"end":[2558,5],"bytes":[81909,82021]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_3","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2555,1],"end":[2555,23],"bytes":[81909,81931]}}],"body":{}},"closure_4":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_4","kind":"function","span":{"start":[2571,1],"end":[2575,6],"bytes":[82408,82488]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_4","parameters":[],"body":{"2573:9":{"kind":"call","span":{"start":[2573,9],"end":[2573,28],"bytes":[82458,82477]},"callee":null}}},"closure_5":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_5","kind":"function","span":{"start":[2597,1],"end":[2600,5],"bytes":[83235,83347]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_5","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2597,1],"end":[2597,23],"bytes":[83235,83257]}}],"body":{}},"closure_6":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_6","kind":"function","span":{"start":[2619,1],"end":[2622,5],"bytes":[83815,83927]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_6","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2619,1],"end":[2619,23],"bytes":[83815,83837]}}],"body":{}},"closure_7":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_7","kind":"function","span":{"start":[2660,1],"end":[2663,5],"bytes":[85294,85406]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_7","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2660,1],"end":[2660,23],"bytes":[85294,85316]}}],"body":{}},"closure_8":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_8","kind":"function","span":{"start":[2668,1],"end":[2668,37],"bytes":[85508,85544]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_8","parameters":[],"body":{"2668:21":{"kind":"call","span":{"start":[2668,21],"end":[2668,33],"bytes":[85528,85540]},"callee":null}}},"closure_9":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor/github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_9","kind":"function","span":{"start":[2680,1],"end":[2683,5],"bytes":[86113,86225]},"signature":"github.com/benbjohnson/litestream.DB.checkpointWithExecutor.closure_9","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2680,1],"end":[2680,23],"bytes":[86113,86135]}}],"body":{}}}},"github.com/benbjohnson/litestream.DB.deleteLocalLTXFile":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.deleteLocalLTXFile","kind":"method","span":{"start":[620,1],"end":[629,2],"bytes":[22008,22271]},"signature":"github.com/benbjohnson/litestream.DB.deleteLocalLTXFile","parameters":[{"name":"level","type":"int","span":{"start":[620,1],"end":[620,79],"bytes":[22008,22086]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[620,1],"end":[620,79],"bytes":[22008,22086]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[620,1],"end":[620,79],"bytes":[22008,22086]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"621:10":{"kind":"call","span":{"start":[621,10],"end":[621,45],"bytes":[22096,22131]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"622:12":{"kind":"call","span":{"start":[622,12],"end":[622,27],"bytes":[22143,22158]},"callee":null},"622:44":{"kind":"call","span":{"start":[622,44],"end":[622,62],"bytes":[22175,22193]},"callee":null},"626:3":{"kind":"call","span":{"start":[626,3],"end":[626,26],"bytes":[22231,22254]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"}}},"github.com/benbjohnson/litestream.DB.deleteMetrics":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.deleteMetrics","kind":"method","span":{"start":[382,1],"end":[416,2],"bytes":[15025,16181]},"signature":"github.com/benbjohnson/litestream.DB.deleteMetrics","parameters":[],"metrics":{"cyclomatic":4},"body":{"383:2":{"kind":"call","span":{"start":[383,2],"end":[383,23],"bytes":[15058,15079]},"callee":null},"384:8":{"kind":"call","span":{"start":[384,8],"end":[384,31],"bytes":[15087,15110]},"callee":null},"390:10":{"kind":"call","span":{"start":[390,10],"end":[390,32],"bytes":[15191,15213]},"callee":null},"393:3":{"kind":"call","span":{"start":[393,3],"end":[393,41],"bytes":[15292,15330]},"callee":null},"394:3":{"kind":"call","span":{"start":[394,3],"end":[394,81],"bytes":[15333,15411]},"callee":null},"401:2":{"kind":"call","span":{"start":[401,2],"end":[401,39],"bytes":[15503,15540]},"callee":null},"404:2":{"kind":"call","span":{"start":[404,2],"end":[404,43],"bytes":[15587,15628]},"callee":null},"405:2":{"kind":"call","span":{"start":[405,2],"end":[405,44],"bytes":[15630,15672]},"callee":null},"406:2":{"kind":"call","span":{"start":[406,2],"end":[406,52],"bytes":[15674,15724]},"callee":null},"407:2":{"kind":"call","span":{"start":[407,2],"end":[407,46],"bytes":[15726,15770]},"callee":null},"408:2":{"kind":"call","span":{"start":[408,2],"end":[408,44],"bytes":[15772,15814]},"callee":null},"409:2":{"kind":"call","span":{"start":[409,2],"end":[409,49],"bytes":[15816,15863]},"callee":null},"410:2":{"kind":"call","span":{"start":[410,2],"end":[410,50],"bytes":[15865,15913]},"callee":null},"411:2":{"kind":"call","span":{"start":[411,2],"end":[411,45],"bytes":[15915,15958]},"callee":null},"412:2":{"kind":"call","span":{"start":[412,2],"end":[412,60],"bytes":[15960,16018]},"callee":null},"413:2":{"kind":"call","span":{"start":[413,2],"end":[413,50],"bytes":[16020,16068]},"callee":null},"414:2":{"kind":"call","span":{"start":[414,2],"end":[414,55],"bytes":[16070,16123]},"callee":null},"415:2":{"kind":"call","span":{"start":[415,2],"end":[415,56],"bytes":[16125,16179]},"callee":null}}},"github.com/benbjohnson/litestream.DB.detectFullCheckpoint":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.detectFullCheckpoint","kind":"method","span":{"start":[1939,1],"end":[1967,2],"bytes":[63389,64226]},"signature":"github.com/benbjohnson/litestream.DB.detectFullCheckpoint","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1939,1],"end":[1939,96],"bytes":[63389,63484]}},{"name":"knownSalts","type":"[][2]uint32","span":{"start":[1939,1],"end":[1939,96],"bytes":[63389,63484]}}],"return_type":"(bool, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"1940:18":{"kind":"call","span":{"start":[1940,18],"end":[1940,39],"bytes":[63502,63523]},"callee":null},"1940:26":{"kind":"call","span":{"start":[1940,26],"end":[1940,38],"bytes":[63510,63522]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1942:17":{"kind":"call","span":{"start":[1942,17],"end":[1942,53],"bytes":[63557,63593]},"callee":null},"1944:8":{"kind":"call","span":{"start":[1944,8],"end":[1944,23],"bytes":[63604,63619]},"callee":null},"1947:5":{"kind":"call","span":{"start":[1947,5],"end":[1947,20],"bytes":[63654,63669]},"callee":null},"1948:30":{"kind":"call","span":{"start":[1948,30],"end":[1948,45],"bytes":[63705,63720]},"callee":null},"1951:13":{"kind":"call","span":{"start":[1951,13],"end":[1951,90],"bytes":[63740,63817]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader"},"1951:35":{"kind":"call","span":{"start":[1951,35],"end":[1951,89],"bytes":[63762,63816]},"callee":null},"1953:17":{"kind":"call","span":{"start":[1953,17],"end":[1953,54],"bytes":[63851,63888]},"callee":null},"1955:12":{"kind":"call","span":{"start":[1955,12],"end":[1955,50],"bytes":[63903,63941]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.FrameSaltsUntil"},"1957:17":{"kind":"call","span":{"start":[1957,17],"end":[1957,57],"bytes":[63975,64015]},"callee":null},"1962:3":{"kind":"call","span":{"start":[1962,3],"end":[1962,18],"bytes":[64094,64109]},"callee":null},"1966:9":{"kind":"call","span":{"start":[1966,9],"end":[1966,15],"bytes":[64208,64214]},"callee":null}}},"github.com/benbjohnson/litestream.DB.effectiveTruncatePageN":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.effectiveTruncatePageN","kind":"method","span":{"start":[1575,1],"end":[1580,2],"bytes":[51251,51383]},"signature":"github.com/benbjohnson/litestream.DB.effectiveTruncatePageN","parameters":[],"return_type":"int","metrics":{"cyclomatic":2},"body":{}},"github.com/benbjohnson/litestream.DB.ensureWALExists":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists","kind":"method","span":{"start":[1644,1],"end":[1652,2],"bytes":[53444,53756]},"signature":"github.com/benbjohnson/litestream.DB.ensureWALExists","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1644,1],"end":[1644,65],"bytes":[53444,53508]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1646:16":{"kind":"call","span":{"start":[1646,16],"end":[1646,37],"bytes":[53561,53582]},"callee":null},"1646:24":{"kind":"call","span":{"start":[1646,24],"end":[1646,36],"bytes":[53569,53581]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1646:53":{"kind":"call","span":{"start":[1646,53],"end":[1646,62],"bytes":[53598,53607]},"callee":null},"1651:9":{"kind":"call","span":{"start":[1651,9],"end":[1651,34],"bytes":[53729,53754]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.bumpLitestreamSeq"}}},"github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold","kind":"method","span":{"start":[1569,1],"end":[1573,2],"bytes":[51023,51249]},"signature":"github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold","parameters":[{"name":"walSize","type":"int64","span":{"start":[1569,1],"end":[1569,61],"bytes":[51023,51083]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"1570:19":{"kind":"call","span":{"start":[1570,19],"end":[1570,46],"bytes":[51102,51129]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.effectiveTruncatePageN"},"1572:14":{"kind":"call","span":{"start":[1572,14],"end":[1572,69],"bytes":[51192,51247]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize"},"1572:26":{"kind":"call","span":{"start":[1572,26],"end":[1572,45],"bytes":[51204,51223]},"callee":null},"1572:47":{"kind":"call","span":{"start":[1572,47],"end":[1572,68],"bytes":[51225,51246]},"callee":null}}},"github.com/benbjohnson/litestream.DB.execCheckpoint":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint","kind":"method","span":{"start":[2710,1],"end":[2754,2],"bytes":[87105,88720]},"signature":"github.com/benbjohnson/litestream.DB.execCheckpoint","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2710,1],"end":[2710,92],"bytes":[87105,87196]}},{"name":"mode","type":"string","span":{"start":[2710,1],"end":[2710,92],"bytes":[87105,87196]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"2717:7":{"kind":"call","span":{"start":[2717,7],"end":[2717,17],"bytes":[87319,87329]},"callee":null},"2718:8":{"kind":"call","span":{"start":[2718,8],"end":[2725,5],"bytes":[87337,87597]},"callee":null},"2729:12":{"kind":"call","span":{"start":[2729,12],"end":[2729,32],"bytes":[87754,87774]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.releaseReadLock"},"2730:13":{"kind":"call","span":{"start":[2730,13],"end":[2730,53],"bytes":[87801,87841]},"callee":null},"2732:8":{"kind":"call","span":{"start":[2732,8],"end":[2732,48],"bytes":[87852,87892]},"callee":null},"2743:12":{"kind":"call","span":{"start":[2743,12],"end":[2743,46],"bytes":[88324,88358]},"callee":null},"2746:2":{"kind":"call","span":{"start":[2746,2],"end":[2746,104],"bytes":[88425,88527]},"callee":null},"2746:56":{"kind":"call","span":{"start":[2746,56],"end":[2746,103],"bytes":[88479,88526]},"callee":null},"2749:12":{"kind":"call","span":{"start":[2749,12],"end":[2749,35],"bytes":[88602,88625]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.acquireReadLock"},"2750:13":{"kind":"call","span":{"start":[2750,13],"end":[2750,55],"bytes":[88652,88694]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint/github.com/benbjohnson/litestream.DB.execCheckpoint.closure_1","kind":"function","span":{"start":[2718,1],"end":[2725,5],"bytes":[87330,87597]},"signature":"github.com/benbjohnson/litestream.DB.execCheckpoint.closure_1","parameters":[],"body":{"2720:3":{"kind":"call","span":{"start":[2720,3],"end":[2720,40],"bytes":[87392,87429]},"callee":null},"2722:4":{"kind":"call","span":{"start":[2722,4],"end":[2722,46],"bytes":[87457,87499]},"callee":null},"2724:24":{"kind":"call","span":{"start":[2724,24],"end":[2724,67],"bytes":[87533,87576]},"callee":null},"2724:3":{"kind":"call","span":{"start":[2724,3],"end":[2724,83],"bytes":[87512,87592]},"callee":null},"2724:69":{"kind":"call","span":{"start":[2724,69],"end":[2724,82],"bytes":[87578,87591]},"callee":null}}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint/github.com/benbjohnson/litestream.DB.execCheckpoint.closure_2","kind":"function","span":{"start":[2732,1],"end":[2732,48],"bytes":[87845,87892]},"signature":"github.com/benbjohnson/litestream.DB.execCheckpoint.closure_2","parameters":[],"body":{"2732:21":{"kind":"call","span":{"start":[2732,21],"end":[2732,44],"bytes":[87865,87888]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.finishSyncDiag":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.finishSyncDiag","kind":"method","span":{"start":[517,1],"end":[528,2],"bytes":[19046,19291]},"signature":"github.com/benbjohnson/litestream.DB.finishSyncDiag","parameters":[{"name":"err","type":"error","span":{"start":[517,1],"end":[517,42],"bytes":[19046,19087]}}],"metrics":{"cyclomatic":3},"body":{"518:2":{"kind":"call","span":{"start":[518,2],"end":[518,20],"bytes":[19089,19107]},"callee":null},"519:8":{"kind":"call","span":{"start":[519,8],"end":[519,28],"bytes":[19115,19135]},"callee":null},"524:26":{"kind":"call","span":{"start":[524,26],"end":[524,36],"bytes":[19227,19237]},"callee":null},"526:21":{"kind":"call","span":{"start":[526,21],"end":[526,32],"bytes":[19275,19286]},"callee":null}}},"github.com/benbjohnson/litestream.DB.finishSyncExecutorWait":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.finishSyncExecutorWait","kind":"method","span":{"start":[539,1],"end":[546,2],"bytes":[19512,19731]},"signature":"github.com/benbjohnson/litestream.DB.finishSyncExecutorWait","parameters":[],"metrics":{"cyclomatic":2},"body":{"540:2":{"kind":"call","span":{"start":[540,2],"end":[540,20],"bytes":[19554,19572]},"callee":null},"541:8":{"kind":"call","span":{"start":[541,8],"end":[541,28],"bytes":[19580,19600]},"callee":null}}},"github.com/benbjohnson/litestream.DB.init":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","kind":"method","span":{"start":[1085,1],"end":[1199,2],"bytes":[35148,38717]},"signature":"github.com/benbjohnson/litestream.DB.init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1085,1],"end":[1085,54],"bytes":[35148,35201]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":21},"body":{"1092:13":{"kind":"call","span":{"start":[1092,13],"end":[1092,29],"bytes":[35320,35336]},"callee":null},"1093:5":{"kind":"call","span":{"start":[1093,5],"end":[1093,23],"bytes":[35341,35359]},"callee":null},"1101:15":{"kind":"call","span":{"start":[1101,15],"end":[1101,45],"bytes":[35493,35523]},"callee":null},"1101:23":{"kind":"call","span":{"start":[1101,23],"end":[1101,44],"bytes":[35501,35522]},"callee":null},"1106:9":{"kind":"call","span":{"start":[1106,9],"end":[1107,42],"bytes":[35580,35699]},"callee":null},"1107:12":{"kind":"call","span":{"start":[1107,12],"end":[1107,41],"bytes":[35669,35698]},"callee":null},"1109:18":{"kind":"call","span":{"start":[1109,18],"end":[1109,41],"bytes":[35718,35741]},"callee":null},"1114:12":{"kind":"call","span":{"start":[1114,12],"end":[1114,33],"bytes":[35865,35886]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setPersistWAL"},"1115:10":{"kind":"call","span":{"start":[1115,10],"end":[1115,48],"bytes":[35910,35948]},"callee":null},"1119:17":{"kind":"call","span":{"start":[1119,17],"end":[1119,33],"bytes":[36045,36061]},"callee":null},"1120:10":{"kind":"call","span":{"start":[1120,10],"end":[1120,56],"bytes":[36085,36131]},"callee":null},"1125:8":{"kind":"call","span":{"start":[1125,8],"end":[1132,5],"bytes":[36231,36353]},"callee":null},"1137:12":{"kind":"call","span":{"start":[1137,12],"end":[1137,68],"bytes":[36519,36575]},"callee":null},"1140:10":{"kind":"call","span":{"start":[1140,10],"end":[1140,56],"bytes":[36651,36697]},"callee":null},"1145:15":{"kind":"call","span":{"start":[1145,15],"end":[1145,122],"bytes":[36823,36930]},"callee":null},"1146:10":{"kind":"call","span":{"start":[1146,10],"end":[1146,61],"bytes":[36954,37005]},"callee":null},"1151:15":{"kind":"call","span":{"start":[1151,15],"end":[1151,98],"bytes":[37167,37250]},"callee":null},"1152:10":{"kind":"call","span":{"start":[1152,10],"end":[1152,62],"bytes":[37274,37326]},"callee":null},"1157:12":{"kind":"call","span":{"start":[1157,12],"end":[1157,35],"bytes":[37438,37461]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.acquireReadLock"},"1158:10":{"kind":"call","span":{"start":[1158,10],"end":[1158,50],"bytes":[37485,37525]},"callee":null},"1162:12":{"kind":"call","span":{"start":[1162,12],"end":[1162,59],"bytes":[37561,37608]},"callee":null},"1163:10":{"kind":"call","span":{"start":[1163,10],"end":[1163,47],"bytes":[37651,37688]},"callee":null},"1165:10":{"kind":"call","span":{"start":[1165,10],"end":[1165,61],"bytes":[37728,37779]},"callee":null},"1169:12":{"kind":"call","span":{"start":[1169,12],"end":[1169,54],"bytes":[37839,37881]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll"},"1174:12":{"kind":"call","span":{"start":[1174,12],"end":[1174,35],"bytes":[37969,37992]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists"},"1175:10":{"kind":"call","span":{"start":[1175,10],"end":[1175,50],"bytes":[38016,38056]},"callee":null},"1181:13":{"kind":"call","span":{"start":[1181,13],"end":[1181,47],"bytes":[38224,38258]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica"},"1182:11":{"kind":"call","span":{"start":[1182,11],"end":[1182,63],"bytes":[38283,38335]},"callee":null},"1195:3":{"kind":"call","span":{"start":[1195,3],"end":[1195,27],"bytes":[38675,38699]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Start"}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init/github.com/benbjohnson/litestream.DB.init.closure_1","kind":"function","span":{"start":[1125,1],"end":[1132,5],"bytes":[36224,36353]},"signature":"github.com/benbjohnson/litestream.DB.init.closure_1","parameters":[],"body":{"1127:8":{"kind":"call","span":{"start":[1127,8],"end":[1127,28],"bytes":[36265,36285]},"callee":null},"1128:4":{"kind":"call","span":{"start":[1128,4],"end":[1128,17],"bytes":[36289,36302]},"callee":null},"1129:4":{"kind":"call","span":{"start":[1129,4],"end":[1129,16],"bytes":[36306,36318]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.initMetrics":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.initMetrics","kind":"method","span":{"start":[356,1],"end":[378,2],"bytes":[13702,14876]},"signature":"github.com/benbjohnson/litestream.DB.initMetrics","parameters":[],"metrics":{"cyclomatic":2},"body":{"357:2":{"kind":"call","span":{"start":[357,2],"end":[357,23],"bytes":[13733,13754]},"callee":null},"358:8":{"kind":"call","span":{"start":[358,8],"end":[358,31],"bytes":[13762,13785]},"callee":null},"364:27":{"kind":"call","span":{"start":[364,27],"end":[364,49],"bytes":[13913,13935]},"callee":null},"366:19":{"kind":"call","span":{"start":[366,19],"end":[366,58],"bytes":[13958,13997]},"callee":null},"367:20":{"kind":"call","span":{"start":[367,20],"end":[367,60],"bytes":[14017,14057]},"callee":null},"368:28":{"kind":"call","span":{"start":[368,28],"end":[368,76],"bytes":[14085,14133]},"callee":null},"369:17":{"kind":"call","span":{"start":[369,17],"end":[369,59],"bytes":[14150,14192]},"callee":null},"370:20":{"kind":"call","span":{"start":[370,20],"end":[370,60],"bytes":[14212,14252]},"callee":null},"371:25":{"kind":"call","span":{"start":[371,25],"end":[371,70],"bytes":[14277,14322]},"callee":null},"372:26":{"kind":"call","span":{"start":[372,26],"end":[372,72],"bytes":[14348,14394]},"callee":null},"373:21":{"kind":"call","span":{"start":[373,21],"end":[373,62],"bytes":[14415,14456]},"callee":null},"374:29":{"kind":"call","span":{"start":[374,29],"end":[374,98],"bytes":[14485,14554]},"callee":null},"375:34":{"kind":"call","span":{"start":[375,34],"end":[375,108],"bytes":[14588,14662]},"callee":null},"376:35":{"kind":"call","span":{"start":[376,35],"end":[376,110],"bytes":[14697,14772]},"callee":null},"377:46":{"kind":"call","span":{"start":[377,46],"end":[377,102],"bytes":[14818,14874]},"callee":null}}},"github.com/benbjohnson/litestream.DB.invalidatePosCache":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache","kind":"method","span":{"start":[699,1],"end":[703,2],"bytes":[24221,24311]},"signature":"github.com/benbjohnson/litestream.DB.invalidatePosCache","parameters":[],"metrics":{"cyclomatic":1},"body":{"700:2":{"kind":"call","span":{"start":[700,2],"end":[700,15],"bytes":[24259,24272]},"callee":null},"702:2":{"kind":"call","span":{"start":[702,2],"end":[702,17],"bytes":[24294,24309]},"callee":null}}},"github.com/benbjohnson/litestream.DB.lastPageMatch":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lastPageMatch","kind":"method","span":{"start":[1899,1],"end":[1935,2],"bytes":[62116,63253]},"signature":"github.com/benbjohnson/litestream.DB.lastPageMatch","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1899,1],"end":[1899,115],"bytes":[62116,62230]}},{"name":"dec","type":"*github.com/superfly/ltx.Decoder","span":{"start":[1899,1],"end":[1899,115],"bytes":[62116,62230]}},{"name":"prevWALOffset","type":"int64","span":{"start":[1899,1],"end":[1899,115],"bytes":[62116,62230]}},{"name":"frameSize","type":"int64","span":{"start":[1899,1],"end":[1899,115],"bytes":[62116,62230]}}],"return_type":"(bool, error)","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"1904:16":{"kind":"call","span":{"start":[1904,16],"end":[1904,69],"bytes":[62307,62360]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALFileAt"},"1904:30":{"kind":"call","span":{"start":[1904,30],"end":[1904,42],"bytes":[62321,62333]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1906:17":{"kind":"call","span":{"start":[1906,17],"end":[1906,72],"bytes":[62394,62449]},"callee":null},"1908:10":{"kind":"call","span":{"start":[1908,10],"end":[1908,44],"bytes":[62462,62496]},"callee":null},"1909:12":{"kind":"call","span":{"start":[1909,12],"end":[1909,46],"bytes":[62508,62542]},"callee":null},"1910:12":{"kind":"call","span":{"start":[1910,12],"end":[1910,47],"bytes":[62554,62589]},"callee":null},"1913:15":{"kind":"call","span":{"start":[1913,15],"end":[1913,27],"bytes":[62641,62653]},"callee":null},"1913:50":{"kind":"call","span":{"start":[1913,50],"end":[1913,62],"bytes":[62676,62688]},"callee":null},"1918:22":{"kind":"call","span":{"start":[1918,22],"end":[1918,34],"bytes":[62815,62827]},"callee":null},"1918:9":{"kind":"call","span":{"start":[1918,9],"end":[1918,44],"bytes":[62802,62837]},"callee":null},"1921:13":{"kind":"call","span":{"start":[1921,13],"end":[1921,38],"bytes":[62882,62907]},"callee":null},"1921:40":{"kind":"call","span":{"start":[1921,40],"end":[1921,62],"bytes":[62909,62931]},"callee":null},"1924:18":{"kind":"call","span":{"start":[1924,18],"end":[1924,56],"bytes":[63027,63065]},"callee":null},"1930:7":{"kind":"call","span":{"start":[1930,7],"end":[1930,29],"bytes":[63146,63168]},"callee":null}}},"github.com/benbjohnson/litestream.DB.lockExec":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","kind":"method","span":{"start":[1310,1],"end":[1321,2],"bytes":[41797,42101]},"signature":"github.com/benbjohnson/litestream.DB.lockExec","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1310,1],"end":[1310,52],"bytes":[41797,41848]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"1311:5":{"kind":"call","span":{"start":[1311,5],"end":[1311,29],"bytes":[41853,41877]},"callee":null},"1314:2":{"kind":"call","span":{"start":[1314,2],"end":[1314,28],"bytes":[41897,41923]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncExecutorWait"},"1315:8":{"kind":"call","span":{"start":[1315,8],"end":[1315,35],"bytes":[41931,41958]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.finishSyncExecutorWait"},"1317:12":{"kind":"call","span":{"start":[1317,12],"end":[1317,38],"bytes":[41971,41997]},"callee":null},"1318:10":{"kind":"call","span":{"start":[1318,10],"end":[1318,73],"bytes":[42021,42084]},"callee":null},"1318:54":{"kind":"call","span":{"start":[1318,54],"end":[1318,72],"bytes":[42065,42083]},"callee":null}}},"github.com/benbjohnson/litestream.DB.monitor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.monitor","kind":"method","span":{"start":[3227,1],"end":[3311,2],"bytes":[103385,105989]},"signature":"github.com/benbjohnson/litestream.DB.monitor","parameters":[],"metrics":{"cyclomatic":17},"body":{"3228:12":{"kind":"call","span":{"start":[3228,12],"end":[3228,46],"bytes":[103422,103456]},"callee":null},"3229:8":{"kind":"call","span":{"start":[3229,8],"end":[3229,21],"bytes":[103464,103477]},"callee":null},"3239:10":{"kind":"call","span":{"start":[3239,10],"end":[3239,23],"bytes":[103663,103676]},"callee":null},"3247:11":{"kind":"call","span":{"start":[3247,11],"end":[3247,24],"bytes":[103816,103829]},"callee":null},"3249:11":{"kind":"call","span":{"start":[3249,11],"end":[3249,30],"bytes":[103852,103871]},"callee":null},"3259:13":{"kind":"call","span":{"start":[3259,13],"end":[3259,28],"bytes":[104299,104314]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync"},"3259:45":{"kind":"call","span":{"start":[3259,45],"end":[3259,73],"bytes":[104331,104359]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"3273:7":{"kind":"call","span":{"start":[3273,7],"end":[3273,30],"bytes":[104705,104728]},"callee":null},"3275:39":{"kind":"call","span":{"start":[3275,39],"end":[3275,62],"bytes":[104818,104841]},"callee":null},"3275:8":{"kind":"call","span":{"start":[3275,8],"end":[3275,35],"bytes":[104787,104814]},"callee":null},"3278:6":{"kind":"call","span":{"start":[3278,6],"end":[3284,44],"bytes":[104943,105246]},"callee":null},"3281:15":{"kind":"call","span":{"start":[3281,15],"end":[3281,39],"bytes":[105097,105121]},"callee":null},"3286:6":{"kind":"call","span":{"start":[3286,6],"end":[3289,26],"bytes":[105265,105385]},"callee":null},"3291:19":{"kind":"call","span":{"start":[3291,19],"end":[3291,29],"bytes":[105410,105420]},"callee":null},"3295:7":{"kind":"call","span":{"start":[3295,7],"end":[3295,27],"bytes":[105502,105522]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"3296:5":{"kind":"call","span":{"start":[3296,5],"end":[3296,81],"bytes":[105553,105629]},"callee":null},"3297:22":{"kind":"call","span":{"start":[3297,22],"end":[3297,49],"bytes":[105651,105678]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.removeTmpFiles"},"3298:6":{"kind":"call","span":{"start":[3298,6],"end":[3298,70],"bytes":[105705,105769]},"callee":null},"3306:4":{"kind":"call","span":{"start":[3306,4],"end":[3306,72],"bytes":[105876,105944]},"callee":null}}},"github.com/benbjohnson/litestream.DB.newSyncExecutor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor","kind":"method","span":{"start":[2004,1],"end":[2023,2],"bytes":[65124,65494]},"signature":"github.com/benbjohnson/litestream.DB.newSyncExecutor","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2004,1],"end":[2004,76],"bytes":[65124,65199]}}],"return_type":"(*github.com/benbjohnson/litestream.syncExecutor, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"2005:2":{"kind":"call","span":{"start":[2005,2],"end":[2005,14],"bytes":[65201,65213]},"callee":null},"2006:8":{"kind":"call","span":{"start":[2006,8],"end":[2006,22],"bytes":[65221,65235]},"callee":null},"2008:12":{"kind":"call","span":{"start":[2008,12],"end":[2008,24],"bytes":[65248,65260]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init"},"2014:14":{"kind":"call","span":{"start":[2014,14],"end":[2014,22],"bytes":[65354,65362]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"2016:15":{"kind":"call","span":{"start":[2016,15],"end":[2016,41],"bytes":[65394,65420]},"callee":null}}},"github.com/benbjohnson/litestream.DB.openLocalLTXFile":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.openLocalLTXFile","kind":"method","span":{"start":[614,1],"end":[616,2],"bytes":[21758,21906]},"signature":"github.com/benbjohnson/litestream.DB.openLocalLTXFile","parameters":[{"name":"level","type":"int","span":{"start":[614,1],"end":[614,94],"bytes":[21758,21851]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[614,1],"end":[614,94],"bytes":[21758,21851]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[614,1],"end":[614,94],"bytes":[21758,21851]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"615:17":{"kind":"call","span":{"start":[615,17],"end":[615,52],"bytes":[21868,21903]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"615:9":{"kind":"call","span":{"start":[615,9],"end":[615,53],"bytes":[21860,21904]},"callee":null}}},"github.com/benbjohnson/litestream.DB.releaseReadLock":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.releaseReadLock","kind":"method","span":{"start":[1270,1],"end":[1283,2],"bytes":[40770,41189]},"signature":"github.com/benbjohnson/litestream.DB.releaseReadLock","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1280:9":{"kind":"call","span":{"start":[1280,9],"end":[1280,25],"bytes":[41145,41161]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.rollback"}}},"github.com/benbjohnson/litestream.DB.setPersistWAL":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setPersistWAL","kind":"method","span":{"start":[1061,1],"end":[1081,2],"bytes":[34525,35020]},"signature":"github.com/benbjohnson/litestream.DB.setPersistWAL","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1061,1],"end":[1061,57],"bytes":[34525,34581]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1062:15":{"kind":"call","span":{"start":[1062,15],"end":[1062,30],"bytes":[34596,34611]},"callee":null},"1064:10":{"kind":"call","span":{"start":[1064,10],"end":[1064,47],"bytes":[34638,34675]},"callee":null},"1066:8":{"kind":"call","span":{"start":[1066,8],"end":[1066,20],"bytes":[34686,34698]},"callee":null},"1068:9":{"kind":"call","span":{"start":[1068,9],"end":[1080,4],"bytes":[34708,35018]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setPersistWAL/github.com/benbjohnson/litestream.DB.setPersistWAL.closure_1","kind":"function","span":{"start":[1068,1],"end":[1080,4],"bytes":[34700,35018]},"signature":"github.com/benbjohnson/litestream.DB.setPersistWAL.closure_1","parameters":[{"name":"driverConn","type":"interface{}","span":{"start":[1068,1],"end":[1068,54],"bytes":[34700,34753]}}],"return_type":"error","error_channel":["error"],"body":{"1071:11":{"kind":"call","span":{"start":[1071,11],"end":[1071,62],"bytes":[34819,34870]},"callee":null},"1074:13":{"kind":"call","span":{"start":[1074,13],"end":[1074,48],"bytes":[34888,34923]},"callee":null},"1076:11":{"kind":"call","span":{"start":[1076,11],"end":[1076,55],"bytes":[34952,34996]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.setSyncDiagPhase":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase","kind":"method","span":{"start":[504,1],"end":[515,2],"bytes":[18755,19044]},"signature":"github.com/benbjohnson/litestream.DB.setSyncDiagPhase","parameters":[{"name":"phase","type":"github.com/benbjohnson/litestream.diagPhase","span":{"start":[504,1],"end":[504,79],"bytes":[18755,18833]}},{"name":"updates","type":"[]func(*github.com/benbjohnson/litestream.diagState)","span":{"start":[504,1],"end":[504,79],"bytes":[18755,18833]},"is_variadic":true}],"metrics":{"cyclomatic":3},"body":{"505:2":{"kind":"call","span":{"start":[505,2],"end":[505,20],"bytes":[18835,18853]},"callee":null},"506:8":{"kind":"call","span":{"start":[506,8],"end":[506,28],"bytes":[18861,18881]},"callee":null},"511:26":{"kind":"call","span":{"start":[511,26],"end":[511,36],"bytes":[18972,18982]},"callee":null},"513:3":{"kind":"call","span":{"start":[513,3],"end":[513,23],"bytes":[19019,19039]},"callee":null}}},"github.com/benbjohnson/litestream.DB.snapshotPosition":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition","kind":"method","span":{"start":[2796,1],"end":[2833,2],"bytes":[89741,90845]},"signature":"github.com/benbjohnson/litestream.DB.snapshotPosition","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2796,1],"end":[2796,85],"bytes":[89741,89825]}}],"return_type":"(*github.com/benbjohnson/litestream.snapshotReadPosition, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"2797:12":{"kind":"call","span":{"start":[2797,12],"end":[2797,28],"bytes":[89837,89853]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec"},"2800:8":{"kind":"call","span":{"start":[2800,8],"end":[2800,29],"bytes":[89896,89917]},"callee":null},"2802:14":{"kind":"call","span":{"start":[2802,14],"end":[2802,27],"bytes":[89932,89945]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.PageSize"},"2803:14":{"kind":"call","span":{"start":[2803,14],"end":[2803,22],"bytes":[89959,89967]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"2806:3":{"kind":"call","span":{"start":[2806,3],"end":[2806,66],"bytes":[89991,90054]},"callee":null},"2810:15":{"kind":"call","span":{"start":[2810,15],"end":[2810,41],"bytes":[90157,90183]},"callee":null},"2813:23":{"kind":"call","span":{"start":[2813,23],"end":[2813,51],"bytes":[90210,90238]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset"},"2826:2":{"kind":"call","span":{"start":[2826,2],"end":[2826,18],"bytes":[90691,90707]},"callee":null}}},"github.com/benbjohnson/litestream.DB.snapshotReader":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotReader","kind":"method","span":{"start":[2876,1],"end":[2971,2],"bytes":[92366,95068]},"signature":"github.com/benbjohnson/litestream.DB.snapshotReader","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2876,1],"end":[2876,102],"bytes":[92366,92467]}},{"name":"pos","type":"*github.com/benbjohnson/litestream.snapshotReadPosition","span":{"start":[2876,1],"end":[2876,102],"bytes":[92366,92467]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"2877:2":{"kind":"call","span":{"start":[2877,2],"end":[2877,94],"bytes":[92469,92561]},"callee":null},"2877:38":{"kind":"call","span":{"start":[2877,38],"end":[2877,59],"bytes":[92505,92526]},"callee":null},"2881:13":{"kind":"call","span":{"start":[2881,13],"end":[2881,24],"bytes":[92632,92643]},"callee":null},"2885:12":{"kind":"call","span":{"start":[2885,12],"end":[2885,51],"bytes":[92693,92732]},"callee":null},"2885:19":{"kind":"call","span":{"start":[2885,19],"end":[2885,28],"bytes":[92700,92709]},"callee":null},"2885:31":{"kind":"call","span":{"start":[2885,31],"end":[2885,50],"bytes":[92712,92731]},"callee":null},"2888:12":{"kind":"call","span":{"start":[2888,12],"end":[2888,21],"bytes":[92835,92844]},"callee":null},"2889:5":{"kind":"call","span":{"start":[2889,5],"end":[2968,5],"bytes":[92849,95006]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotReader/github.com/benbjohnson/litestream.DB.snapshotReader.closure_1","kind":"function","span":{"start":[2889,1],"end":[2968,5],"bytes":[92845,95006]},"signature":"github.com/benbjohnson/litestream.DB.snapshotReader.closure_1","parameters":[],"body":{"2890:9":{"kind":"call","span":{"start":[2890,9],"end":[2890,20],"bytes":[92866,92877]},"callee":null},"2892:19":{"kind":"call","span":{"start":[2892,19],"end":[2892,40],"bytes":[92897,92918]},"callee":null},"2892:27":{"kind":"call","span":{"start":[2892,27],"end":[2892,39],"bytes":[92905,92917]},"callee":null},"2894:4":{"kind":"call","span":{"start":[2894,4],"end":[2894,26],"bytes":[92940,92962]},"callee":null},"2897:9":{"kind":"call","span":{"start":[2897,9],"end":[2897,24],"bytes":[92985,93000]},"callee":null},"2899:14":{"kind":"call","span":{"start":[2899,14],"end":[2899,91],"bytes":[93015,93092]},"callee":null},"2899:36":{"kind":"call","span":{"start":[2899,36],"end":[2899,90],"bytes":[93037,93091]},"callee":null},"2901:22":{"kind":"call","span":{"start":[2901,22],"end":[2901,59],"bytes":[93132,93169]},"callee":null},"2901:4":{"kind":"call","span":{"start":[2901,4],"end":[2901,60],"bytes":[93114,93170]},"callee":null},"2907:14":{"kind":"call","span":{"start":[2907,14],"end":[2907,36],"bytes":[93317,93339]},"callee":null},"2911:44":{"kind":"call","span":{"start":[2911,44],"end":[2911,69],"bytes":[93448,93473]},"callee":null},"2913:23":{"kind":"call","span":{"start":[2913,23],"end":[2913,54],"bytes":[93515,93546]},"callee":null},"2913:5":{"kind":"call","span":{"start":[2913,5],"end":[2913,55],"bytes":[93497,93547]},"callee":null},"2922:22":{"kind":"call","span":{"start":[2922,22],"end":[2922,128],"bytes":[93673,93779]},"callee":null},"2922:4":{"kind":"call","span":{"start":[2922,4],"end":[2922,129],"bytes":[93655,93780]},"callee":null},"2925:25":{"kind":"call","span":{"start":[2925,25],"end":[2925,98],"bytes":[93819,93892]},"callee":null},"2925:59":{"kind":"call","span":{"start":[2925,59],"end":[2925,97],"bytes":[93853,93891]},"callee":null},"2927:3":{"kind":"call","span":{"start":[2927,3],"end":[2934,22],"bytes":[93896,94123]},"callee":null},"2928:12":{"kind":"call","span":{"start":[2928,12],"end":[2928,33],"bytes":[93949,93970]},"callee":null},"2936:15":{"kind":"call","span":{"start":[2936,15],"end":[2936,33],"bytes":[94139,94157]},"callee":null},"2938:22":{"kind":"call","span":{"start":[2938,22],"end":[2938,60],"bytes":[94197,94235]},"callee":null},"2938:4":{"kind":"call","span":{"start":[2938,4],"end":[2938,61],"bytes":[94179,94236]},"callee":null},"2941:13":{"kind":"call","span":{"start":[2941,13],"end":[2953,5],"bytes":[94263,94600]},"callee":null},"2944:15":{"kind":"call","span":{"start":[2944,15],"end":[2944,35],"bytes":[94373,94393]},"callee":null},"2948:15":{"kind":"call","span":{"start":[2948,15],"end":[2948,25],"bytes":[94476,94486]},"callee":null},"2954:22":{"kind":"call","span":{"start":[2954,22],"end":[2954,71],"bytes":[94636,94685]},"callee":null},"2954:4":{"kind":"call","span":{"start":[2954,4],"end":[2954,72],"bytes":[94618,94686]},"callee":null},"2958:13":{"kind":"call","span":{"start":[2958,13],"end":[2958,66],"bytes":[94714,94767]},"callee":null},"2959:22":{"kind":"call","span":{"start":[2959,22],"end":[2959,63],"bytes":[94803,94844]},"callee":null},"2959:4":{"kind":"call","span":{"start":[2959,4],"end":[2959,64],"bytes":[94785,94845]},"callee":null},"2963:13":{"kind":"call","span":{"start":[2963,13],"end":[2963,24],"bytes":[94873,94884]},"callee":null},"2964:22":{"kind":"call","span":{"start":[2964,22],"end":[2964,71],"bytes":[94920,94969]},"callee":null},"2964:4":{"kind":"call","span":{"start":[2964,4],"end":[2964,72],"bytes":[94902,94970]},"callee":null},"2967:7":{"kind":"call","span":{"start":[2967,7],"end":[2967,17],"bytes":[94991,95001]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.snapshotWALEndOffset":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","kind":"method","span":{"start":[2838,1],"end":[2874,2],"bytes":[91069,92364]},"signature":"github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","parameters":[{"name":"pos","type":"github.com/superfly/ltx.Pos","span":{"start":[2838,1],"end":[2838,65],"bytes":[91069,91133]}}],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"2846:13":{"kind":"call","span":{"start":[2846,13],"end":[2846,46],"bytes":[91291,91324]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"2847:12":{"kind":"call","span":{"start":[2847,12],"end":[2847,28],"bytes":[91336,91352]},"callee":null},"2849:13":{"kind":"call","span":{"start":[2849,13],"end":[2849,85],"bytes":[91382,91454]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2849:45":{"kind":"call","span":{"start":[2849,45],"end":[2849,61],"bytes":[91414,91430]},"callee":null},"2849:63":{"kind":"call","span":{"start":[2849,63],"end":[2849,79],"bytes":[91432,91448]},"callee":null},"2851:8":{"kind":"call","span":{"start":[2851,8],"end":[2851,34],"bytes":[91465,91491]},"callee":null},"2853:9":{"kind":"call","span":{"start":[2853,9],"end":[2853,26],"bytes":[91501,91518]},"callee":null},"2854:12":{"kind":"call","span":{"start":[2854,12],"end":[2854,30],"bytes":[91530,91548]},"callee":null},"2855:13":{"kind":"call","span":{"start":[2855,13],"end":[2855,126],"bytes":[91575,91688]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2855:47":{"kind":"call","span":{"start":[2855,47],"end":[2855,63],"bytes":[91609,91625]},"callee":null},"2855:65":{"kind":"call","span":{"start":[2855,65],"end":[2855,81],"bytes":[91627,91643]},"callee":null},"2855:83":{"kind":"call","span":{"start":[2855,83],"end":[2855,125],"bytes":[91645,91687]},"callee":null},"2861:14":{"kind":"call","span":{"start":[2861,14],"end":[2861,41],"bytes":[91882,91909]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader"},"2861:28":{"kind":"call","span":{"start":[2861,28],"end":[2861,40],"bytes":[91896,91908]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"2862:27":{"kind":"call","span":{"start":[2862,27],"end":[2862,49],"bytes":[91936,91958]},"callee":null},"2862:5":{"kind":"call","span":{"start":[2862,5],"end":[2862,23],"bytes":[91914,91932]},"callee":null},"2862:53":{"kind":"call","span":{"start":[2862,53],"end":[2862,88],"bytes":[91962,91997]},"callee":null},"2865:13":{"kind":"call","span":{"start":[2865,13],"end":[2865,58],"bytes":[92064,92109]},"callee":null},"2867:11":{"kind":"call","span":{"start":[2867,11],"end":[2867,44],"bytes":[92123,92156]},"callee":null},"2868:11":{"kind":"call","span":{"start":[2868,11],"end":[2868,44],"bytes":[92167,92200]},"callee":null},"2869:14":{"kind":"call","span":{"start":[2869,14],"end":[2869,26],"bytes":[92214,92226]},"callee":null},"2869:48":{"kind":"call","span":{"start":[2869,48],"end":[2869,60],"bytes":[92248,92260]},"callee":null},"2873:34":{"kind":"call","span":{"start":[2873,34],"end":[2873,46],"bytes":[92337,92349]},"callee":null},"2873:9":{"kind":"call","span":{"start":[2873,9],"end":[2873,21],"bytes":[92312,92324]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset.closure_1","kind":"function","span":{"start":[2851,1],"end":[2851,34],"bytes":[91458,91491]},"signature":"github.com/benbjohnson/litestream.DB.snapshotWALEndOffset.closure_1","parameters":[],"body":{"2851:21":{"kind":"call","span":{"start":[2851,21],"end":[2851,30],"bytes":[91478,91487]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.sync":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","kind":"method","span":{"start":[2072,1],"end":[2360,2],"bytes":[66720,75776]},"signature":"github.com/benbjohnson/litestream.DB.sync","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2072,1],"end":[2072,151],"bytes":[66720,66870]}},{"name":"checkpointing","type":"bool","span":{"start":[2072,1],"end":[2072,151],"bytes":[66720,66870]}},{"name":"exec","type":"*github.com/benbjohnson/litestream.syncExecutor","span":{"start":[2072,1],"end":[2072,151],"bytes":[66720,66870]}},{"name":"info","type":"github.com/benbjohnson/litestream.syncInfo","span":{"start":[2072,1],"end":[2072,151],"bytes":[66720,66870]}},{"name":"maxSyncWALBytes","type":"int64","span":{"start":[2072,1],"end":[2072,151],"bytes":[66720,66870]}}],"return_type":"(github.com/benbjohnson/litestream.syncResult, error)","error_channel":["error"],"metrics":{"cyclomatic":40},"body":{"2081:2":{"kind":"call","span":{"start":[2081,2],"end":[2086,5],"bytes":[67119,67269]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2088:14":{"kind":"call","span":{"start":[2088,14],"end":[2088,39],"bytes":[67284,67309]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"2091:11":{"kind":"call","span":{"start":[2091,11],"end":[2091,24],"bytes":[67340,67353]},"callee":null},"2095:13":{"kind":"call","span":{"start":[2095,13],"end":[2095,45],"bytes":[67415,67447]},"callee":null},"2098:13":{"kind":"call","span":{"start":[2098,13],"end":[2098,44],"bytes":[67487,67518]},"callee":null},"2101:13":{"kind":"call","span":{"start":[2101,13],"end":[2101,51],"bytes":[67558,67596]},"callee":null},"2103:2":{"kind":"call","span":{"start":[2103,2],"end":[2103,37],"bytes":[67601,67636]},"callee":null},"2107:3":{"kind":"call","span":{"start":[2107,3],"end":[2107,19],"bytes":[67742,67758]},"callee":null},"2108:9":{"kind":"call","span":{"start":[2108,9],"end":[2108,27],"bytes":[67767,67785]},"callee":null},"2111:13":{"kind":"call","span":{"start":[2111,13],"end":[2111,24],"bytes":[67802,67813]},"callee":null},"2115:10":{"kind":"call","span":{"start":[2115,10],"end":[2115,19],"bytes":[67864,67873]},"callee":null},"2116:12":{"kind":"call","span":{"start":[2116,12],"end":[2116,50],"bytes":[67885,67923]},"callee":null},"2116:19":{"kind":"call","span":{"start":[2116,19],"end":[2116,28],"bytes":[67892,67901]},"callee":null},"2116:31":{"kind":"call","span":{"start":[2116,31],"end":[2116,49],"bytes":[67904,67922]},"callee":null},"2118:18":{"kind":"call","span":{"start":[2118,18],"end":[2118,39],"bytes":[67942,67963]},"callee":null},"2118:26":{"kind":"call","span":{"start":[2118,26],"end":[2118,38],"bytes":[67950,67962]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"2122:8":{"kind":"call","span":{"start":[2122,8],"end":[2122,23],"bytes":[68012,68027]},"callee":null},"2124:21":{"kind":"call","span":{"start":[2124,21],"end":[2124,75],"bytes":[68049,68103]},"callee":null},"2127:16":{"kind":"call","span":{"start":[2127,16],"end":[2127,54],"bytes":[68173,68211]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader"},"2128:19":{"kind":"call","span":{"start":[2128,19],"end":[2128,56],"bytes":[68244,68281]},"callee":null},"2133:108":{"kind":"call","span":{"start":[2133,108],"end":[2133,133],"bytes":[68486,68511]},"callee":null},"2133:16":{"kind":"call","span":{"start":[2133,16],"end":[2133,106],"bytes":[68394,68484]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReaderWithOffset"},"2134:4":{"kind":"call","span":{"start":[2134,4],"end":[2134,101],"bytes":[68517,68614]},"callee":null},"2136:17":{"kind":"call","span":{"start":[2136,17],"end":[2136,55],"bytes":[68662,68700]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader"},"2137:20":{"kind":"call","span":{"start":[2137,20],"end":[2137,61],"bytes":[68734,68775]},"callee":null},"2140:19":{"kind":"call","span":{"start":[2140,19],"end":[2140,68],"bytes":[68824,68873]},"callee":null},"2145:2":{"kind":"call","span":{"start":[2145,2],"end":[2150,5],"bytes":[68953,69103]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2154:49":{"kind":"call","span":{"start":[2154,49],"end":[2154,81],"bytes":[69201,69233]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap"},"2156:18":{"kind":"call","span":{"start":[2156,18],"end":[2156,49],"bytes":[69268,69299]},"callee":null},"2166:18":{"kind":"call","span":{"start":[2166,18],"end":[2166,123],"bytes":[69458,69563]},"callee":null},"2166:2":{"kind":"call","span":{"start":[2166,2],"end":[2166,124],"bytes":[69442,69564]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert"},"2167:2":{"kind":"call","span":{"start":[2167,2],"end":[2173,5],"bytes":[69566,69737]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2177:3":{"kind":"call","span":{"start":[2177,3],"end":[2177,43],"bytes":[69788,69828]},"callee":null},"2177:31":{"kind":"call","span":{"start":[2177,31],"end":[2177,42],"bytes":[69816,69827]},"callee":null},"2182:3":{"kind":"call","span":{"start":[2182,3],"end":[2182,86],"bytes":[69936,70019]},"callee":null},"2187:12":{"kind":"call","span":{"start":[2187,12],"end":[2187,68],"bytes":[70090,70146]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll"},"2187:30":{"kind":"call","span":{"start":[2187,30],"end":[2187,55],"bytes":[70108,70133]},"callee":null},"2188:6":{"kind":"call","span":{"start":[2188,6],"end":[2188,26],"bytes":[70166,70186]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2189:19":{"kind":"call","span":{"start":[2189,19],"end":[2189,129],"bytes":[70207,70317]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2189:62":{"kind":"call","span":{"start":[2189,62],"end":[2189,74],"bytes":[70250,70262]},"callee":null},"2189:76":{"kind":"call","span":{"start":[2189,76],"end":[2189,88],"bytes":[70264,70276]},"callee":null},"2189:90":{"kind":"call","span":{"start":[2189,90],"end":[2189,128],"bytes":[70278,70316]},"callee":null},"2194:18":{"kind":"call","span":{"start":[2194,18],"end":[2194,85],"bytes":[70364,70431]},"callee":null},"2196:6":{"kind":"call","span":{"start":[2196,6],"end":[2196,26],"bytes":[70454,70474]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2197:19":{"kind":"call","span":{"start":[2197,19],"end":[2197,128],"bytes":[70495,70604]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2197:61":{"kind":"call","span":{"start":[2197,61],"end":[2197,73],"bytes":[70537,70549]},"callee":null},"2197:75":{"kind":"call","span":{"start":[2197,75],"end":[2197,87],"bytes":[70551,70563]},"callee":null},"2197:89":{"kind":"call","span":{"start":[2197,89],"end":[2197,127],"bytes":[70565,70603]},"callee":null},"2199:18":{"kind":"call","span":{"start":[2199,18],"end":[2199,59],"bytes":[70626,70667]},"callee":null},"2201:8":{"kind":"call","span":{"start":[2201,8],"end":[2201,47],"bytes":[70678,70717]},"callee":null},"2202:8":{"kind":"call","span":{"start":[2202,8],"end":[2202,40],"bytes":[70725,70757]},"callee":null},"2204:14":{"kind":"call","span":{"start":[2204,14],"end":[2204,44],"bytes":[70772,70802]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo"},"2205:6":{"kind":"call","span":{"start":[2205,6],"end":[2205,37],"bytes":[70808,70839]},"callee":null},"2207:2":{"kind":"call","span":{"start":[2207,2],"end":[2213,21],"bytes":[70842,71030]},"callee":null},"2208:11":{"kind":"call","span":{"start":[2208,11],"end":[2208,24],"bytes":[70909,70922]},"callee":null},"2215:15":{"kind":"call","span":{"start":[2215,15],"end":[2215,25],"bytes":[71046,71056]},"callee":null},"2216:14":{"kind":"call","span":{"start":[2216,14],"end":[2216,37],"bytes":[71070,71093]},"callee":null},"2218:18":{"kind":"call","span":{"start":[2218,18],"end":[2218,56],"bytes":[71128,71166]},"callee":null},"2220:12":{"kind":"call","span":{"start":[2220,12],"end":[2232,4],"bytes":[71181,71496]},"callee":null},"2223:14":{"kind":"call","span":{"start":[2223,14],"end":[2223,33],"bytes":[71288,71307]},"callee":null},"2227:14":{"kind":"call","span":{"start":[2227,14],"end":[2227,35],"bytes":[71381,71402]},"callee":null},"2233:6":{"kind":"call","span":{"start":[2233,6],"end":[2233,26],"bytes":[71516,71536]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2234:19":{"kind":"call","span":{"start":[2234,19],"end":[2234,129],"bytes":[71557,71667]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2234:62":{"kind":"call","span":{"start":[2234,62],"end":[2234,74],"bytes":[71600,71612]},"callee":null},"2234:76":{"kind":"call","span":{"start":[2234,76],"end":[2234,88],"bytes":[71614,71626]},"callee":null},"2234:90":{"kind":"call","span":{"start":[2234,90],"end":[2234,128],"bytes":[71628,71666]},"callee":null},"2236:18":{"kind":"call","span":{"start":[2236,18],"end":[2236,58],"bytes":[71689,71729]},"callee":null},"2242:3":{"kind":"call","span":{"start":[2242,3],"end":[2248,6],"bytes":[71880,72044]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2249:13":{"kind":"call","span":{"start":[2249,13],"end":[2249,66],"bytes":[72057,72110]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.writeLTXFromDB"},"2250:7":{"kind":"call","span":{"start":[2250,7],"end":[2250,27],"bytes":[72131,72151]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2251:20":{"kind":"call","span":{"start":[2251,20],"end":[2251,130],"bytes":[72173,72283]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2251:63":{"kind":"call","span":{"start":[2251,63],"end":[2251,75],"bytes":[72216,72228]},"callee":null},"2251:77":{"kind":"call","span":{"start":[2251,77],"end":[2251,89],"bytes":[72230,72242]},"callee":null},"2251:91":{"kind":"call","span":{"start":[2251,91],"end":[2251,129],"bytes":[72244,72282]},"callee":null},"2253:19":{"kind":"call","span":{"start":[2253,19],"end":[2253,59],"bytes":[72307,72347]},"callee":null},"2256:3":{"kind":"call","span":{"start":[2256,3],"end":[2262,6],"bytes":[72364,72530]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2263:13":{"kind":"call","span":{"start":[2263,13],"end":[2263,84],"bytes":[72543,72614]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.writeLTXFromWAL"},"2264:7":{"kind":"call","span":{"start":[2264,7],"end":[2264,27],"bytes":[72635,72655]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2265:20":{"kind":"call","span":{"start":[2265,20],"end":[2265,130],"bytes":[72677,72787]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2265:63":{"kind":"call","span":{"start":[2265,63],"end":[2265,75],"bytes":[72720,72732]},"callee":null},"2265:77":{"kind":"call","span":{"start":[2265,77],"end":[2265,89],"bytes":[72734,72746]},"callee":null},"2265:91":{"kind":"call","span":{"start":[2265,91],"end":[2265,129],"bytes":[72748,72786]},"callee":null},"2267:19":{"kind":"call","span":{"start":[2267,19],"end":[2267,60],"bytes":[72811,72852]},"callee":null},"2272:2":{"kind":"call","span":{"start":[2272,2],"end":[2275,4],"bytes":[72915,73011]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2276:12":{"kind":"call","span":{"start":[2276,12],"end":[2276,23],"bytes":[73023,73034]},"callee":null},"2277:6":{"kind":"call","span":{"start":[2277,6],"end":[2277,26],"bytes":[73054,73074]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2278:19":{"kind":"call","span":{"start":[2278,19],"end":[2278,129],"bytes":[73095,73205]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2278:62":{"kind":"call","span":{"start":[2278,62],"end":[2278,74],"bytes":[73138,73150]},"callee":null},"2278:76":{"kind":"call","span":{"start":[2278,76],"end":[2278,88],"bytes":[73152,73164]},"callee":null},"2278:90":{"kind":"call","span":{"start":[2278,90],"end":[2278,128],"bytes":[73166,73204]},"callee":null},"2280:18":{"kind":"call","span":{"start":[2280,18],"end":[2280,58],"bytes":[73227,73267]},"callee":null},"2284:2":{"kind":"call","span":{"start":[2284,2],"end":[2287,4],"bytes":[73300,73396]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2288:12":{"kind":"call","span":{"start":[2288,12],"end":[2288,26],"bytes":[73408,73422]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile/github.com/benbjohnson/litestream.ltxStagingFile.Sync"},"2289:6":{"kind":"call","span":{"start":[2289,6],"end":[2289,26],"bytes":[73442,73462]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2290:19":{"kind":"call","span":{"start":[2290,19],"end":[2290,128],"bytes":[73483,73592]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2290:61":{"kind":"call","span":{"start":[2290,61],"end":[2290,73],"bytes":[73525,73537]},"callee":null},"2290:75":{"kind":"call","span":{"start":[2290,75],"end":[2290,87],"bytes":[73539,73551]},"callee":null},"2290:89":{"kind":"call","span":{"start":[2290,89],"end":[2290,127],"bytes":[73553,73591]},"callee":null},"2292:18":{"kind":"call","span":{"start":[2292,18],"end":[2292,54],"bytes":[73614,73650]},"callee":null},"2294:12":{"kind":"call","span":{"start":[2294,12],"end":[2294,27],"bytes":[73665,73680]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile/github.com/benbjohnson/litestream.ltxStagingFile.Close"},"2295:6":{"kind":"call","span":{"start":[2295,6],"end":[2295,26],"bytes":[73700,73720]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError"},"2296:19":{"kind":"call","span":{"start":[2296,19],"end":[2296,129],"bytes":[73741,73851]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"2296:62":{"kind":"call","span":{"start":[2296,62],"end":[2296,74],"bytes":[73784,73796]},"callee":null},"2296:76":{"kind":"call","span":{"start":[2296,76],"end":[2296,88],"bytes":[73798,73810]},"callee":null},"2296:90":{"kind":"call","span":{"start":[2296,90],"end":[2296,128],"bytes":[73812,73850]},"callee":null},"2298:18":{"kind":"call","span":{"start":[2298,18],"end":[2298,55],"bytes":[73873,73910]},"callee":null},"2302:2":{"kind":"call","span":{"start":[2302,2],"end":[2305,4],"bytes":[73958,74055]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2306:12":{"kind":"call","span":{"start":[2306,12],"end":[2306,44],"bytes":[74067,74099]},"callee":null},"2307:3":{"kind":"call","span":{"start":[2307,3],"end":[2307,28],"bytes":[74116,74141]},"callee":null},"2308:3":{"kind":"call","span":{"start":[2308,3],"end":[2308,34],"bytes":[74144,74175]},"callee":null},"2309:3":{"kind":"call","span":{"start":[2309,3],"end":[2309,30],"bytes":[74213,74240]},"callee":null},"2310:3":{"kind":"call","span":{"start":[2310,3],"end":[2310,26],"bytes":[74243,74266]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"},"2311:18":{"kind":"call","span":{"start":[2311,18],"end":[2311,56],"bytes":[74284,74322]},"callee":null},"2313:12":{"kind":"call","span":{"start":[2313,12],"end":[2313,53],"bytes":[74337,74378]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir"},"2313:30":{"kind":"call","span":{"start":[2313,30],"end":[2313,52],"bytes":[74355,74377]},"callee":null},"2314:3":{"kind":"call","span":{"start":[2314,3],"end":[2314,28],"bytes":[74395,74420]},"callee":null},"2315:3":{"kind":"call","span":{"start":[2315,3],"end":[2315,34],"bytes":[74423,74454]},"callee":null},"2316:3":{"kind":"call","span":{"start":[2316,3],"end":[2316,30],"bytes":[74492,74519]},"callee":null},"2317:3":{"kind":"call","span":{"start":[2317,3],"end":[2317,26],"bytes":[74522,74545]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache"},"2318:18":{"kind":"call","span":{"start":[2318,18],"end":[2318,53],"bytes":[74563,74598]},"callee":null},"2326:14":{"kind":"call","span":{"start":[2326,14],"end":[2326,24],"bytes":[74728,74738]},"callee":null},"2327:14":{"kind":"call","span":{"start":[2327,14],"end":[2327,21],"bytes":[74753,74760]},"callee":null},"2330:12":{"kind":"call","span":{"start":[2330,12],"end":[2330,30],"bytes":[74777,74795]},"callee":null},"2343:21":{"kind":"call","span":{"start":[2343,21],"end":[2343,37],"bytes":[75374,75390]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize"},"2348:2":{"kind":"call","span":{"start":[2348,2],"end":[2355,5],"bytes":[75500,75708]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"2357:2":{"kind":"call","span":{"start":[2357,2],"end":[2357,44],"bytes":[75711,75753]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_1","kind":"function","span":{"start":[2082,1],"end":[2086,5],"bytes":[67161,67269]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_1","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2082,1],"end":[2082,23],"bytes":[67161,67183]}}],"body":{}},"closure_10":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_10","kind":"function","span":{"start":[2302,1],"end":[2305,4],"bytes":[73957,74055]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_10","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2302,1],"end":[2302,62],"bytes":[73957,74018]}}],"body":{}},"closure_11":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_11","kind":"function","span":{"start":[2349,1],"end":[2355,5],"bytes":[75543,75708]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_11","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2349,1],"end":[2349,23],"bytes":[75543,75565]}}],"body":{}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_2","kind":"function","span":{"start":[2146,1],"end":[2150,5],"bytes":[68995,69103]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_2","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2146,1],"end":[2146,23],"bytes":[68995,69017]}}],"body":{}},"closure_3":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_3","kind":"function","span":{"start":[2168,1],"end":[2173,5],"bytes":[69611,69737]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_3","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2168,1],"end":[2168,23],"bytes":[69611,69633]}}],"body":{}},"closure_4":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_4","kind":"function","span":{"start":[2201,1],"end":[2201,47],"bytes":[70671,70717]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_4","parameters":[],"body":{"2201:21":{"kind":"call","span":{"start":[2201,21],"end":[2201,43],"bytes":[70691,70713]},"callee":null}}},"closure_5":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_5","kind":"function","span":{"start":[2202,1],"end":[2202,40],"bytes":[70718,70757]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_5","parameters":[],"body":{"2202:21":{"kind":"call","span":{"start":[2202,21],"end":[2202,36],"bytes":[70738,70753]},"callee":null}}},"closure_6":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_6","kind":"function","span":{"start":[2243,1],"end":[2248,6],"bytes":[71925,72044]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_6","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2243,1],"end":[2243,24],"bytes":[71925,71948]}}],"body":{}},"closure_7":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_7","kind":"function","span":{"start":[2257,1],"end":[2262,6],"bytes":[72410,72530]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_7","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2257,1],"end":[2257,24],"bytes":[72410,72433]}}],"body":{}},"closure_8":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_8","kind":"function","span":{"start":[2272,1],"end":[2275,4],"bytes":[72914,73011]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_8","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2272,1],"end":[2272,61],"bytes":[72914,72974]}}],"body":{}},"closure_9":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync/github.com/benbjohnson/litestream.DB.sync.closure_9","kind":"function","span":{"start":[2284,1],"end":[2287,4],"bytes":[73299,73396]},"signature":"github.com/benbjohnson/litestream.DB.sync.closure_9","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[2284,1],"end":[2284,61],"bytes":[73299,73359]}}],"body":{}}}},"github.com/benbjohnson/litestream.DB.syncLocked":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","kind":"method","span":{"start":[1331,1],"end":[1410,2],"bytes":[42342,44853]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1331,1],"end":[1331,102],"bytes":[42342,42443]}},{"name":"maxSyncWALBytes","type":"int64","span":{"start":[1331,1],"end":[1331,102],"bytes":[42342,42443]}}],"return_type":"(github.com/benbjohnson/litestream.syncResult, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"1332:2":{"kind":"call","span":{"start":[1332,2],"end":[1332,30],"bytes":[42445,42473]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncDiag"},"1333:8":{"kind":"call","span":{"start":[1333,8],"end":[1333,43],"bytes":[42481,42516]},"callee":null},"1336:7":{"kind":"call","span":{"start":[1336,7],"end":[1336,17],"bytes":[42554,42564]},"callee":null},"1337:8":{"kind":"call","span":{"start":[1337,8],"end":[1348,5],"bytes":[42572,42819]},"callee":null},"1350:15":{"kind":"call","span":{"start":[1350,15],"end":[1350,38],"bytes":[42835,42858]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor"},"1354:3":{"kind":"call","span":{"start":[1354,3],"end":[1354,45],"bytes":[42924,42966]},"callee":null},"1357:8":{"kind":"call","span":{"start":[1357,8],"end":[1357,40],"bytes":[42998,43030]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor"},"1360:2":{"kind":"call","span":{"start":[1360,2],"end":[1362,4],"bytes":[43078,43199]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1363:12":{"kind":"call","span":{"start":[1363,12],"end":[1363,35],"bytes":[43211,43234]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists"},"1364:18":{"kind":"call","span":{"start":[1364,18],"end":[1364,58],"bytes":[43266,43306]},"callee":null},"1367:2":{"kind":"call","span":{"start":[1367,2],"end":[1369,4],"bytes":[43312,43409]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1370:16":{"kind":"call","span":{"start":[1370,16],"end":[1370,79],"bytes":[43425,43488]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor"},"1374:2":{"kind":"call","span":{"start":[1374,2],"end":[1374,30],"bytes":[43531,43559]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult"},"1385:49":{"kind":"call","span":{"start":[1385,49],"end":[1385,96],"bytes":[44031,44078]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold"},"1386:3":{"kind":"call","span":{"start":[1386,3],"end":[1389,5],"bytes":[44083,44241]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1390:13":{"kind":"call","span":{"start":[1390,13],"end":[1390,84],"bytes":[44254,44325]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded"},"1391:19":{"kind":"call","span":{"start":[1391,19],"end":[1391,52],"bytes":[44358,44391]},"callee":null},"1395:2":{"kind":"call","span":{"start":[1395,2],"end":[1398,4],"bytes":[44401,44551]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1401:19":{"kind":"call","span":{"start":[1401,19],"end":[1401,41],"bytes":[44624,44646]},"callee":null},"1401:2":{"kind":"call","span":{"start":[1401,2],"end":[1401,42],"bytes":[44607,44647]},"callee":null},"1404:16":{"kind":"call","span":{"start":[1404,16],"end":[1404,32],"bytes":[44694,44710]},"callee":null},"1405:22":{"kind":"call","span":{"start":[1405,22],"end":[1405,40],"bytes":[44746,44764]},"callee":null},"1405:3":{"kind":"call","span":{"start":[1405,3],"end":[1405,41],"bytes":[44727,44765]},"callee":null},"1405:30":{"kind":"call","span":{"start":[1405,30],"end":[1405,39],"bytes":[44754,44763]},"callee":null},"1407:2":{"kind":"call","span":{"start":[1407,2],"end":[1407,62],"bytes":[44770,44830]},"callee":null},"1407:22":{"kind":"call","span":{"start":[1407,22],"end":[1407,61],"bytes":[44790,44829]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked/github.com/benbjohnson/litestream.DB.syncLocked.closure_1","kind":"function","span":{"start":[1333,1],"end":[1333,43],"bytes":[42474,42516]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked.closure_1","parameters":[],"body":{"1333:17":{"kind":"call","span":{"start":[1333,17],"end":[1333,39],"bytes":[42490,42512]},"callee":null}}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked/github.com/benbjohnson/litestream.DB.syncLocked.closure_2","kind":"function","span":{"start":[1337,1],"end":[1348,5],"bytes":[42565,42819]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked.closure_2","parameters":[],"body":{"1338:3":{"kind":"call","span":{"start":[1338,3],"end":[1338,24],"bytes":[42583,42604]},"callee":null},"1340:4":{"kind":"call","span":{"start":[1340,4],"end":[1340,30],"bytes":[42626,42652]},"callee":null},"1342:6":{"kind":"call","span":{"start":[1342,6],"end":[1342,26],"bytes":[42662,42682]},"callee":null},"1343:4":{"kind":"call","span":{"start":[1343,4],"end":[1343,27],"bytes":[42688,42711]},"callee":null},"1345:4":{"kind":"call","span":{"start":[1345,4],"end":[1345,27],"bytes":[42726,42749]},"callee":null},"1347:3":{"kind":"call","span":{"start":[1347,3],"end":[1347,61],"bytes":[42756,42814]},"callee":null},"1347:47":{"kind":"call","span":{"start":[1347,47],"end":[1347,60],"bytes":[42800,42813]},"callee":null}}},"closure_3":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked/github.com/benbjohnson/litestream.DB.syncLocked.closure_3","kind":"function","span":{"start":[1360,1],"end":[1362,4],"bytes":[43077,43199]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked.closure_3","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[1360,1],"end":[1360,62],"bytes":[43077,43138]}}],"body":{}},"closure_4":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked/github.com/benbjohnson/litestream.DB.syncLocked.closure_4","kind":"function","span":{"start":[1367,1],"end":[1369,4],"bytes":[43311,43409]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked.closure_4","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[1367,1],"end":[1367,66],"bytes":[43311,43376]}}],"body":{}},"closure_5":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked/github.com/benbjohnson/litestream.DB.syncLocked.closure_5","kind":"function","span":{"start":[1386,1],"end":[1389,5],"bytes":[44081,44241]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked.closure_5","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[1386,1],"end":[1386,72],"bytes":[44081,44152]}}],"body":{}},"closure_6":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked/github.com/benbjohnson/litestream.DB.syncLocked.closure_6","kind":"function","span":{"start":[1395,1],"end":[1398,4],"bytes":[44400,44551]},"signature":"github.com/benbjohnson/litestream.DB.syncLocked.closure_6","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[1395,1],"end":[1395,66],"bytes":[44400,44465]}}],"body":{}}}},"github.com/benbjohnson/litestream.DB.syncOnce":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncOnce","kind":"method","span":{"start":[1301,1],"end":[1308,2],"bytes":[41559,41795]},"signature":"github.com/benbjohnson/litestream.DB.syncOnce","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1301,1],"end":[1301,89],"bytes":[41559,41647]}},{"name":"maxSyncWALBytes","type":"int64","span":{"start":[1301,1],"end":[1301,89],"bytes":[41559,41647]}}],"return_type":"(github.com/benbjohnson/litestream.syncResult, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1302:12":{"kind":"call","span":{"start":[1302,12],"end":[1302,28],"bytes":[41659,41675]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec"},"1305:8":{"kind":"call","span":{"start":[1305,8],"end":[1305,29],"bytes":[41727,41748]},"callee":null},"1307:9":{"kind":"call","span":{"start":[1307,9],"end":[1307,44],"bytes":[41758,41793]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked"}}},"github.com/benbjohnson/litestream.DB.syncReplicaWithRetry":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncReplicaWithRetry","kind":"method","span":{"start":[944,1],"end":[1057,2],"bytes":[31215,34369]},"signature":"github.com/benbjohnson/litestream.DB.syncReplicaWithRetry","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[944,1],"end":[944,64],"bytes":[31215,31278]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":24},"body":{"1002:13":{"kind":"call","span":{"start":[1002,13],"end":[1002,37],"bytes":[32598,32622]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync"},"1004:5":{"kind":"call","span":{"start":[1004,5],"end":[1006,40],"bytes":[32661,32780]},"callee":null},"1006:18":{"kind":"call","span":{"start":[1006,18],"end":[1006,39],"bytes":[32758,32779]},"callee":null},"1015:10":{"kind":"call","span":{"start":[1015,10],"end":[1015,28],"bytes":[32916,32934]},"callee":null},"1016:4":{"kind":"call","span":{"start":[1016,4],"end":[1019,22],"bytes":[32939,33078]},"callee":null},"1018:17":{"kind":"call","span":{"start":[1018,17],"end":[1018,38],"bytes":[33034,33055]},"callee":null},"1020:11":{"kind":"call","span":{"start":[1020,11],"end":[1020,86],"bytes":[33089,33164]},"callee":null},"1022:4":{"kind":"call","span":{"start":[1022,4],"end":[1025,22],"bytes":[33186,33325]},"callee":null},"1024:17":{"kind":"call","span":{"start":[1024,17],"end":[1024,38],"bytes":[33281,33302]},"callee":null},"1026:11":{"kind":"call","span":{"start":[1026,11],"end":[1026,79],"bytes":[33336,33404]},"callee":null},"1032:4":{"kind":"call","span":{"start":[1032,4],"end":[1036,53],"bytes":[33508,33723]},"callee":null},"1035:16":{"kind":"call","span":{"start":[1035,16],"end":[1035,37],"bytes":[33648,33669]},"callee":null},"1036:18":{"kind":"call","span":{"start":[1036,18],"end":[1036,52],"bytes":[33688,33722]},"callee":null},"1036:29":{"kind":"call","span":{"start":[1036,29],"end":[1036,51],"bytes":[33699,33721]},"callee":null},"1038:4":{"kind":"call","span":{"start":[1038,4],"end":[1042,53],"bytes":[33738,33924]},"callee":null},"1041:16":{"kind":"call","span":{"start":[1041,16],"end":[1041,37],"bytes":[33849,33870]},"callee":null},"1042:18":{"kind":"call","span":{"start":[1042,18],"end":[1042,52],"bytes":[33889,33923]},"callee":null},"1042:29":{"kind":"call","span":{"start":[1042,29],"end":[1042,51],"bytes":[33900,33922]},"callee":null},"1047:10":{"kind":"call","span":{"start":[1047,10],"end":[1047,30],"bytes":[34006,34026]},"callee":null},"1048:10":{"kind":"call","span":{"start":[1048,10],"end":[1048,28],"bytes":[34037,34055]},"callee":null},"1049:11":{"kind":"call","span":{"start":[1049,11],"end":[1049,86],"bytes":[34067,34142]},"callee":null},"1051:4":{"kind":"call","span":{"start":[1051,4],"end":[1053,39],"bytes":[34164,34281]},"callee":null},"1053:17":{"kind":"call","span":{"start":[1053,17],"end":[1053,38],"bytes":[34259,34280]},"callee":null},"1054:11":{"kind":"call","span":{"start":[1054,11],"end":[1054,79],"bytes":[34292,34360]},"callee":null},"954:10":{"kind":"call","span":{"start":[954,10],"end":[954,30],"bytes":[31470,31490]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync"},"963:33":{"kind":"call","span":{"start":[963,33],"end":[963,66],"bytes":[31682,31715]},"callee":null},"964:8":{"kind":"call","span":{"start":[964,8],"end":[964,24],"bytes":[31723,31739]},"callee":null},"971:25":{"kind":"call","span":{"start":[971,25],"end":[971,56],"bytes":[31989,32020]},"callee":null},"972:6":{"kind":"call","span":{"start":[972,6],"end":[979,6],"bytes":[32026,32140]},"callee":null,"is_goroutine":true},"984:15":{"kind":"call","span":{"start":[984,15],"end":[984,25],"bytes":[32192,32202]},"callee":null},"991:5":{"kind":"call","span":{"start":[991,5],"end":[993,40],"bytes":[32328,32456]},"callee":null},"993:18":{"kind":"call","span":{"start":[993,18],"end":[993,39],"bytes":[32434,32455]},"callee":null},"994:12":{"kind":"call","span":{"start":[994,12],"end":[994,80],"bytes":[32468,32536]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncReplicaWithRetry/github.com/benbjohnson/litestream.DB.syncReplicaWithRetry.closure_1","kind":"function","span":{"start":[972,1],"end":[979,6],"bytes":[32021,32140]},"signature":"github.com/benbjohnson/litestream.DB.syncReplicaWithRetry.closure_1","parameters":[],"body":{"975:5":{"kind":"call","span":{"start":[975,5],"end":[975,17],"bytes":[32070,32082]},"callee":null},"976:11":{"kind":"call","span":{"start":[976,11],"end":[976,29],"bytes":[32093,32111]},"callee":null},"977:5":{"kind":"call","span":{"start":[977,5],"end":[977,17],"bytes":[32117,32129]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.verify":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verify","kind":"method","span":{"start":[1741,1],"end":[1751,2],"bytes":[56519,56779]},"signature":"github.com/benbjohnson/litestream.DB.verify","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1741,1],"end":[1741,89],"bytes":[56519,56607]}},{"name":"state","type":"*github.com/benbjohnson/litestream.syncState","span":{"start":[1741,1],"end":[1741,89],"bytes":[56519,56607]}}],"return_type":"(github.com/benbjohnson/litestream.syncInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1742:14":{"kind":"call","span":{"start":[1742,14],"end":[1742,22],"bytes":[56621,56629]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"1744:16":{"kind":"call","span":{"start":[1744,16],"end":[1744,42],"bytes":[56662,56688]},"callee":null},"1747:9":{"kind":"call","span":{"start":[1747,9],"end":[1750,4],"bytes":[56701,56777]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor"}}},"github.com/benbjohnson/litestream.DB.verifyAndSync":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSync","kind":"method","span":{"start":[1412,1],"end":[1422,2],"bytes":[44855,45168]},"signature":"github.com/benbjohnson/litestream.DB.verifyAndSync","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1412,1],"end":[1412,109],"bytes":[44855,44963]}},{"name":"checkpointing","type":"bool","span":{"start":[1412,1],"end":[1412,109],"bytes":[44855,44963]}},{"name":"state","type":"*github.com/benbjohnson/litestream.syncState","span":{"start":[1412,1],"end":[1412,109],"bytes":[44855,44963]}}],"return_type":"(github.com/benbjohnson/litestream.syncResult, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1413:14":{"kind":"call","span":{"start":[1413,14],"end":[1413,22],"bytes":[44977,44985]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"1415:24":{"kind":"call","span":{"start":[1415,24],"end":[1415,50],"bytes":[45026,45052]},"callee":null},"1418:9":{"kind":"call","span":{"start":[1418,9],"end":[1421,7],"bytes":[45065,45166]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor"}}},"github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","kind":"method","span":{"start":[1424,1],"end":[1465,2],"bytes":[45170,46694]},"signature":"github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1424,1],"end":[1424,146],"bytes":[45170,45315]}},{"name":"checkpointing","type":"bool","span":{"start":[1424,1],"end":[1424,146],"bytes":[45170,45315]}},{"name":"exec","type":"*github.com/benbjohnson/litestream.syncExecutor","span":{"start":[1424,1],"end":[1424,146],"bytes":[45170,45315]}},{"name":"maxSyncWALBytes","type":"int64","span":{"start":[1424,1],"end":[1424,146],"bytes":[45170,45315]}}],"return_type":"(github.com/benbjohnson/litestream.syncResult, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"1425:2":{"kind":"call","span":{"start":[1425,2],"end":[1428,4],"bytes":[45317,45465]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1437:22":{"kind":"call","span":{"start":[1437,22],"end":[1437,38],"bytes":[45823,45839]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize"},"1439:25":{"kind":"call","span":{"start":[1439,25],"end":[1439,68],"bytes":[45882,45925]},"callee":null},"1446:2":{"kind":"call","span":{"start":[1446,2],"end":[1446,38],"bytes":[46107,46143]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1447:15":{"kind":"call","span":{"start":[1447,15],"end":[1447,47],"bytes":[46158,46190]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor"},"1449:24":{"kind":"call","span":{"start":[1449,24],"end":[1449,70],"bytes":[46231,46277]},"callee":null},"1452:2":{"kind":"call","span":{"start":[1452,2],"end":[1457,4],"bytes":[46283,46493]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase"},"1458:17":{"kind":"call","span":{"start":[1458,17],"end":[1458,73],"bytes":[46510,46566]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync"},"1460:24":{"kind":"call","span":{"start":[1460,24],"end":[1460,51],"bytes":[46607,46634]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor.closure_1","kind":"function","span":{"start":[1425,1],"end":[1428,4],"bytes":[45316,45465]},"signature":"github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor.closure_1","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[1425,1],"end":[1425,60],"bytes":[45316,45375]}}],"body":{}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor.closure_2","kind":"function","span":{"start":[1452,1],"end":[1457,4],"bytes":[46282,46493]},"signature":"github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor.closure_2","parameters":[{"name":"s","type":"*github.com/benbjohnson/litestream.diagState","span":{"start":[1452,1],"end":[1452,60],"bytes":[46282,46341]}}],"body":{}}}},"github.com/benbjohnson/litestream.DB.verifyWithExecutor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","kind":"method","span":{"start":[1753,1],"end":[1896,2],"bytes":[56781,62028]},"signature":"github.com/benbjohnson/litestream.DB.verifyWithExecutor","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1753,1],"end":[1753,103],"bytes":[56781,56883]}},{"name":"exec","type":"*github.com/benbjohnson/litestream.syncExecutor","span":{"start":[1753,1],"end":[1753,103],"bytes":[56781,56883]}}],"return_type":"(github.com/benbjohnson/litestream.syncInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":20},"body":{"1754:15":{"kind":"call","span":{"start":[1754,15],"end":[1754,54],"bytes":[56898,56937]},"callee":null},"1763:13":{"kind":"call","span":{"start":[1763,13],"end":[1763,56],"bytes":[57113,57156]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"1764:18":{"kind":"call","span":{"start":[1764,18],"end":[1764,34],"bytes":[57174,57190]},"callee":null},"1766:16":{"kind":"call","span":{"start":[1766,16],"end":[1766,98],"bytes":[57223,57305]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"1766:48":{"kind":"call","span":{"start":[1766,48],"end":[1766,69],"bytes":[57255,57276]},"callee":null},"1766:71":{"kind":"call","span":{"start":[1766,71],"end":[1766,92],"bytes":[57278,57299]},"callee":null},"1768:8":{"kind":"call","span":{"start":[1768,8],"end":[1768,40],"bytes":[57316,57348]},"callee":null},"1770:9":{"kind":"call","span":{"start":[1770,9],"end":[1770,32],"bytes":[57358,57381]},"callee":null},"1771:12":{"kind":"call","span":{"start":[1771,12],"end":[1771,30],"bytes":[57393,57411]},"callee":null},"1773:13":{"kind":"call","span":{"start":[1773,13],"end":[1773,136],"bytes":[57479,57602]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"1773:47":{"kind":"call","span":{"start":[1773,47],"end":[1773,68],"bytes":[57513,57534]},"callee":null},"1773:70":{"kind":"call","span":{"start":[1773,70],"end":[1773,91],"bytes":[57536,57557]},"callee":null},"1773:93":{"kind":"call","span":{"start":[1773,93],"end":[1773,135],"bytes":[57559,57601]},"callee":null},"1776:16":{"kind":"call","span":{"start":[1776,16],"end":[1776,28],"bytes":[57643,57655]},"callee":null},"1776:41":{"kind":"call","span":{"start":[1776,41],"end":[1776,53],"bytes":[57668,57680]},"callee":null},"1777:15":{"kind":"call","span":{"start":[1777,15],"end":[1777,27],"bytes":[57703,57715]},"callee":null},"1778:15":{"kind":"call","span":{"start":[1778,15],"end":[1778,27],"bytes":[57739,57751]},"callee":null},"1779:20":{"kind":"call","span":{"start":[1779,20],"end":[1779,32],"bytes":[57780,57792]},"callee":null},"1782:16":{"kind":"call","span":{"start":[1782,16],"end":[1782,37],"bytes":[57895,57916]},"callee":null},"1782:24":{"kind":"call","span":{"start":[1782,24],"end":[1782,36],"bytes":[57903,57915]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1783:16":{"kind":"call","span":{"start":[1783,16],"end":[1783,52],"bytes":[57946,57982]},"callee":null},"1784:26":{"kind":"call","span":{"start":[1784,26],"end":[1784,35],"bytes":[58008,58017]},"callee":null},"1792:16":{"kind":"call","span":{"start":[1792,16],"end":[1792,43],"bytes":[58389,58416]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader"},"1792:30":{"kind":"call","span":{"start":[1792,30],"end":[1792,42],"bytes":[58403,58415]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1794:18":{"kind":"call","span":{"start":[1794,18],"end":[1794,82],"bytes":[58453,58517]},"callee":null},"1798:17":{"kind":"call","span":{"start":[1798,17],"end":[1798,50],"bytes":[58571,58604]},"callee":null},"1799:17":{"kind":"call","span":{"start":[1799,17],"end":[1799,50],"bytes":[58621,58654]},"callee":null},"1804:4":{"kind":"call","span":{"start":[1804,4],"end":[1806,29],"bytes":[58743,58897]},"callee":null},"1816:15":{"kind":"call","span":{"start":[1816,15],"end":[1816,42],"bytes":[59081,59108]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader"},"1816:29":{"kind":"call","span":{"start":[1816,29],"end":[1816,41],"bytes":[59095,59107]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1818:16":{"kind":"call","span":{"start":[1818,16],"end":[1818,61],"bytes":[59141,59186]},"callee":null},"1820:11":{"kind":"call","span":{"start":[1820,11],"end":[1820,45],"bytes":[59200,59234]},"callee":null},"1821:11":{"kind":"call","span":{"start":[1821,11],"end":[1821,45],"bytes":[59245,59279]},"callee":null},"1822:24":{"kind":"call","span":{"start":[1822,24],"end":[1822,36],"bytes":[59303,59315]},"callee":null},"1822:58":{"kind":"call","span":{"start":[1822,58],"end":[1822,70],"bytes":[59337,59349]},"callee":null},"1833:3":{"kind":"call","span":{"start":[1833,3],"end":[1833,73],"bytes":[59806,59876]},"callee":null},"1844:2":{"kind":"call","span":{"start":[1844,2],"end":[1844,83],"bytes":[60154,60235]},"callee":null},"1855:16":{"kind":"call","span":{"start":[1855,16],"end":[1855,93],"bytes":[60608,60685]},"callee":null},"1859:24":{"kind":"call","span":{"start":[1859,24],"end":[1859,76],"bytes":[60801,60853]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lastPageMatch"},"1861:16":{"kind":"call","span":{"start":[1861,16],"end":[1861,54],"bytes":[60886,60924]},"callee":null},"1870:2":{"kind":"call","span":{"start":[1870,2],"end":[1870,61],"bytes":[61217,61276]},"callee":null},"1875:3":{"kind":"call","span":{"start":[1875,3],"end":[1877,19],"bytes":[61450,61544]},"callee":null},"1882:104":{"kind":"call","span":{"start":[1882,104],"end":[1882,116],"bytes":[61720,61732]},"callee":null},"1882:23":{"kind":"call","span":{"start":[1882,23],"end":[1882,128],"bytes":[61639,61744]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.detectFullCheckpoint"},"1882:81":{"kind":"call","span":{"start":[1882,81],"end":[1882,93],"bytes":[61697,61709]},"callee":null},"1883:17":{"kind":"call","span":{"start":[1883,17],"end":[1883,62],"bytes":[61775,61820]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor/github.com/benbjohnson/litestream.DB.verifyWithExecutor.closure_1","kind":"function","span":{"start":[1768,1],"end":[1768,40],"bytes":[57309,57348]},"signature":"github.com/benbjohnson/litestream.DB.verifyWithExecutor.closure_1","parameters":[],"body":{"1768:21":{"kind":"call","span":{"start":[1768,21],"end":[1768,36],"bytes":[57329,57344]},"callee":null}}}}},"github.com/benbjohnson/litestream.DB.walFileSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize","kind":"method","span":{"start":[1622,1],"end":[1630,2],"bytes":[52670,52857]},"signature":"github.com/benbjohnson/litestream.DB.walFileSize","parameters":[],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"1623:13":{"kind":"call","span":{"start":[1623,13],"end":[1623,34],"bytes":[52727,52748]},"callee":null},"1623:21":{"kind":"call","span":{"start":[1623,21],"end":[1623,33],"bytes":[52735,52747]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath"},"1624:5":{"kind":"call","span":{"start":[1624,5],"end":[1624,23],"bytes":[52753,52771]},"callee":null},"1629:9":{"kind":"call","span":{"start":[1629,9],"end":[1629,18],"bytes":[52841,52850]},"callee":null}}},"github.com/benbjohnson/litestream.DB.writeLTXFromDB":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.writeLTXFromDB","kind":"method","span":{"start":[2362,1],"end":[2407,2],"bytes":[75778,77350]},"signature":"github.com/benbjohnson/litestream.DB.writeLTXFromDB","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2362,1],"end":[2362,135],"bytes":[75778,75912]}},{"name":"enc","type":"*github.com/superfly/ltx.Encoder","span":{"start":[2362,1],"end":[2362,135],"bytes":[75778,75912]}},{"name":"walFile","type":"*os.File","span":{"start":[2362,1],"end":[2362,135],"bytes":[75778,75912]}},{"name":"commit","type":"uint32","span":{"start":[2362,1],"end":[2362,135],"bytes":[75778,75912]}},{"name":"pageMap","type":"map[uint32]int64","span":{"start":[2362,1],"end":[2362,135],"bytes":[75778,75912]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"2363:14":{"kind":"call","span":{"start":[2363,14],"end":[2363,47],"bytes":[75926,75959]},"callee":null},"2363:27":{"kind":"call","span":{"start":[2363,27],"end":[2363,46],"bytes":[75939,75958]},"callee":null},"2364:10":{"kind":"call","span":{"start":[2364,10],"end":[2364,35],"bytes":[75969,75994]},"callee":null},"2366:14":{"kind":"call","span":{"start":[2366,14],"end":[2366,23],"bytes":[76009,76018]},"callee":null},"2373:10":{"kind":"call","span":{"start":[2373,10],"end":[2373,20],"bytes":[76163,76173]},"callee":null},"2374:11":{"kind":"call","span":{"start":[2374,11],"end":[2374,29],"bytes":[76185,76203]},"callee":null},"2380:4":{"kind":"call","span":{"start":[2380,4],"end":[2380,147],"bytes":[76311,76454]},"callee":null},"2380:76":{"kind":"call","span":{"start":[2380,76],"end":[2380,88],"bytes":[76383,76395]},"callee":null},"2382:17":{"kind":"call","span":{"start":[2382,17],"end":[2382,64],"bytes":[76472,76519]},"callee":null},"2383:12":{"kind":"call","span":{"start":[2383,12],"end":[2383,66],"bytes":[76545,76599]},"callee":null},"2384:19":{"kind":"call","span":{"start":[2384,19],"end":[2384,28],"bytes":[76618,76627]},"callee":null},"2385:12":{"kind":"call","span":{"start":[2385,12],"end":[2385,63],"bytes":[76641,76692]},"callee":null},"2388:14":{"kind":"call","span":{"start":[2388,14],"end":[2388,62],"bytes":[76712,76760]},"callee":null},"2389:12":{"kind":"call","span":{"start":[2389,12],"end":[2389,67],"bytes":[76786,76841]},"callee":null},"2394:13":{"kind":"call","span":{"start":[2394,13],"end":[2394,26],"bytes":[76876,76889]},"callee":null},"2394:29":{"kind":"call","span":{"start":[2394,29],"end":[2394,47],"bytes":[76892,76910]},"callee":null},"2395:3":{"kind":"call","span":{"start":[2395,3],"end":[2395,103],"bytes":[76913,77013]},"callee":null},"2398:16":{"kind":"call","span":{"start":[2398,16],"end":[2398,41],"bytes":[77083,77108]},"callee":null},"2399:11":{"kind":"call","span":{"start":[2399,11],"end":[2399,61],"bytes":[77133,77183]},"callee":null},"2401:13":{"kind":"call","span":{"start":[2401,13],"end":[2401,61],"bytes":[77200,77248]},"callee":null},"2402:11":{"kind":"call","span":{"start":[2402,11],"end":[2402,66],"bytes":[77273,77328]},"callee":null}}},"github.com/benbjohnson/litestream.DB.writeLTXFromWAL":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.writeLTXFromWAL","kind":"method","span":{"start":[2409,1],"end":[2466,2],"bytes":[77352,79300]},"signature":"github.com/benbjohnson/litestream.DB.writeLTXFromWAL","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[2409,1],"end":[2409,148],"bytes":[77352,77499]}},{"name":"enc","type":"*github.com/superfly/ltx.Encoder","span":{"start":[2409,1],"end":[2409,148],"bytes":[77352,77499]}},{"name":"walFile","type":"*os.File","span":{"start":[2409,1],"end":[2409,148],"bytes":[77352,77499]}},{"name":"prevCommit","type":"uint32","span":{"start":[2409,1],"end":[2409,148],"bytes":[77352,77499]}},{"name":"commit","type":"uint32","span":{"start":[2409,1],"end":[2409,148],"bytes":[77352,77499]}},{"name":"pageMap","type":"map[uint32]int64","span":{"start":[2409,1],"end":[2409,148],"bytes":[77352,77499]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":16},"body":{"2411:11":{"kind":"call","span":{"start":[2411,11],"end":[2411,42],"bytes":[77588,77619]},"callee":null},"2411:29":{"kind":"call","span":{"start":[2411,29],"end":[2411,41],"bytes":[77606,77618]},"callee":null},"2413:11":{"kind":"call","span":{"start":[2413,11],"end":[2413,30],"bytes":[77659,77678]},"callee":null},"2415:14":{"kind":"call","span":{"start":[2415,14],"end":[2415,47],"bytes":[77695,77728]},"callee":null},"2415:27":{"kind":"call","span":{"start":[2415,27],"end":[2415,46],"bytes":[77708,77727]},"callee":null},"2417:15":{"kind":"call","span":{"start":[2417,15],"end":[2417,25],"bytes":[77769,77779]},"callee":null},"2425:12":{"kind":"call","span":{"start":[2425,12],"end":[2425,31],"bytes":[77942,77961]},"callee":null},"2427:21":{"kind":"call","span":{"start":[2427,21],"end":[2427,31],"bytes":[77986,77996]},"callee":null},"2428:4":{"kind":"call","span":{"start":[2428,4],"end":[2432,22],"bytes":[78030,78196]},"callee":null},"2429:13":{"kind":"call","span":{"start":[2429,13],"end":[2429,25],"bytes":[78100,78112]},"callee":null},"2435:2":{"kind":"call","span":{"start":[2435,2],"end":[2435,20],"bytes":[78205,78223]},"callee":null},"2437:10":{"kind":"call","span":{"start":[2437,10],"end":[2437,35],"bytes":[78234,78259]},"callee":null},"2440:10":{"kind":"call","span":{"start":[2440,10],"end":[2440,20],"bytes":[78310,78320]},"callee":null},"2441:11":{"kind":"call","span":{"start":[2441,11],"end":[2441,29],"bytes":[78332,78350]},"callee":null},"2445:4":{"kind":"call","span":{"start":[2445,4],"end":[2445,148],"bytes":[78408,78552]},"callee":null},"2445:76":{"kind":"call","span":{"start":[2445,76],"end":[2445,88],"bytes":[78480,78492]},"callee":null},"2447:17":{"kind":"call","span":{"start":[2447,17],"end":[2447,64],"bytes":[78570,78617]},"callee":null},"2448:12":{"kind":"call","span":{"start":[2448,12],"end":[2448,66],"bytes":[78643,78697]},"callee":null},"2449:19":{"kind":"call","span":{"start":[2449,19],"end":[2449,28],"bytes":[78716,78725]},"callee":null},"2450:12":{"kind":"call","span":{"start":[2450,12],"end":[2450,63],"bytes":[78739,78790]},"callee":null},"2453:14":{"kind":"call","span":{"start":[2453,14],"end":[2453,27],"bytes":[78820,78833]},"callee":null},"2453:30":{"kind":"call","span":{"start":[2453,30],"end":[2453,48],"bytes":[78836,78854]},"callee":null},"2454:4":{"kind":"call","span":{"start":[2454,4],"end":[2454,155],"bytes":[78858,79009]},"callee":null},"2454:81":{"kind":"call","span":{"start":[2454,81],"end":[2454,93],"bytes":[78935,78947]},"callee":null},"2456:17":{"kind":"call","span":{"start":[2456,17],"end":[2456,42],"bytes":[79027,79052]},"callee":null},"2457:12":{"kind":"call","span":{"start":[2457,12],"end":[2457,62],"bytes":[79078,79128]},"callee":null},"2461:13":{"kind":"call","span":{"start":[2461,13],"end":[2461,61],"bytes":[79151,79199]},"callee":null},"2462:11":{"kind":"call","span":{"start":[2462,11],"end":[2462,66],"bytes":[79224,79279]},"callee":null}}}},"fields":{"BusyTimeout":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/BusyTimeout","kind":"field","type":"time.Duration","span":{"start":[157,1],"end":[157,27],"bytes":[5538,5564]}},"CheckpointInterval":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/CheckpointInterval","kind":"field","type":"time.Duration","span":{"start":[145,1],"end":[145,34],"bytes":[5123,5156]}},"Done":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/Done","kind":"field","type":"\u003c-chan struct{}","span":{"start":[105,1],"end":[105,24],"bytes":[3368,3391]}},"L0Retention":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/L0Retention","kind":"field","type":"time.Duration","span":{"start":[160,1],"end":[160,27],"bytes":[5642,5668]}},"Logger":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/Logger","kind":"field","type":"*log/slog.Logger","span":{"start":[192,1],"end":[192,21],"bytes":[6903,6923]}},"MaxSyncWALBytes":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/MaxSyncWALBytes","kind":"field","type":"int64","span":{"start":[154,1],"end":[154,23],"bytes":[5467,5489]}},"MinCheckpointPageN":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/MinCheckpointPageN","kind":"field","type":"int","span":{"start":[127,1],"end":[127,24],"bytes":[4322,4345]}},"MonitorInterval":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/MonitorInterval","kind":"field","type":"time.Duration","span":{"start":[148,1],"end":[148,31],"bytes":[5201,5231]}},"Replica":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/Replica","kind":"field","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[174,1],"end":[174,18],"bytes":[6207,6224]}},"RetentionEnabled":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/RetentionEnabled","kind":"field","type":"bool","span":{"start":[170,1],"end":[170,23],"bytes":[6107,6129]}},"ShutdownSyncInterval":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/ShutdownSyncInterval","kind":"field","type":"time.Duration","span":{"start":[184,1],"end":[184,36],"bytes":[6584,6619]}},"ShutdownSyncTimeout":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/ShutdownSyncTimeout","kind":"field","type":"time.Duration","span":{"start":[183,1],"end":[183,36],"bytes":[6548,6583]}},"TruncatePageN":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/TruncatePageN","kind":"field","type":"int","span":{"start":[137,1],"end":[137,19],"bytes":[4817,4835]}},"VerifyCompaction":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/VerifyCompaction","kind":"field","type":"bool","span":{"start":[165,1],"end":[165,23],"bytes":[5864,5886]}},"cancel":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/cancel","kind":"field","type":"func()","span":{"start":[103,1],"end":[103,15],"bytes":[3330,3344]}},"checkpointErrorNCounterVec":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/checkpointErrorNCounterVec","kind":"field","type":"*github.com/prometheus/client_golang/prometheus.CounterVec","span":{"start":[118,1],"end":[118,52],"bytes":[3867,3918]}},"checkpointNCounterVec":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/checkpointNCounterVec","kind":"field","type":"*github.com/prometheus/client_golang/prometheus.CounterVec","span":{"start":[117,1],"end":[117,52],"bytes":[3815,3866]}},"checkpointSecondsCounterVec":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/checkpointSecondsCounterVec","kind":"field","type":"*github.com/prometheus/client_golang/prometheus.CounterVec","span":{"start":[119,1],"end":[119,52],"bytes":[3919,3970]}},"chkMu":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/chkMu","kind":"field","type":"sync.RWMutex","span":{"start":[77,1],"end":[77,44],"bytes":[2567,2610]}},"compactor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/compactor","kind":"field","type":"*github.com/benbjohnson/litestream.Compactor","span":{"start":[178,1],"end":[178,22],"bytes":[6358,6379]}},"ctx":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/ctx","kind":"field","type":"context.Context","span":{"start":[102,1],"end":[102,24],"bytes":[3306,3329]}},"db":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/db","kind":"field","type":"*database/sql.DB","span":{"start":[72,1],"end":[72,44],"bytes":[2308,2351]}},"dbSizeGauge":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/dbSizeGauge","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Gauge","span":{"start":[109,1],"end":[109,46],"bytes":[3439,3484]}},"dirInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/dirInfo","kind":"field","type":"os.FileInfo","span":{"start":[96,1],"end":[96,60],"bytes":[3051,3110]}},"diskFullGauge":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/diskFullGauge","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Gauge","span":{"start":[116,1],"end":[116,46],"bytes":[3769,3814]}},"execSem":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/execSem","kind":"field","type":"*golang.org/x/sync/semaphore.Weighted","span":{"start":[69,1],"end":[69,31],"bytes":[2173,2203]}},"f":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/f","kind":"field","type":"*os.File","span":{"start":[73,1],"end":[73,60],"bytes":[2352,2411]}},"fileInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/fileInfo","kind":"field","type":"os.FileInfo","span":{"start":[95,1],"end":[95,52],"bytes":[2999,3050]}},"lastSuccessfulSyncAt":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/lastSuccessfulSyncAt","kind":"field","type":"time.Time","span":{"start":[189,1],"end":[189,32],"bytes":[6793,6824]}},"lastSuccessfulSyncMu":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/lastSuccessfulSyncMu","kind":"field","type":"sync.RWMutex","span":{"start":[188,1],"end":[188,35],"bytes":[6758,6792]}},"maxLTXFileInfos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/maxLTXFileInfos","kind":"field","type":"struct{sync.Mutex; m map[int]*github.com/superfly/ltx.FileInfo}","span":{"start":[83,1],"end":[86,3],"bytes":[2769,2836]}},"metaPath":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/metaPath","kind":"field","type":"string","span":{"start":[71,1],"end":[71,59],"bytes":[2249,2307]}},"metricsRegistered":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/metricsRegistered","kind":"field","type":"bool","span":{"start":[108,1],"end":[108,34],"bytes":[3405,3438]}},"mu":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/mu","kind":"field","type":"sync.RWMutex","span":{"start":[68,1],"end":[68,24],"bytes":[2149,2172]}},"notify":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/notify","kind":"field","type":"chan struct{}","span":{"start":[76,1],"end":[76,49],"bytes":[2518,2566]}},"openLTXFile":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/openLTXFile","kind":"field","type":"func(name string, flag int, perm os.FileMode) (github.com/benbjohnson/litestream.ltxStagingFile, error)","span":{"start":[100,1],"end":[100,83],"bytes":[3222,3304]}},"opened":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/opened","kind":"field","type":"bool","span":{"start":[78,1],"end":[78,81],"bytes":[2611,2691]}},"pageSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/pageSize","kind":"field","type":"int","span":{"start":[75,1],"end":[75,48],"bytes":[2470,2517]}},"path":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/path","kind":"field","type":"string","span":{"start":[70,1],"end":[70,45],"bytes":[2204,2248]}},"pos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/pos","kind":"field","type":"struct{sync.Mutex; value *github.com/superfly/ltx.Pos}","span":{"start":[90,1],"end":[93,3],"bytes":[2951,2997]}},"rtx":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/rtx","kind":"field","type":"*database/sql.Tx","span":{"start":[74,1],"end":[74,58],"bytes":[2412,2469]}},"syncDiag":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/syncDiag","kind":"field","type":"github.com/benbjohnson/litestream.diagState","span":{"start":[80,1],"end":[80,21],"bytes":[2713,2733]}},"syncErrorNCounter":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/syncErrorNCounter","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Counter","span":{"start":[114,1],"end":[114,48],"bytes":[3673,3720]}},"syncNCounter":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/syncNCounter","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Counter","span":{"start":[113,1],"end":[113,48],"bytes":[3625,3672]}},"syncSecondsCounter":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/syncSecondsCounter","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Counter","span":{"start":[115,1],"end":[115,48],"bytes":[3721,3768]}},"syncState":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/syncState","kind":"field","type":"github.com/benbjohnson/litestream.syncState","span":{"start":[79,1],"end":[79,21],"bytes":[2692,2712]}},"totalWALBytesCounter":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/totalWALBytesCounter","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Counter","span":{"start":[111,1],"end":[111,48],"bytes":[3531,3578]}},"txIDGauge":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/txIDGauge","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Gauge","span":{"start":[112,1],"end":[112,46],"bytes":[3579,3624]}},"walSizeGauge":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/walSizeGauge","kind":"field","type":"github.com/prometheus/client_golang/prometheus.Gauge","span":{"start":[110,1],"end":[110,46],"bytes":[3485,3530]}},"wg":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/wg","kind":"field","type":"sync.WaitGroup","span":{"start":[104,1],"end":[104,23],"bytes":[3345,3367]}}}},"IntegrityCheckMode":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.IntegrityCheckMode","kind":"struct","span":{"start":[3376,1],"end":[3376,28],"bytes":[108196,108223]},"callables":{}},"RestoreOptions":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions","kind":"struct","span":{"start":[3385,1],"end":[3411,2],"bytes":[108378,109263]},"callables":{},"fields":{"Follow":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/Follow","kind":"field","type":"bool","span":{"start":[3403,1],"end":[3403,13],"bytes":[108945,108957]}},"FollowInterval":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/FollowInterval","kind":"field","type":"time.Duration","span":{"start":[3406,1],"end":[3406,30],"bytes":[109040,109069]}},"IntegrityCheck":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/IntegrityCheck","kind":"field","type":"github.com/benbjohnson/litestream.IntegrityCheckMode","span":{"start":[3410,1],"end":[3410,35],"bytes":[109227,109261]}},"OutputPath":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/OutputPath","kind":"field","type":"string","span":{"start":[3388,1],"end":[3388,19],"bytes":[108484,108502]}},"Parallelism":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/Parallelism","kind":"field","type":"int","span":{"start":[3399,1],"end":[3399,17],"bytes":[108789,108805]}},"TXID":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/TXID","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[3392,1],"end":[3392,15],"bytes":[108574,108588]}},"Timestamp":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.RestoreOptions/Timestamp","kind":"field","type":"time.Time","span":{"start":[3396,1],"end":[3396,21],"bytes":[108691,108711]}}}},"SyncDiagnostic":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic","kind":"struct","span":{"start":[287,1],"end":[305,2],"bytes":[10852,11943]},"callables":{},"fields":{"Active":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Active","kind":"field","type":"bool","span":{"start":[289,1],"end":[289,48],"bytes":[10927,10974]}},"CheckpointMode":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/CheckpointMode","kind":"field","type":"string","span":{"start":[299,1],"end":[299,67],"bytes":[11538,11604]}},"ElapsedSeconds":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/ElapsedSeconds","kind":"field","type":"float64","span":{"start":[294,1],"end":[294,67],"bytes":[11217,11283]}},"Error":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Error","kind":"field","type":"string","span":{"start":[301,1],"end":[301,57],"bytes":[11663,11719]}},"ExecutorWaitSeconds":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/ExecutorWaitSeconds","kind":"field","type":"float64","span":{"start":[304,1],"end":[304,73],"bytes":[11869,11941]}},"ExecutorWaitStarted":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/ExecutorWaitStarted","kind":"field","type":"*time.Time","span":{"start":[303,1],"end":[303,76],"bytes":[11793,11868]}},"ExecutorWaiterCount":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/ExecutorWaiterCount","kind":"field","type":"int","span":{"start":[302,1],"end":[302,73],"bytes":[11720,11792]}},"LastSyncedWALOffset":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/LastSyncedWALOffset","kind":"field","type":"int64","span":{"start":[297,1],"end":[297,74],"bytes":[11400,11473]}},"Operation":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Operation","kind":"field","type":"string","span":{"start":[290,1],"end":[290,61],"bytes":[10975,11035]}},"Path":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Path","kind":"field","type":"string","span":{"start":[288,1],"end":[288,46],"bytes":[10881,10926]}},"Phase":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Phase","kind":"field","type":"string","span":{"start":[291,1],"end":[291,57],"bytes":[11036,11092]}},"Reason":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Reason","kind":"field","type":"string","span":{"start":[300,1],"end":[300,58],"bytes":[11605,11662]}},"Snapshotting":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/Snapshotting","kind":"field","type":"bool","span":{"start":[298,1],"end":[298,64],"bytes":[11474,11537]}},"StartedAt":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/StartedAt","kind":"field","type":"*time.Time","span":{"start":[292,1],"end":[292,62],"bytes":[11093,11154]}},"TXID":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/TXID","kind":"field","type":"uint64","span":{"start":[295,1],"end":[295,56],"bytes":[11284,11339]}},"UpdatedAt":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/UpdatedAt","kind":"field","type":"*time.Time","span":{"start":[293,1],"end":[293,62],"bytes":[11155,11216]}},"WALSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncDiagnostic/WALSize","kind":"field","type":"int64","span":{"start":[296,1],"end":[296,60],"bytes":[11340,11399]}}}},"SyncStatus":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncStatus","kind":"struct","span":{"start":[736,1],"end":[740,2],"bytes":[25295,25380]},"callables":{},"fields":{"InSync":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncStatus/InSync","kind":"field","type":"bool","span":{"start":[739,1],"end":[739,17],"bytes":[25362,25378]}},"LocalTXID":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncStatus/LocalTXID","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[737,1],"end":[737,21],"bytes":[25320,25340]}},"RemoteTXID":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.SyncStatus/RemoteTXID","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[738,1],"end":[738,21],"bytes":[25341,25361]}}}},"diagOp":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagOp","kind":"struct","span":{"start":[232,1],"end":[232,19],"bytes":[8494,8512]},"callables":{}},"diagPhase":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagPhase","kind":"struct","span":{"start":[239,1],"end":[239,22],"bytes":[8599,8620]},"callables":{}},"diagState":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState","kind":"struct","span":{"start":[268,1],"end":[284,2],"bytes":[10348,10784]},"base_types":["sync.RWMutex"],"callables":{},"fields":{"active":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/active","kind":"field","type":"bool","span":{"start":[270,1],"end":[270,26],"bytes":[10386,10411]}},"checkpointMode":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/checkpointMode","kind":"field","type":"string","span":{"start":[279,1],"end":[279,28],"bytes":[10643,10670]}},"err":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/err","kind":"field","type":"string","span":{"start":[281,1],"end":[281,28],"bytes":[10699,10726]}},"executorWaitStarted":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/executorWaitStarted","kind":"field","type":"time.Time","span":{"start":[283,1],"end":[283,31],"bytes":[10752,10782]}},"executorWaiterCount":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/executorWaiterCount","kind":"field","type":"int","span":{"start":[282,1],"end":[282,25],"bytes":[10727,10751]}},"lastSyncedWALOffset":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/lastSyncedWALOffset","kind":"field","type":"int64","span":{"start":[277,1],"end":[277,27],"bytes":[10590,10616]}},"operation":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/operation","kind":"field","type":"github.com/benbjohnson/litestream.diagOp","span":{"start":[271,1],"end":[271,28],"bytes":[10412,10439]}},"phase":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/phase","kind":"field","type":"github.com/benbjohnson/litestream.diagPhase","span":{"start":[272,1],"end":[272,31],"bytes":[10440,10470]}},"reason":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/reason","kind":"field","type":"string","span":{"start":[280,1],"end":[280,28],"bytes":[10671,10698]}},"snapshotting":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/snapshotting","kind":"field","type":"bool","span":{"start":[278,1],"end":[278,26],"bytes":[10617,10642]}},"startedAt":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/startedAt","kind":"field","type":"time.Time","span":{"start":[273,1],"end":[273,31],"bytes":[10471,10501]}},"sync.RWMutex":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/sync.RWMutex","kind":"field","type":"sync.RWMutex","span":{"start":[269,1],"end":[269,14],"bytes":[10372,10385]}},"txID":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/txID","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[275,1],"end":[275,30],"bytes":[10533,10562]}},"updatedAt":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/updatedAt","kind":"field","type":"time.Time","span":{"start":[274,1],"end":[274,31],"bytes":[10502,10532]}},"walSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.diagState/walSize","kind":"field","type":"int64","span":{"start":[276,1],"end":[276,27],"bytes":[10563,10589]}}}},"ltxStagingFile":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile","kind":"interface","span":{"start":[1611,1],"end":[1615,2],"bytes":[52405,52478]},"base_types":["io.Writer"],"callables":{"github.com/benbjohnson/litestream.ltxStagingFile.Close":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile/github.com/benbjohnson/litestream.ltxStagingFile.Close","kind":"method","span":{"start":[1614,1],"end":[1614,15],"bytes":[52462,52476]},"signature":"github.com/benbjohnson/litestream.ltxStagingFile.Close","parameters":[],"return_type":"error","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ltxStagingFile.Sync":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile/github.com/benbjohnson/litestream.ltxStagingFile.Sync","kind":"method","span":{"start":[1613,1],"end":[1613,14],"bytes":[52448,52461]},"signature":"github.com/benbjohnson/litestream.ltxStagingFile.Sync","parameters":[],"return_type":"error","error_channel":["error"],"body":{}}}},"snapshotReadCloser":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadCloser","kind":"struct","span":{"start":[2768,1],"end":[2771,2],"bytes":[88955,89032]},"base_types":["*io.PipeReader"],"callables":{"github.com/benbjohnson/litestream.snapshotReadCloser.Close":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadCloser/github.com/benbjohnson/litestream.snapshotReadCloser.Close","kind":"method","span":{"start":[2773,1],"end":[2776,2],"bytes":[89034,89130]},"signature":"github.com/benbjohnson/litestream.snapshotReadCloser.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"2774:8":{"kind":"call","span":{"start":[2774,8],"end":[2774,21],"bytes":[89086,89099]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/github.com/benbjohnson/litestream.snapshotReadPosition.close"},"2775:9":{"kind":"call","span":{"start":[2775,9],"end":[2775,29],"bytes":[89108,89128]},"callee":null}}}},"fields":{"*io.PipeReader":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadCloser/*io.PipeReader","kind":"field","type":"*io.PipeReader","span":{"start":[2769,1],"end":[2769,16],"bytes":[88988,89003]}},"pos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadCloser/pos","kind":"field","type":"*github.com/benbjohnson/litestream.snapshotReadPosition","span":{"start":[2770,1],"end":[2770,27],"bytes":[89004,89030]}}}},"snapshotReadPosition":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition","kind":"struct","span":{"start":[2756,1],"end":[2762,2],"bytes":[88722,88860]},"callables":{"github.com/benbjohnson/litestream.snapshotReadPosition.close":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/github.com/benbjohnson/litestream.snapshotReadPosition.close","kind":"method","span":{"start":[2764,1],"end":[2766,2],"bytes":[88862,88953]},"signature":"github.com/benbjohnson/litestream.snapshotReadPosition.close","parameters":[],"metrics":{"cyclomatic":1},"body":{"2765:2":{"kind":"call","span":{"start":[2765,2],"end":[2765,49],"bytes":[88904,88951]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/github.com/benbjohnson/litestream.snapshotReadPosition.close/github.com/benbjohnson/litestream.snapshotReadPosition.close.closure_1","kind":"function","span":{"start":[2765,1],"end":[2765,49],"bytes":[88903,88951]},"signature":"github.com/benbjohnson/litestream.snapshotReadPosition.close.closure_1","parameters":[],"body":{"2765:26":{"kind":"call","span":{"start":[2765,26],"end":[2765,46],"bytes":[88928,88948]},"callee":null}}}}}},"fields":{"closeOnce":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/closeOnce","kind":"field","type":"sync.Once","span":{"start":[2761,1],"end":[2761,24],"bytes":[88835,88858]}},"db":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/db","kind":"field","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[2760,1],"end":[2760,18],"bytes":[88817,88834]}},"pageSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/pageSize","kind":"field","type":"int","span":{"start":[2758,1],"end":[2758,18],"bytes":[88779,88796]}},"pos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/pos","kind":"field","type":"github.com/superfly/ltx.Pos","span":{"start":[2757,1],"end":[2757,22],"bytes":[88757,88778]}},"walEndOffset":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/walEndOffset","kind":"field","type":"int64","span":{"start":[2759,1],"end":[2759,20],"bytes":[88797,88816]}}}},"syncExecutor":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor","kind":"struct","span":{"start":[223,1],"end":[230,2],"bytes":[8291,8492]},"callables":{"github.com/benbjohnson/litestream.syncExecutor.applySyncResult":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult","kind":"method","span":{"start":[2056,1],"end":[2068,2],"bytes":[66198,66575]},"signature":"github.com/benbjohnson/litestream.syncExecutor.applySyncResult","parameters":[{"name":"result","type":"github.com/benbjohnson/litestream.syncResult","span":{"start":[2056,1],"end":[2056,63],"bytes":[66198,66260]}}],"metrics":{"cyclomatic":3},"body":{}}},"fields":{"checkpointAttempted":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/checkpointAttempted","kind":"field","type":"bool","span":{"start":[229,1],"end":[229,26],"bytes":[8465,8490]}},"l0FileInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/l0FileInfo","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[227,1],"end":[227,35],"bytes":[8404,8438]}},"pos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/pos","kind":"field","type":"github.com/superfly/ltx.Pos","span":{"start":[225,1],"end":[225,29],"bytes":[8349,8377]}},"posChanged":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/posChanged","kind":"field","type":"bool","span":{"start":[226,1],"end":[226,26],"bytes":[8378,8403]}},"state":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/state","kind":"field","type":"github.com/benbjohnson/litestream.syncState","span":{"start":[224,1],"end":[224,31],"bytes":[8318,8348]}},"synced":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/synced","kind":"field","type":"bool","span":{"start":[228,1],"end":[228,26],"bytes":[8439,8464]}}}},"syncInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo","kind":"struct","span":{"start":[1969,1],"end":[1977,2],"bytes":[64228,64540]},"callables":{},"fields":{"clearSyncedToWALEnd":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/clearSyncedToWALEnd","kind":"field","type":"bool","span":{"start":[1976,1],"end":[1976,26],"bytes":[64513,64538]}},"offset":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/offset","kind":"field","type":"int64","span":{"start":[1970,1],"end":[1970,59],"bytes":[64251,64309]}},"prevCommit":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/prevCommit","kind":"field","type":"uint32","span":{"start":[1973,1],"end":[1973,28],"bytes":[64366,64393]}},"reason":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/reason","kind":"field","type":"string","span":{"start":[1975,1],"end":[1975,51],"bytes":[64462,64512]}},"salt1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/salt1","kind":"field","type":"uint32","span":{"start":[1971,1],"end":[1971,28],"bytes":[64310,64337]}},"salt2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/salt2","kind":"field","type":"uint32","span":{"start":[1972,1],"end":[1972,28],"bytes":[64338,64365]}},"snapshotting":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncInfo/snapshotting","kind":"field","type":"bool","span":{"start":[1974,1],"end":[1974,68],"bytes":[64394,64461]}}}},"syncResult":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult","kind":"struct","span":{"start":[1979,1],"end":[1987,2],"bytes":[64542,64730]},"callables":{},"fields":{"l0FileInfo":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/l0FileInfo","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1986,1],"end":[1986,30],"bytes":[64699,64728]}},"limited":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/limited","kind":"field","type":"bool","span":{"start":[1983,1],"end":[1983,21],"bytes":[64632,64652]}},"newWALSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/newWALSize","kind":"field","type":"int64","span":{"start":[1981,1],"end":[1981,22],"bytes":[64589,64610]}},"origWALSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/origWALSize","kind":"field","type":"int64","span":{"start":[1980,1],"end":[1980,22],"bytes":[64567,64588]}},"pos":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/pos","kind":"field","type":"*github.com/superfly/ltx.Pos","span":{"start":[1985,1],"end":[1985,25],"bytes":[64674,64698]}},"synced":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/synced","kind":"field","type":"bool","span":{"start":[1982,1],"end":[1982,21],"bytes":[64611,64631]}},"syncedToWALEnd":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncResult/syncedToWALEnd","kind":"field","type":"bool","span":{"start":[1984,1],"end":[1984,21],"bytes":[64653,64673]}}}},"syncState":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncState","kind":"struct","span":{"start":[197,1],"end":[221,2],"bytes":[7068,8289]},"callables":{},"fields":{"lastSyncedWALOffset":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncState/lastSyncedWALOffset","kind":"field","type":"int64","span":{"start":[220,1],"end":[220,27],"bytes":[8261,8287]}},"syncedSinceCheckpoint":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncState/syncedSinceCheckpoint","kind":"field","type":"bool","span":{"start":[204,1],"end":[204,28],"bytes":[7392,7419]}},"syncedToWALEnd":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncState/syncedToWALEnd","kind":"field","type":"bool","span":{"start":[212,1],"end":[212,21],"bytes":[7813,7833]}},"truncatePassiveFailed":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncState/truncatePassiveFailed","kind":"field","type":"bool","span":{"start":[198,1],"end":[198,28],"bytes":[7092,7119]}}}}},"functions":{"github.com/benbjohnson/litestream.NewDB":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","kind":"function","span":{"start":[308,1],"end":[352,2],"bytes":[12001,13590]},"signature":"github.com/benbjohnson/litestream.NewDB","parameters":[{"name":"path","type":"string","span":{"start":[308,1],"end":[308,30],"bytes":[12001,12030]}}],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":1},"body":{"309:15":{"kind":"call","span":{"start":[309,15],"end":[309,35],"bytes":[12045,12065]},"callee":null},"313:13":{"kind":"call","span":{"start":[313,13],"end":[313,55],"bytes":[12109,12151]},"callee":null},"314:13":{"kind":"call","span":{"start":[314,13],"end":[314,37],"bytes":[12165,12189]},"callee":null},"315:13":{"kind":"call","span":{"start":[315,13],"end":[315,32],"bytes":[12203,12222]},"callee":null},"327:25":{"kind":"call","span":{"start":[327,25],"end":[327,65],"bytes":[12716,12756]},"callee":null},"327:45":{"kind":"call","span":{"start":[327,45],"end":[327,64],"bytes":[12736,12755]},"callee":null},"329:25":{"kind":"call","span":{"start":[329,25],"end":[329,52],"bytes":[12785,12812]},"callee":null},"332:22":{"kind":"call","span":{"start":[332,22],"end":[332,62],"bytes":[12872,12912]},"callee":null},"332:41":{"kind":"call","span":{"start":[332,41],"end":[332,61],"bytes":[12891,12911]},"callee":null},"335:17":{"kind":"call","span":{"start":[335,17],"end":[335,90],"bytes":[13013,13086]},"callee":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.NewCompactor"},"335:35":{"kind":"call","span":{"start":[335,35],"end":[335,89],"bytes":[13031,13085]},"callee":null},"338:2":{"kind":"call","span":{"start":[338,2],"end":[338,18],"bytes":[13195,13211]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.initMetrics"}},"callables":{"closure_1":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB/github.com/benbjohnson/litestream.NewDB.closure_1","kind":"function","span":{"start":[339,1],"end":[344,3],"bytes":[13212,13406]},"signature":"github.com/benbjohnson/litestream.NewDB.closure_1","parameters":[{"name":"level","type":"int","span":{"start":[339,1],"end":[339,68],"bytes":[13212,13279]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, bool)","body":{"340:3":{"kind":"call","span":{"start":[340,3],"end":[340,28],"bytes":[13282,13307]},"callee":null},"341:9":{"kind":"call","span":{"start":[341,9],"end":[341,36],"bytes":[13316,13343]},"callee":null}}},"closure_2":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB/github.com/benbjohnson/litestream.NewDB.closure_2","kind":"function","span":{"start":[345,1],"end":[349,3],"bytes":[13407,13576]},"signature":"github.com/benbjohnson/litestream.NewDB.closure_2","parameters":[{"name":"level","type":"int","span":{"start":[345,1],"end":[345,66],"bytes":[13407,13472]}},{"name":"info","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[345,1],"end":[345,66],"bytes":[13407,13472]}}],"body":{"346:3":{"kind":"call","span":{"start":[346,3],"end":[346,28],"bytes":[13475,13500]},"callee":null},"347:9":{"kind":"call","span":{"start":[347,9],"end":[347,36],"bytes":[13509,13536]},"callee":null}}}}},"github.com/benbjohnson/litestream.NewRestoreOptions":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions","kind":"function","span":{"start":[3414,1],"end":[3419,2],"bytes":[109342,109498]},"signature":"github.com/benbjohnson/litestream.NewRestoreOptions","parameters":[],"return_type":"github.com/benbjohnson/litestream.RestoreOptions","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.addDurationToCounter":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.addDurationToCounter","kind":"function","span":{"start":[1325,1],"end":[1329,2],"bytes":[42224,42340]},"signature":"github.com/benbjohnson/litestream.addDurationToCounter","parameters":[{"name":"counter","type":"github.com/prometheus/client_golang/prometheus.Counter","span":{"start":[1325,1],"end":[1325,73],"bytes":[42224,42296]}},{"name":"d","type":"time.Duration","span":{"start":[1325,1],"end":[1325,73],"bytes":[42224,42296]}}],"metrics":{"cyclomatic":2},"body":{"1327:15":{"kind":"call","span":{"start":[1327,15],"end":[1327,26],"bytes":[42323,42334]},"callee":null},"1327:3":{"kind":"call","span":{"start":[1327,3],"end":[1327,27],"bytes":[42311,42335]},"callee":null}}},"github.com/benbjohnson/litestream.calcWALSize":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize","kind":"function","span":{"start":[1634,1],"end":[1636,2],"bytes":[53023,53163]},"signature":"github.com/benbjohnson/litestream.calcWALSize","parameters":[{"name":"pageSize","type":"uint32","span":{"start":[1634,1],"end":[1634,56],"bytes":[53023,53078]}},{"name":"pageN","type":"uint32","span":{"start":[1634,1],"end":[1634,56],"bytes":[53023,53078]}}],"return_type":"int64","metrics":{"cyclomatic":1},"body":{"1635:33":{"kind":"call","span":{"start":[1635,33],"end":[1635,67],"bytes":[53111,53145]},"callee":null},"1635:70":{"kind":"call","span":{"start":[1635,70],"end":[1635,82],"bytes":[53148,53160]},"callee":null},"1635:9":{"kind":"call","span":{"start":[1635,9],"end":[1635,29],"bytes":[53087,53107]},"callee":null}}},"github.com/benbjohnson/litestream.defaultOpenLTXFile":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.defaultOpenLTXFile","kind":"function","span":{"start":[1617,1],"end":[1619,2],"bytes":[52480,52610]},"signature":"github.com/benbjohnson/litestream.defaultOpenLTXFile","parameters":[{"name":"name","type":"string","span":{"start":[1617,1],"end":[1617,91],"bytes":[52480,52570]}},{"name":"flag","type":"int","span":{"start":[1617,1],"end":[1617,91],"bytes":[52480,52570]}},{"name":"perm","type":"os.FileMode","span":{"start":[1617,1],"end":[1617,91],"bytes":[52480,52570]}}],"return_type":"(github.com/benbjohnson/litestream.ltxStagingFile, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"1618:9":{"kind":"call","span":{"start":[1618,9],"end":[1618,38],"bytes":[52579,52608]},"callee":null}}},"github.com/benbjohnson/litestream.isDiskFullError":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError","kind":"function","span":{"start":[1595,1],"end":[1609,2],"bytes":[51890,52403]},"signature":"github.com/benbjohnson/litestream.isDiskFullError","parameters":[{"name":"err","type":"error","span":{"start":[1595,1],"end":[1595,39],"bytes":[51890,51928]}}],"return_type":"bool","metrics":{"cyclomatic":3},"body":{"1599:36":{"kind":"call","span":{"start":[1599,36],"end":[1599,66],"bytes":[51999,52029]},"callee":null},"1599:5":{"kind":"call","span":{"start":[1599,5],"end":[1599,32],"bytes":[51968,51995]},"callee":null},"1602:12":{"kind":"call","span":{"start":[1602,12],"end":[1602,40],"bytes":[52060,52088]},"callee":null},"1602:28":{"kind":"call","span":{"start":[1602,28],"end":[1602,39],"bytes":[52076,52087]},"callee":null},"1603:9":{"kind":"call","span":{"start":[1603,9],"end":[1603,60],"bytes":[52097,52148]},"callee":null},"1604:3":{"kind":"call","span":{"start":[1604,3],"end":[1604,50],"bytes":[52154,52201]},"callee":null},"1605:3":{"kind":"call","span":{"start":[1605,3],"end":[1605,59],"bytes":[52207,52263]},"callee":null},"1606:3":{"kind":"call","span":{"start":[1606,3],"end":[1606,55],"bytes":[52269,52321]},"callee":null},"1607:3":{"kind":"call","span":{"start":[1607,3],"end":[1607,37],"bytes":[52327,52361]},"callee":null},"1608:3":{"kind":"call","span":{"start":[1608,3],"end":[1608,37],"bytes":[52367,52401]},"callee":null}}},"github.com/benbjohnson/litestream.isSQLiteBusyError":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isSQLiteBusyError","kind":"function","span":{"start":[1583,1],"end":[1591,2],"bytes":[51457,51726]},"signature":"github.com/benbjohnson/litestream.isSQLiteBusyError","parameters":[{"name":"err","type":"error","span":{"start":[1583,1],"end":[1583,41],"bytes":[51457,51497]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"1588:12":{"kind":"call","span":{"start":[1588,12],"end":[1588,23],"bytes":[51613,51624]},"callee":null},"1589:9":{"kind":"call","span":{"start":[1589,9],"end":[1589,55],"bytes":[51633,51679]},"callee":null},"1590:3":{"kind":"call","span":{"start":[1590,3],"end":[1590,42],"bytes":[51685,51724]},"callee":null}}},"github.com/benbjohnson/litestream.snapshotHeaderWALRange":{"id":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotHeaderWALRange","kind":"function","span":{"start":[2973,1],"end":[2979,2],"bytes":[95070,95315]},"signature":"github.com/benbjohnson/litestream.snapshotHeaderWALRange","parameters":[{"name":"maxOffset","type":"int64","span":{"start":[2973,1],"end":[2973,79],"bytes":[95070,95148]}},{"name":"frameSize","type":"int64","span":{"start":[2973,1],"end":[2973,79],"bytes":[95070,95148]}}],"return_type":"(int64, int64)","metrics":{"cyclomatic":2},"body":{"2977:11":{"kind":"call","span":{"start":[2977,11],"end":[2977,50],"bytes":[95239,95278]},"callee":null}}}},"content_hash":"95d34cde5d76f1f6f683c38ec01b4dcf5e5167059935a0816889d1c72c7944fd"},"file/replica_client.go":{"id":"can://go/litestream/file/replica_client.go","kind":"module","span":{"start":[1,1],"end":[379,1],"bytes":[0,10820]},"package":"file","source":"package file\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"time\"\n\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"file\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"file\"\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\nvar _ litestream.ReplicaClientV3 = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files to disk.\ntype ReplicaClient struct {\n\tpath string // destination path\n\n\tReplica *litestream.Replica\n\tlogger *slog.Logger\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient(path string) *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t\tpath: path,\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\t// For file URLs, the path is the full path\n\tif urlPath == \"\" {\n\t\treturn nil, fmt.Errorf(\"file replica path required\")\n\t}\n\treturn NewReplicaClient(urlPath), nil\n}\n\n// db returns the database, if available.\nfunc (c *ReplicaClient) db() *litestream.DB {\n\tif c.Replica == nil {\n\t\treturn nil\n\t}\n\treturn c.Replica.DB()\n}\n\n// Type returns \"file\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init is a no-op for file replica client as no initialization is required.\nfunc (c *ReplicaClient) Init(ctx context.Context) error {\n\treturn nil\n}\n\n// Path returns the destination path to replicate the database to.\nfunc (c *ReplicaClient) Path() string {\n\treturn c.path\n}\n\n// LTXLevelDir returns the path to a given level.\nfunc (c *ReplicaClient) LTXLevelDir(level int) string {\n\treturn filepath.FromSlash(litestream.LTXLevelDir(c.path, level))\n}\n\n// LTXFilePath returns the path to an LTX file.\nfunc (c *ReplicaClient) LTXFilePath(level int, minTXID, maxTXID ltx.TXID) string {\n\treturn filepath.FromSlash(litestream.LTXFilePath(c.path, level, minTXID, maxTXID))\n}\n\n// LTXFiles returns an iterator over all LTX files on the replica for the given level.\n// The useMetadata parameter is ignored for file backend as ModTime is always available from readdir.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\tf, err := os.Open(c.LTXLevelDir(level))\n\tif os.IsNotExist(err) {\n\t\treturn ltx.NewFileInfoSliceIterator(nil), nil\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tfis, err := f.Readdir(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Iterate over every file and convert to metadata.\n\t// ModTime contains the accurate timestamp set by Chtimes in WriteLTXFile.\n\tinfos := make([]*ltx.FileInfo, 0, len(fis))\n\tfor _, fi := range fis {\n\t\tminTXID, maxTXID, err := ltx.ParseFilename(fi.Name())\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t} else if minTXID \u003c seek {\n\t\t\tcontinue\n\t\t}\n\n\t\tinfos = append(infos, \u0026ltx.FileInfo{\n\t\t\tLevel: level,\n\t\t\tMinTXID: minTXID,\n\t\t\tMaxTXID: maxTXID,\n\t\t\tSize: fi.Size(),\n\t\t\tCreatedAt: fi.ModTime().UTC(),\n\t\t})\n\t}\n\n\treturn ltx.NewFileInfoSliceIterator(infos), nil\n}\n\n// OpenLTXFile returns a reader for an LTX file at the given position.\n// Returns os.ErrNotExist if no matching index/offset is found.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\tpath := c.LTXFilePath(level, minTXID, maxTXID)\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, litestream.NewLTXError(\"open\", path, level, uint64(minTXID), uint64(maxTXID), err)\n\t}\n\n\tif offset \u003e 0 {\n\t\tif _, err := f.Seek(offset, io.SeekStart); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif size \u003e 0 {\n\t\treturn internal.LimitReadCloser(f, size), nil\n\t}\n\n\treturn f, nil\n}\n\n// WriteLTXFile writes an LTX file to the replica.\n// Extracts timestamp from LTX header and sets it as the file's ModTime to preserve original creation time.\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, rd io.Reader) (info *ltx.FileInfo, err error) {\n\tvar fileInfo, dirInfo os.FileInfo\n\tif db := c.db(); db != nil {\n\t\tfileInfo, dirInfo = db.FileInfo(), db.DirInfo()\n\t}\n\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(rd, \u0026buf)\n\n\t// Extract timestamp from LTX header\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Combine buffered data with rest of reader\n\tfullReader := io.MultiReader(\u0026buf, rd)\n\n\t// Ensure parent directory exists.\n\tfilename := c.LTXFilePath(level, minTXID, maxTXID)\n\tif err := internal.MkdirAll(filepath.Dir(filename), dirInfo); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Write LTX file to temporary file next to destination path.\n\ttmpFilename := filename + \".tmp\"\n\tf, err := internal.CreateFile(tmpFilename, fileInfo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Clean up temp file on error. On successful rename, the temp file\n\t// becomes the final file and should not be removed.\n\tdefer func() {\n\t\t_ = f.Close()\n\t\tif err != nil {\n\t\t\t_ = os.Remove(tmpFilename)\n\t\t}\n\t}()\n\n\tif _, err := io.Copy(f, fullReader); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := f.Sync(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Build metadata.\n\tfi, err := f.Stat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tinfo = \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: fi.Size(),\n\t\tCreatedAt: timestamp,\n\t}\n\n\tif err := f.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Move LTX file to final path when it has been written \u0026 synced to disk.\n\tif err := os.Rename(tmpFilename, filename); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := internal.FsyncDir(filepath.Dir(filename)); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Set file ModTime to preserve original timestamp\n\tif err := os.Chtimes(filename, timestamp, timestamp); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn info, nil\n}\n\n// DeleteLTXFiles deletes LTX files.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tfor _, info := range a {\n\t\tfilename := c.LTXFilePath(info.Level, info.MinTXID, info.MaxTXID)\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"path\", filename)\n\n\t\tif err := os.Remove(filename); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// DeleteAll deletes all LTX files.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tif err := os.RemoveAll(c.path); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// GenerationsV3 returns a list of v0.3.x generation IDs in the replica.\nfunc (c *ReplicaClient) GenerationsV3(ctx context.Context) ([]string, error) {\n\tgenPath := filepath.Join(c.path, litestream.GenerationsDirV3)\n\tentries, err := os.ReadDir(genPath)\n\tif os.IsNotExist(err) {\n\t\treturn nil, nil\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar generations []string\n\tfor _, entry := range entries {\n\t\tif entry.IsDir() \u0026\u0026 litestream.IsGenerationIDV3(entry.Name()) {\n\t\t\tgenerations = append(generations, entry.Name())\n\t\t}\n\t}\n\tslices.Sort(generations)\n\treturn generations, nil\n}\n\n// SnapshotsV3 returns snapshots for a generation, sorted by index.\nfunc (c *ReplicaClient) SnapshotsV3(ctx context.Context, generation string) ([]litestream.SnapshotInfoV3, error) {\n\tsnapshotsPath := filepath.Join(c.path, litestream.GenerationsDirV3, generation, litestream.SnapshotsDirV3)\n\tentries, err := os.ReadDir(snapshotsPath)\n\tif os.IsNotExist(err) {\n\t\treturn nil, nil\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar snapshots []litestream.SnapshotInfoV3\n\tfor _, entry := range entries {\n\t\tif entry.IsDir() {\n\t\t\tcontinue\n\t\t}\n\t\tindex, err := litestream.ParseSnapshotFilenameV3(entry.Name())\n\t\tif err != nil {\n\t\t\tcontinue // skip invalid filenames\n\t\t}\n\t\tinfo, err := entry.Info()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsnapshots = append(snapshots, litestream.SnapshotInfoV3{\n\t\t\tGeneration: generation,\n\t\t\tIndex: index,\n\t\t\tSize: info.Size(),\n\t\t\tCreatedAt: info.ModTime(),\n\t\t})\n\t}\n\tslices.SortFunc(snapshots, func(a, b litestream.SnapshotInfoV3) int {\n\t\treturn a.Index - b.Index\n\t})\n\treturn snapshots, nil\n}\n\n// WALSegmentsV3 returns WAL segments for a generation, sorted by index then offset.\nfunc (c *ReplicaClient) WALSegmentsV3(ctx context.Context, generation string) ([]litestream.WALSegmentInfoV3, error) {\n\twalPath := filepath.Join(c.path, litestream.GenerationsDirV3, generation, litestream.WALDirV3)\n\tentries, err := os.ReadDir(walPath)\n\tif os.IsNotExist(err) {\n\t\treturn nil, nil\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar segments []litestream.WALSegmentInfoV3\n\tfor _, entry := range entries {\n\t\tif entry.IsDir() {\n\t\t\tcontinue\n\t\t}\n\t\tindex, offset, err := litestream.ParseWALSegmentFilenameV3(entry.Name())\n\t\tif err != nil {\n\t\t\tcontinue // skip invalid filenames\n\t\t}\n\t\tinfo, err := entry.Info()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsegments = append(segments, litestream.WALSegmentInfoV3{\n\t\t\tGeneration: generation,\n\t\t\tIndex: index,\n\t\t\tOffset: offset,\n\t\t\tSize: info.Size(),\n\t\t\tCreatedAt: info.ModTime(),\n\t\t})\n\t}\n\tslices.SortFunc(segments, func(a, b litestream.WALSegmentInfoV3) int {\n\t\tif a.Index != b.Index {\n\t\t\treturn a.Index - b.Index\n\t\t}\n\t\treturn cmp.Compare(a.Offset, b.Offset)\n\t})\n\treturn segments, nil\n}\n\n// OpenSnapshotV3 opens a v0.3.x snapshot file for reading.\n// The returned reader provides LZ4-decompressed data.\nfunc (c *ReplicaClient) OpenSnapshotV3(ctx context.Context, generation string, index int) (io.ReadCloser, error) {\n\tpath := filepath.Join(c.path, litestream.GenerationsDirV3, generation, litestream.SnapshotsDirV3, litestream.FormatSnapshotFilenameV3(index))\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn internal.NewLZ4Reader(f), nil\n}\n\n// OpenWALSegmentV3 opens a v0.3.x WAL segment file for reading.\n// The returned reader provides LZ4-decompressed data.\nfunc (c *ReplicaClient) OpenWALSegmentV3(ctx context.Context, generation string, index int, offset int64) (io.ReadCloser, error) {\n\tpath := filepath.Join(c.path, litestream.GenerationsDirV3, generation, litestream.WALDirV3, litestream.FormatWALSegmentFilenameV3(index, offset))\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn internal.NewLZ4Reader(f), nil\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"cmp","path":"cmp","span":{"start":[5,1],"end":[5,7],"bytes":[32,38]}},{"name":"context","path":"context","span":{"start":[6,1],"end":[6,11],"bytes":[39,49]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[50,56]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[57,62]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[63,74]}},{"name":"url","path":"net/url","span":{"start":[10,1],"end":[10,11],"bytes":[75,85]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[86,91]}},{"name":"filepath","path":"path/filepath","span":{"start":[12,1],"end":[12,17],"bytes":[92,108]}},{"name":"slices","path":"slices","span":{"start":[13,1],"end":[13,10],"bytes":[109,118]}},{"name":"time","path":"time","span":{"start":[14,1],"end":[14,8],"bytes":[119,126]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[16,1],"end":[16,27],"bytes":[128,154]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[18,1],"end":[18,37],"bytes":[156,192]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[19,1],"end":[19,46],"bytes":[193,238]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient","kind":"struct","span":{"start":[33,1],"end":[38,2],"bytes":[598,712]},"callables":{"github.com/benbjohnson/litestream/file.ReplicaClient.DeleteAll":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.DeleteAll","kind":"method","span":{"start":[255,1],"end":[260,2],"bytes":[6926,7087]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[255,1],"end":[255,63],"bytes":[6926,6988]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"256:12":{"kind":"call","span":{"start":[256,12],"end":[256,32],"bytes":[7000,7020]},"callee":null},"256:49":{"kind":"call","span":{"start":[256,49],"end":[256,67],"bytes":[7037,7055]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[241,1],"end":[252,2],"bytes":[6475,6888]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[241,1],"end":[241,87],"bytes":[6475,6561]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[241,1],"end":[241,87],"bytes":[6475,6561]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"243:15":{"kind":"call","span":{"start":[243,15],"end":[243,68],"bytes":[6602,6655]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath"},"245:3":{"kind":"call","span":{"start":[245,3],"end":[245,127],"bytes":[6659,6783]},"callee":null},"247:13":{"kind":"call","span":{"start":[247,13],"end":[247,32],"bytes":[6797,6816]},"callee":null},"247:49":{"kind":"call","span":{"start":[247,49],"end":[247,67],"bytes":[6833,6851]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.GenerationsV3":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.GenerationsV3","kind":"method","span":{"start":[263,1],"end":[280,2],"bytes":[7162,7665]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.GenerationsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[263,1],"end":[263,79],"bytes":[7162,7240]}}],"return_type":"([]string, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"264:13":{"kind":"call","span":{"start":[264,13],"end":[264,63],"bytes":[7253,7303]},"callee":null},"265:18":{"kind":"call","span":{"start":[265,18],"end":[265,37],"bytes":[7321,7340]},"callee":null},"266:5":{"kind":"call","span":{"start":[266,5],"end":[266,23],"bytes":[7345,7363]},"callee":null},"274:23":{"kind":"call","span":{"start":[274,23],"end":[274,64],"bytes":[7511,7552]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.IsGenerationIDV3"},"274:51":{"kind":"call","span":{"start":[274,51],"end":[274,63],"bytes":[7539,7551]},"callee":null},"274:6":{"kind":"call","span":{"start":[274,6],"end":[274,19],"bytes":[7494,7507]},"callee":null},"275:18":{"kind":"call","span":{"start":[275,18],"end":[275,51],"bytes":[7572,7605]},"callee":null},"275:38":{"kind":"call","span":{"start":[275,38],"end":[275,50],"bytes":[7592,7604]},"callee":null},"278:2":{"kind":"call","span":{"start":[278,2],"end":[278,26],"bytes":[7614,7638]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.Init":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.Init","kind":"method","span":{"start":[76,1],"end":[78,2],"bytes":[1816,1887]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[76,1],"end":[76,58],"bytes":[1816,1873]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath","kind":"method","span":{"start":[91,1],"end":[93,2],"bytes":[2237,2405]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath","parameters":[{"name":"level","type":"int","span":{"start":[91,1],"end":[91,83],"bytes":[2237,2319]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[91,1],"end":[91,83],"bytes":[2237,2319]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[91,1],"end":[91,83],"bytes":[2237,2319]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"92:28":{"kind":"call","span":{"start":[92,28],"end":[92,83],"bytes":[2347,2402]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"92:9":{"kind":"call","span":{"start":[92,9],"end":[92,84],"bytes":[2328,2403]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.LTXFiles":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFiles","kind":"method","span":{"start":[97,1],"end":[132,2],"bytes":[2596,3521]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[97,1],"end":[97,126],"bytes":[2596,2721]}},{"name":"level","type":"int","span":{"start":[97,1],"end":[97,126],"bytes":[2596,2721]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[97,1],"end":[97,126],"bytes":[2596,2721]}},{"name":"useMetadata","type":"bool","span":{"start":[97,1],"end":[97,126],"bytes":[2596,2721]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"100:10":{"kind":"call","span":{"start":[100,10],"end":[100,43],"bytes":[2797,2830]},"callee":null},"104:8":{"kind":"call","span":{"start":[104,8],"end":[104,17],"bytes":[2888,2897]},"callee":null},"106:14":{"kind":"call","span":{"start":[106,14],"end":[106,27],"bytes":[2912,2925]},"callee":null},"113:11":{"kind":"call","span":{"start":[113,11],"end":[113,45],"bytes":[3104,3138]},"callee":null},"113:36":{"kind":"call","span":{"start":[113,36],"end":[113,44],"bytes":[3129,3137]},"callee":null},"115:28":{"kind":"call","span":{"start":[115,28],"end":[115,56],"bytes":[3192,3220]},"callee":null},"115:46":{"kind":"call","span":{"start":[115,46],"end":[115,55],"bytes":[3210,3219]},"callee":null},"122:11":{"kind":"call","span":{"start":[122,11],"end":[128,5],"bytes":[3307,3466]},"callee":null},"126:15":{"kind":"call","span":{"start":[126,15],"end":[126,24],"bytes":[3417,3426]},"callee":null},"127:15":{"kind":"call","span":{"start":[127,15],"end":[127,27],"bytes":[3442,3454]},"callee":null},"131:9":{"kind":"call","span":{"start":[131,9],"end":[131,44],"bytes":[3479,3514]},"callee":null},"98:12":{"kind":"call","span":{"start":[98,12],"end":[98,41],"bytes":[2733,2762]},"callee":null},"98:20":{"kind":"call","span":{"start":[98,20],"end":[98,40],"bytes":[2741,2761]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXLevelDir"},"99:5":{"kind":"call","span":{"start":[99,5],"end":[99,23],"bytes":[2767,2785]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.LTXLevelDir":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXLevelDir","kind":"method","span":{"start":[86,1],"end":[88,2],"bytes":[2064,2187]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.LTXLevelDir","parameters":[{"name":"level","type":"int","span":{"start":[86,1],"end":[86,56],"bytes":[2064,2119]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"87:28":{"kind":"call","span":{"start":[87,28],"end":[87,65],"bytes":[2147,2184]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"87:9":{"kind":"call","span":{"start":[87,9],"end":[87,66],"bytes":[2128,2185]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[136,1],"end":[154,2],"bytes":[3658,4174]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[136,1],"end":[136,140],"bytes":[3658,3797]}},{"name":"level","type":"int","span":{"start":[136,1],"end":[136,140],"bytes":[3658,3797]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[136,1],"end":[136,140],"bytes":[3658,3797]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[136,1],"end":[136,140],"bytes":[3658,3797]}},{"name":"offset","type":"int64","span":{"start":[136,1],"end":[136,140],"bytes":[3658,3797]}},{"name":"size","type":"int64","span":{"start":[136,1],"end":[136,140],"bytes":[3658,3797]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"137:10":{"kind":"call","span":{"start":[137,10],"end":[137,48],"bytes":[3807,3845]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath"},"138:12":{"kind":"call","span":{"start":[138,12],"end":[138,25],"bytes":[3857,3870]},"callee":null},"140:15":{"kind":"call","span":{"start":[140,15],"end":[140,97],"bytes":[3902,3984]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"140:59":{"kind":"call","span":{"start":[140,59],"end":[140,74],"bytes":[3946,3961]},"callee":null},"140:76":{"kind":"call","span":{"start":[140,76],"end":[140,91],"bytes":[3963,3978]},"callee":null},"144:16":{"kind":"call","span":{"start":[144,16],"end":[144,44],"bytes":[4021,4049]},"callee":null},"150:10":{"kind":"call","span":{"start":[150,10],"end":[150,43],"bytes":[4115,4148]},"callee":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser"}}},"github.com/benbjohnson/litestream/file.ReplicaClient.OpenSnapshotV3":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenSnapshotV3","kind":"method","span":{"start":[360,1],"end":[367,2],"bytes":[9957,10317]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.OpenSnapshotV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[360,1],"end":[360,115],"bytes":[9957,10071]}},{"name":"generation","type":"string","span":{"start":[360,1],"end":[360,115],"bytes":[9957,10071]}},{"name":"index","type":"int","span":{"start":[360,1],"end":[360,115],"bytes":[9957,10071]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"361:10":{"kind":"call","span":{"start":[361,10],"end":[361,143],"bytes":[10081,10214]},"callee":null},"361:100":{"kind":"call","span":{"start":[361,100],"end":[361,142],"bytes":[10171,10213]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatSnapshotFilenameV3"},"362:12":{"kind":"call","span":{"start":[362,12],"end":[362,25],"bytes":[10226,10239]},"callee":null},"366:9":{"kind":"call","span":{"start":[366,9],"end":[366,33],"bytes":[10286,10310]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader"}}},"github.com/benbjohnson/litestream/file.ReplicaClient.OpenWALSegmentV3":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenWALSegmentV3","kind":"method","span":{"start":[371,1],"end":[378,2],"bytes":[10439,10819]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.OpenWALSegmentV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[371,1],"end":[371,131],"bytes":[10439,10569]}},{"name":"generation","type":"string","span":{"start":[371,1],"end":[371,131],"bytes":[10439,10569]}},{"name":"index","type":"int","span":{"start":[371,1],"end":[371,131],"bytes":[10439,10569]}},{"name":"offset","type":"int64","span":{"start":[371,1],"end":[371,131],"bytes":[10439,10569]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"372:10":{"kind":"call","span":{"start":[372,10],"end":[372,147],"bytes":[10579,10716]},"callee":null},"372:94":{"kind":"call","span":{"start":[372,94],"end":[372,146],"bytes":[10663,10715]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3"},"373:12":{"kind":"call","span":{"start":[373,12],"end":[373,25],"bytes":[10728,10741]},"callee":null},"377:9":{"kind":"call","span":{"start":[377,9],"end":[377,33],"bytes":[10788,10812]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader"}}},"github.com/benbjohnson/litestream/file.ReplicaClient.Path":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.Path","kind":"method","span":{"start":[81,1],"end":[83,2],"bytes":[1956,2012]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.Path","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/file.ReplicaClient.SetLogger":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.SetLogger","kind":"method","span":{"start":[48,1],"end":[50,2],"bytes":[928,1034]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[48,1],"end":[48,57],"bytes":[928,984]}}],"metrics":{"cyclomatic":1},"body":{"49:13":{"kind":"call","span":{"start":[49,13],"end":[49,48],"bytes":[997,1032]},"callee":null}}},"github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3","kind":"method","span":{"start":[283,1],"end":[316,2],"bytes":[7735,8698]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[283,1],"end":[283,115],"bytes":[7735,7849]}},{"name":"generation","type":"string","span":{"start":[283,1],"end":[283,115],"bytes":[7735,7849]}}],"return_type":"([]github.com/benbjohnson/litestream.SnapshotInfoV3, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"284:19":{"kind":"call","span":{"start":[284,19],"end":[284,108],"bytes":[7868,7957]},"callee":null},"285:18":{"kind":"call","span":{"start":[285,18],"end":[285,43],"bytes":[7975,8000]},"callee":null},"286:5":{"kind":"call","span":{"start":[286,5],"end":[286,23],"bytes":[8005,8023]},"callee":null},"294:6":{"kind":"call","span":{"start":[294,6],"end":[294,19],"bytes":[8171,8184]},"callee":null},"297:17":{"kind":"call","span":{"start":[297,17],"end":[297,65],"bytes":[8219,8267]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseSnapshotFilenameV3"},"297:52":{"kind":"call","span":{"start":[297,52],"end":[297,64],"bytes":[8254,8266]},"callee":null},"301:16":{"kind":"call","span":{"start":[301,16],"end":[301,28],"bytes":[8343,8355]},"callee":null},"305:15":{"kind":"call","span":{"start":[305,15],"end":[310,5],"bytes":[8411,8568]},"callee":null},"308:16":{"kind":"call","span":{"start":[308,16],"end":[308,27],"bytes":[8520,8531]},"callee":null},"309:16":{"kind":"call","span":{"start":[309,16],"end":[309,30],"bytes":[8548,8562]},"callee":null},"312:2":{"kind":"call","span":{"start":[312,2],"end":[314,4],"bytes":[8573,8673]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3/github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3.closure_1","kind":"function","span":{"start":[312,1],"end":[314,4],"bytes":[8572,8673]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3.closure_1","parameters":[{"name":"a","type":"github.com/benbjohnson/litestream.SnapshotInfoV3","span":{"start":[312,1],"end":[312,71],"bytes":[8572,8642]}},{"name":"b","type":"github.com/benbjohnson/litestream.SnapshotInfoV3","span":{"start":[312,1],"end":[312,71],"bytes":[8572,8642]}}],"return_type":"int","body":{}}}},"github.com/benbjohnson/litestream/file.ReplicaClient.Type":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.Type","kind":"method","span":{"start":[71,1],"end":[73,2],"bytes":[1670,1737]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3","kind":"method","span":{"start":[319,1],"end":[356,2],"bytes":[8785,9840]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[319,1],"end":[319,119],"bytes":[8785,8903]}},{"name":"generation","type":"string","span":{"start":[319,1],"end":[319,119],"bytes":[8785,8903]}}],"return_type":"([]github.com/benbjohnson/litestream.WALSegmentInfoV3, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"320:13":{"kind":"call","span":{"start":[320,13],"end":[320,96],"bytes":[8916,8999]},"callee":null},"321:18":{"kind":"call","span":{"start":[321,18],"end":[321,37],"bytes":[9017,9036]},"callee":null},"322:5":{"kind":"call","span":{"start":[322,5],"end":[322,23],"bytes":[9041,9059]},"callee":null},"330:6":{"kind":"call","span":{"start":[330,6],"end":[330,19],"bytes":[9208,9221]},"callee":null},"333:25":{"kind":"call","span":{"start":[333,25],"end":[333,75],"bytes":[9264,9314]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3"},"333:62":{"kind":"call","span":{"start":[333,62],"end":[333,74],"bytes":[9301,9313]},"callee":null},"337:16":{"kind":"call","span":{"start":[337,16],"end":[337,28],"bytes":[9390,9402]},"callee":null},"341:14":{"kind":"call","span":{"start":[341,14],"end":[347,5],"bytes":[9457,9638]},"callee":null},"345:16":{"kind":"call","span":{"start":[345,16],"end":[345,27],"bytes":[9590,9601]},"callee":null},"346:16":{"kind":"call","span":{"start":[346,16],"end":[346,30],"bytes":[9618,9632]},"callee":null},"349:2":{"kind":"call","span":{"start":[349,2],"end":[354,4],"bytes":[9643,9816]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3/github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3.closure_1","kind":"function","span":{"start":[349,1],"end":[354,4],"bytes":[9642,9816]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3.closure_1","parameters":[{"name":"a","type":"github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[349,1],"end":[349,72],"bytes":[9642,9713]}},{"name":"b","type":"github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[349,1],"end":[349,72],"bytes":[9642,9713]}}],"return_type":"int","body":{"353:10":{"kind":"call","span":{"start":[353,10],"end":[353,41],"bytes":[9781,9812]},"callee":null}}}}},"github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[158,1],"end":[238,2],"bytes":[4335,6436]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[158,1],"end":[158,144],"bytes":[4335,4478]}},{"name":"level","type":"int","span":{"start":[158,1],"end":[158,144],"bytes":[4335,4478]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[158,1],"end":[158,144],"bytes":[4335,4478]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[158,1],"end":[158,144],"bytes":[4335,4478]}},{"name":"rd","type":"io.Reader","span":{"start":[158,1],"end":[158,144],"bytes":[4335,4478]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"160:11":{"kind":"call","span":{"start":[160,11],"end":[160,17],"bytes":[4524,4530]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.db"},"161:23":{"kind":"call","span":{"start":[161,23],"end":[161,36],"bytes":[4566,4579]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.FileInfo"},"161:38":{"kind":"call","span":{"start":[161,38],"end":[161,50],"bytes":[4581,4593]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.DirInfo"},"166:15":{"kind":"call","span":{"start":[166,15],"end":[166,37],"bytes":[4707,4729]},"callee":null},"169:17":{"kind":"call","span":{"start":[169,17],"end":[169,42],"bytes":[4785,4810]},"callee":null},"171:15":{"kind":"call","span":{"start":[171,15],"end":[171,71],"bytes":[4842,4898]},"callee":null},"173:15":{"kind":"call","span":{"start":[173,15],"end":[173,44],"bytes":[4916,4945]},"callee":null},"176:16":{"kind":"call","span":{"start":[176,16],"end":[176,40],"bytes":[5014,5038]},"callee":null},"179:14":{"kind":"call","span":{"start":[179,14],"end":[179,52],"bytes":[5089,5127]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath"},"180:12":{"kind":"call","span":{"start":[180,12],"end":[180,62],"bytes":[5139,5189]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll"},"180:30":{"kind":"call","span":{"start":[180,30],"end":[180,52],"bytes":[5157,5179]},"callee":null},"186:12":{"kind":"call","span":{"start":[186,12],"end":[186,54],"bytes":[5334,5376]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.CreateFile"},"193:8":{"kind":"call","span":{"start":[193,8],"end":[198,5],"bytes":[5546,5627]},"callee":null},"200:15":{"kind":"call","span":{"start":[200,15],"end":[200,37],"bytes":[5643,5665]},"callee":null},"203:12":{"kind":"call","span":{"start":[203,12],"end":[203,20],"bytes":[5712,5720]},"callee":null},"208:13":{"kind":"call","span":{"start":[208,13],"end":[208,21],"bytes":[5789,5797]},"callee":null},"216:14":{"kind":"call","span":{"start":[216,14],"end":[216,23],"bytes":[5936,5945]},"callee":null},"220:12":{"kind":"call","span":{"start":[220,12],"end":[220,21],"bytes":[5986,5995]},"callee":null},"225:12":{"kind":"call","span":{"start":[225,12],"end":[225,44],"bytes":[6118,6150]},"callee":null},"228:12":{"kind":"call","span":{"start":[228,12],"end":[228,53],"bytes":[6197,6238]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir"},"228:30":{"kind":"call","span":{"start":[228,30],"end":[228,52],"bytes":[6215,6237]},"callee":null},"233:12":{"kind":"call","span":{"start":[233,12],"end":[233,54],"bytes":[6338,6380]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile.closure_1","kind":"function","span":{"start":[193,1],"end":[198,5],"bytes":[5539,5627]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile.closure_1","parameters":[],"body":{"194:7":{"kind":"call","span":{"start":[194,7],"end":[194,16],"bytes":[5561,5570]},"callee":null},"196:8":{"kind":"call","span":{"start":[196,8],"end":[196,30],"bytes":[5596,5618]},"callee":null}}}}},"github.com/benbjohnson/litestream/file.ReplicaClient.db":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.db","kind":"method","span":{"start":[63,1],"end":[68,2],"bytes":[1516,1625]},"signature":"github.com/benbjohnson/litestream/file.ReplicaClient.db","parameters":[],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":2},"body":{"67:9":{"kind":"call","span":{"start":[67,9],"end":[67,23],"bytes":[1609,1623]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB"}}}},"fields":{"Replica":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/Replica","kind":"field","type":"*github.com/benbjohnson/litestream.Replica","span":{"start":[36,1],"end":[36,29],"bytes":[660,688]}},"logger":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[37,1],"end":[37,22],"bytes":[689,710]}},"path":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/path","kind":"field","type":"string","span":{"start":[34,1],"end":[34,33],"bytes":[626,658]}}}}},"functions":{"github.com/benbjohnson/litestream/file.NewReplicaClient":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient","kind":"function","span":{"start":[41,1],"end":[46,2],"bytes":[775,926]},"signature":"github.com/benbjohnson/litestream/file.NewReplicaClient","parameters":[{"name":"path","type":"string","span":{"start":[41,1],"end":[41,52],"bytes":[775,826]}}],"return_type":"*github.com/benbjohnson/litestream/file.ReplicaClient","metrics":{"cyclomatic":1},"body":{"43:11":{"kind":"call","span":{"start":[43,11],"end":[43,25],"bytes":[861,875]},"callee":null}}},"github.com/benbjohnson/litestream/file.NewReplicaClientFromURL":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClientFromURL","kind":"function","span":{"start":[54,1],"end":[60,2],"bytes":[1172,1472]},"signature":"github.com/benbjohnson/litestream/file.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[54,1],"end":[54,137],"bytes":[1172,1308]}},{"name":"host","type":"string","span":{"start":[54,1],"end":[54,137],"bytes":[1172,1308]}},{"name":"urlPath","type":"string","span":{"start":[54,1],"end":[54,137],"bytes":[1172,1308]}},{"name":"query","type":"net/url.Values","span":{"start":[54,1],"end":[54,137],"bytes":[1172,1308]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[54,1],"end":[54,137],"bytes":[1172,1308]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"57:15":{"kind":"call","span":{"start":[57,15],"end":[57,55],"bytes":[1388,1428]},"callee":null},"59:9":{"kind":"call","span":{"start":[59,9],"end":[59,34],"bytes":[1440,1465]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient"}}},"github.com/benbjohnson/litestream/file.init":{"id":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.init","kind":"function","span":{"start":[22,1],"end":[24,2],"bytes":[242,331]},"signature":"github.com/benbjohnson/litestream/file.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"23:2":{"kind":"call","span":{"start":[23,2],"end":[23,74],"bytes":[257,329]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}}},"content_hash":"e962698493a721417236820987741a07fae6650a57f81bb5de664b58fc1300df"},"gs/replica_client.go":{"id":"can://go/litestream/gs/replica_client.go","kind":"module","span":{"start":[1,1],"end":[316,1],"bytes":[0,8672]},"package":"gs","source":"package gs\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"sync\"\n\t\"time\"\n\n\t\"cloud.google.com/go/storage\"\n\t\"github.com/superfly/ltx\"\n\t\"google.golang.org/api/iterator\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"gs\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"gs\"\n\n// MetadataKeyTimestamp is the metadata key for storing LTX file timestamps in GCS.\nconst MetadataKeyTimestamp = \"litestream-timestamp\"\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files to Google Cloud Storage.\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\tclient *storage.Client // gs client\n\tbkt *storage.BucketHandle // gs bucket handle\n\tlogger *slog.Logger\n\n\t// GS bucket information\n\tBucket string\n\tPath string\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tif host == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for gs replica URL\")\n\t}\n\n\tclient := NewReplicaClient()\n\tclient.Bucket = host\n\tclient.Path = urlPath\n\treturn client, nil\n}\n\n// Type returns \"gs\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init initializes the connection to GS. No-op if already initialized.\nfunc (c *ReplicaClient) Init(ctx context.Context) (err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.client != nil {\n\t\treturn nil\n\t}\n\n\tif c.client, err = storage.NewClient(ctx); err != nil {\n\t\treturn fmt.Errorf(\"failed to create GCS client (bucket: %s): %w\", c.Bucket, err)\n\t}\n\tc.bkt = c.client.Bucket(c.Bucket)\n\n\treturn nil\n}\n\n// DeleteAll deletes all LTX files.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\t// Iterate over every object and delete it.\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"LIST\").Inc()\n\tfor it := c.bkt.Objects(ctx, \u0026storage.Query{Prefix: c.Path + \"/\"}); ; {\n\t\tattrs, err := it.Next()\n\t\tif errors.Is(err, iterator.Done) {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn fmt.Errorf(\"failed to list objects in GCS bucket %s (path: %s): %w\", c.Bucket, c.Path, err)\n\t\t}\n\n\t\tif err := c.bkt.Object(attrs.Name).Delete(ctx); isNotExists(err) {\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn fmt.Errorf(\"gs: cannot delete object %q: %w\", attrs.Name, err)\n\t\t}\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\t// log.Printf(\"%s(%s): retainer: deleting\", r.db.Path(), r.Name())\n\n\treturn nil\n}\n\n// LTXFiles returns an iterator over all available LTX files for a level.\n// GCS always uses accurate timestamps from metadata since they're included in LIST operations at zero cost.\n// The useMetadata parameter is ignored.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tdir := litestream.LTXLevelDir(c.Path, level)\n\tquery := \u0026storage.Query{Prefix: dir + \"/\"}\n\tif seek != 0 {\n\t\tquery.StartOffset = query.Prefix + seek.String()\n\t}\n\n\treturn newLTXFileIterator(c.bkt.Objects(ctx, query), c, level), nil\n}\n\n// WriteLTXFile writes an LTX file from rd to a remote path.\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, rd io.Reader) (info *ltx.FileInfo, err error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn info, err\n\t}\n\n\tkey := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(rd, \u0026buf)\n\n\t// Extract timestamp from LTX header\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Combine buffered data with rest of reader\n\tfullReader := io.MultiReader(\u0026buf, rd)\n\n\twriteCtx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\tw := c.bkt.Object(key).NewWriter(writeCtx)\n\n\t// Store timestamp in GCS metadata for accurate timestamp retrieval\n\tw.Metadata = map[string]string{\n\t\tMetadataKeyTimestamp: timestamp.Format(time.RFC3339Nano),\n\t}\n\n\tn, err := io.Copy(w, fullReader)\n\tif err != nil {\n\t\tcancel()\n\t\treturn info, err\n\t} else if err := w.Close(); err != nil {\n\t\treturn info, err\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(n))\n\n\treturn \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: n,\n\t\tCreatedAt: timestamp,\n\t}, nil\n}\n\n// OpenLTXFile returns a reader for a given LTX file.\n// Returns os.ErrNotExist if no matching index/offset is found.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\n\t// In the GCS client, a length of -1 reads to EOF while 0 returns no data.\n\t// Callers pass size=0 to indicate \"entire object\" so translate that here.\n\t// See: https://pkg.go.dev/cloud.google.com/go/storage#ObjectHandle.NewRangeReader\n\tlength := size\n\tif length \u003c= 0 {\n\t\tlength = -1\n\t}\n\n\tr, err := c.bkt.Object(key).NewRangeReader(ctx, offset, length)\n\tif isNotExists(err) {\n\t\treturn nil, os.ErrNotExist\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Add(float64(r.Attrs.Size))\n\n\treturn r, nil\n}\n\n// DeleteLTXFiles deletes a set of LTX files.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, info := range a {\n\t\tkey := litestream.LTXFilePath(c.Path, info.Level, info.MinTXID, info.MaxTXID)\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"key\", key)\n\n\t\tif err := c.bkt.Object(key).Delete(ctx); err != nil \u0026\u0026 !isNotExists(err) {\n\t\t\treturn fmt.Errorf(\"gs: cannot delete ltx file %q: %w\", key, err)\n\t\t}\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\treturn nil\n}\n\ntype ltxFileIterator struct {\n\tit *storage.ObjectIterator\n\tclient *ReplicaClient\n\tlevel int\n\tinfo *ltx.FileInfo\n\terr error\n}\n\nfunc newLTXFileIterator(it *storage.ObjectIterator, client *ReplicaClient, level int) *ltxFileIterator {\n\treturn \u0026ltxFileIterator{\n\t\tit: it,\n\t\tclient: client,\n\t\tlevel: level,\n\t}\n}\n\nfunc (itr *ltxFileIterator) Close() (err error) {\n\treturn itr.err\n}\n\nfunc (itr *ltxFileIterator) Next() bool {\n\t// Exit if an error has already occurred.\n\tif itr.err != nil {\n\t\treturn false\n\t}\n\n\tfor {\n\t\t// Fetch next object.\n\t\tattrs, err := itr.it.Next()\n\t\tif errors.Is(err, iterator.Done) {\n\t\t\treturn false\n\t\t} else if err != nil {\n\t\t\titr.err = err\n\t\t\treturn false\n\t\t}\n\n\t\t// Parse index \u0026 offset, otherwise skip to the next object.\n\t\tminTXID, maxTXID, err := ltx.ParseFilename(path.Base(attrs.Name))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Always use accurate timestamp from metadata since it's zero-cost\n\t\t// GCS includes metadata in LIST operations, so no extra API call needed\n\t\tcreatedAt := attrs.Created.UTC()\n\t\tif attrs.Metadata != nil {\n\t\t\tif ts, ok := attrs.Metadata[MetadataKeyTimestamp]; ok {\n\t\t\t\tif parsed, err := time.Parse(time.RFC3339Nano, ts); err == nil {\n\t\t\t\t\tcreatedAt = parsed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Store current snapshot and return.\n\t\titr.info = \u0026ltx.FileInfo{\n\t\t\tLevel: itr.level,\n\t\t\tMinTXID: minTXID,\n\t\t\tMaxTXID: maxTXID,\n\t\t\tSize: attrs.Size,\n\t\t\tCreatedAt: createdAt,\n\t\t}\n\n\t\treturn true\n\t}\n}\n\nfunc (itr *ltxFileIterator) Err() error { return itr.err }\n\nfunc (itr *ltxFileIterator) Item() *ltx.FileInfo {\n\treturn itr.info\n}\n\nfunc isNotExists(err error) bool {\n\treturn errors.Is(err, storage.ErrObjectNotExist)\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[21,29]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[30,40]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[41,50]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[51,57]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[58,63]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[64,75]}},{"name":"url","path":"net/url","span":{"start":[10,1],"end":[10,11],"bytes":[76,86]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[87,92]}},{"name":"path","path":"path","span":{"start":[12,1],"end":[12,8],"bytes":[93,100]}},{"name":"sync","path":"sync","span":{"start":[13,1],"end":[13,8],"bytes":[101,108]}},{"name":"time","path":"time","span":{"start":[14,1],"end":[14,8],"bytes":[109,116]}},{"name":"storage","path":"cloud.google.com/go/storage","span":{"start":[16,1],"end":[16,31],"bytes":[118,148]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[17,1],"end":[17,27],"bytes":[149,175]}},{"name":"iterator","path":"google.golang.org/api/iterator","span":{"start":[18,1],"end":[18,34],"bytes":[176,209]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[20,1],"end":[20,37],"bytes":[211,247]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[21,1],"end":[21,46],"bytes":[248,293]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient","kind":"struct","span":{"start":[37,1],"end":[46,2],"bytes":[745,964]},"callables":{"github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteAll":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteAll","kind":"method","span":{"start":[95,1],"end":[121,2],"bytes":[2266,3145]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[95,1],"end":[95,63],"bytes":[2266,2328]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"101:2":{"kind":"call","span":{"start":[101,2],"end":[101,78],"bytes":[2429,2505]},"callee":null},"102:12":{"kind":"call","span":{"start":[102,12],"end":[102,68],"bytes":[2523,2579]},"callee":null},"103:17":{"kind":"call","span":{"start":[103,17],"end":[103,26],"bytes":[2601,2610]},"callee":null},"104:6":{"kind":"call","span":{"start":[104,6],"end":[104,35],"bytes":[2616,2645]},"callee":null},"107:11":{"kind":"call","span":{"start":[107,11],"end":[107,102],"bytes":[2692,2783]},"callee":null},"110:13":{"kind":"call","span":{"start":[110,13],"end":[110,37],"bytes":[2801,2825]},"callee":null},"110:51":{"kind":"call","span":{"start":[110,51],"end":[110,67],"bytes":[2839,2855]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists"},"113:11":{"kind":"call","span":{"start":[113,11],"end":[113,73],"bytes":[2905,2967]},"callee":null},"115:3":{"kind":"call","span":{"start":[115,3],"end":[115,81],"bytes":[2974,3052]},"callee":null},"96:12":{"kind":"call","span":{"start":[96,12],"end":[96,23],"bytes":[2340,2351]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init"}}},"github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[222,1],"end":[239,2],"bytes":[6379,7002]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[222,1],"end":[222,87],"bytes":[6379,6465]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[222,1],"end":[222,87],"bytes":[6379,6465]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"223:12":{"kind":"call","span":{"start":[223,12],"end":[223,23],"bytes":[6477,6488]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init"},"228:10":{"kind":"call","span":{"start":[228,10],"end":[228,80],"bytes":[6555,6625]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"230:3":{"kind":"call","span":{"start":[230,3],"end":[230,121],"bytes":[6629,6747]},"callee":null},"232:13":{"kind":"call","span":{"start":[232,13],"end":[232,30],"bytes":[6761,6778]},"callee":null},"232:59":{"kind":"call","span":{"start":[232,59],"end":[232,75],"bytes":[6807,6823]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists"},"233:11":{"kind":"call","span":{"start":[233,11],"end":[233,68],"bytes":[6836,6893]},"callee":null},"235:3":{"kind":"call","span":{"start":[235,3],"end":[235,81],"bytes":[6900,6978]},"callee":null}}},"github.com/benbjohnson/litestream/gs.ReplicaClient.Init":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","kind":"method","span":{"start":[78,1],"end":[92,2],"bytes":[1898,2228]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[78,1],"end":[78,64],"bytes":[1898,1961]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"79:2":{"kind":"call","span":{"start":[79,2],"end":[79,13],"bytes":[1963,1974]},"callee":null},"80:8":{"kind":"call","span":{"start":[80,8],"end":[80,21],"bytes":[1982,1995]},"callee":null},"86:21":{"kind":"call","span":{"start":[86,21],"end":[86,43],"bytes":[2056,2078]},"callee":null},"87:10":{"kind":"call","span":{"start":[87,10],"end":[87,83],"bytes":[2102,2175]},"callee":null},"89:10":{"kind":"call","span":{"start":[89,10],"end":[89,35],"bytes":[2188,2213]},"callee":null}}},"github.com/benbjohnson/litestream/gs.ReplicaClient.LTXFiles":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.LTXFiles","kind":"method","span":{"start":[126,1],"end":[138,2],"bytes":[3371,3787]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[126,1],"end":[126,126],"bytes":[3371,3496]}},{"name":"level","type":"int","span":{"start":[126,1],"end":[126,126],"bytes":[3371,3496]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[126,1],"end":[126,126],"bytes":[3371,3496]}},{"name":"useMetadata","type":"bool","span":{"start":[126,1],"end":[126,126],"bytes":[3371,3496]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"127:12":{"kind":"call","span":{"start":[127,12],"end":[127,23],"bytes":[3508,3519]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init"},"131:9":{"kind":"call","span":{"start":[131,9],"end":[131,46],"bytes":[3564,3601]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"134:38":{"kind":"call","span":{"start":[134,38],"end":[134,51],"bytes":[3699,3712]},"callee":null},"137:28":{"kind":"call","span":{"start":[137,28],"end":[137,53],"bytes":[3744,3769]},"callee":null},"137:9":{"kind":"call","span":{"start":[137,9],"end":[137,64],"bytes":[3725,3780]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.newLTXFileIterator"}}},"github.com/benbjohnson/litestream/gs.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[193,1],"end":[219,2],"bytes":[5412,6331]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[193,1],"end":[193,140],"bytes":[5412,5551]}},{"name":"level","type":"int","span":{"start":[193,1],"end":[193,140],"bytes":[5412,5551]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[193,1],"end":[193,140],"bytes":[5412,5551]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[193,1],"end":[193,140],"bytes":[5412,5551]}},{"name":"offset","type":"int64","span":{"start":[193,1],"end":[193,140],"bytes":[5412,5551]}},{"name":"size","type":"int64","span":{"start":[193,1],"end":[193,140],"bytes":[5412,5551]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"194:12":{"kind":"call","span":{"start":[194,12],"end":[194,23],"bytes":[5563,5574]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init"},"198:9":{"kind":"call","span":{"start":[198,9],"end":[198,64],"bytes":[5619,5674]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"208:12":{"kind":"call","span":{"start":[208,12],"end":[208,29],"bytes":[5975,5992]},"callee":null},"209:5":{"kind":"call","span":{"start":[209,5],"end":[209,21],"bytes":[6033,6049]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists"},"215:2":{"kind":"call","span":{"start":[215,2],"end":[215,77],"bytes":[6128,6203]},"callee":null},"216:2":{"kind":"call","span":{"start":[216,2],"end":[216,77],"bytes":[6211,6286]},"callee":null},"216:82":{"kind":"call","span":{"start":[216,82],"end":[216,103],"bytes":[6291,6312]},"callee":null}}},"github.com/benbjohnson/litestream/gs.ReplicaClient.SetLogger":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.SetLogger","kind":"method","span":{"start":[55,1],"end":[57,2],"bytes":[1153,1259]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[55,1],"end":[55,57],"bytes":[1153,1209]}}],"metrics":{"cyclomatic":1},"body":{"56:13":{"kind":"call","span":{"start":[56,13],"end":[56,48],"bytes":[1222,1257]},"callee":null}}},"github.com/benbjohnson/litestream/gs.ReplicaClient.Type":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Type","kind":"method","span":{"start":[73,1],"end":[75,2],"bytes":[1757,1824]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/gs.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[141,1],"end":[189,2],"bytes":[3850,5292]},"signature":"github.com/benbjohnson/litestream/gs.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[141,1],"end":[141,144],"bytes":[3850,3993]}},{"name":"level","type":"int","span":{"start":[141,1],"end":[141,144],"bytes":[3850,3993]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[141,1],"end":[141,144],"bytes":[3850,3993]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[141,1],"end":[141,144],"bytes":[3850,3993]}},{"name":"rd","type":"io.Reader","span":{"start":[141,1],"end":[141,144],"bytes":[3850,3993]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"142:12":{"kind":"call","span":{"start":[142,12],"end":[142,23],"bytes":[4005,4016]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init"},"146:9":{"kind":"call","span":{"start":[146,9],"end":[146,64],"bytes":[4062,4117]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"150:15":{"kind":"call","span":{"start":[150,15],"end":[150,37],"bytes":[4228,4250]},"callee":null},"153:17":{"kind":"call","span":{"start":[153,17],"end":[153,42],"bytes":[4306,4331]},"callee":null},"155:15":{"kind":"call","span":{"start":[155,15],"end":[155,71],"bytes":[4363,4419]},"callee":null},"157:15":{"kind":"call","span":{"start":[157,15],"end":[157,44],"bytes":[4437,4466]},"callee":null},"160:16":{"kind":"call","span":{"start":[160,16],"end":[160,40],"bytes":[4535,4559]},"callee":null},"162:22":{"kind":"call","span":{"start":[162,22],"end":[162,45],"bytes":[4582,4605]},"callee":null},"163:8":{"kind":"call","span":{"start":[163,8],"end":[163,16],"bytes":[4613,4621]},"callee":null},"164:7":{"kind":"call","span":{"start":[164,7],"end":[164,24],"bytes":[4628,4645]},"callee":null},"168:25":{"kind":"call","span":{"start":[168,25],"end":[168,59],"bytes":[4793,4827]},"callee":null},"171:12":{"kind":"call","span":{"start":[171,12],"end":[171,34],"bytes":[4844,4866]},"callee":null},"173:3":{"kind":"call","span":{"start":[173,3],"end":[173,11],"bytes":[4886,4894]},"callee":null},"175:19":{"kind":"call","span":{"start":[175,19],"end":[175,28],"bytes":[4932,4941]},"callee":null},"179:2":{"kind":"call","span":{"start":[179,2],"end":[179,77],"bytes":[4980,5055]},"callee":null},"180:2":{"kind":"call","span":{"start":[180,2],"end":[180,77],"bytes":[5063,5138]},"callee":null},"180:82":{"kind":"call","span":{"start":[180,82],"end":[180,92],"bytes":[5143,5153]},"callee":null}}}},"fields":{"Bucket":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/Bucket","kind":"field","type":"string","span":{"start":[44,1],"end":[44,15],"bytes":[933,947]}},"Path":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[45,1],"end":[45,15],"bytes":[948,962]}},"bkt":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/bkt","kind":"field","type":"*cloud.google.com/go/storage.BucketHandle","span":{"start":[40,1],"end":[40,50],"bytes":[835,884]}},"client":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/client","kind":"field","type":"*cloud.google.com/go/storage.Client","span":{"start":[39,1],"end":[39,43],"bytes":[792,834]}},"logger":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[41,1],"end":[41,21],"bytes":[885,905]}},"mu":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[38,1],"end":[38,19],"bytes":[773,791]}}}},"ltxFileIterator":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator","kind":"struct","span":{"start":[241,1],"end":[247,2],"bytes":[7004,7138]},"callables":{"github.com/benbjohnson/litestream/gs.ltxFileIterator.Close":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/github.com/benbjohnson/litestream/gs.ltxFileIterator.Close","kind":"method","span":{"start":[257,1],"end":[259,2],"bytes":[7326,7393]},"signature":"github.com/benbjohnson/litestream/gs.ltxFileIterator.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/gs.ltxFileIterator.Err":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/github.com/benbjohnson/litestream/gs.ltxFileIterator.Err","kind":"method","span":{"start":[307,1],"end":[307,59],"bytes":[8454,8512]},"signature":"github.com/benbjohnson/litestream/gs.ltxFileIterator.Err","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/gs.ltxFileIterator.Item":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/github.com/benbjohnson/litestream/gs.ltxFileIterator.Item","kind":"method","span":{"start":[309,1],"end":[311,2],"bytes":[8514,8583]},"signature":"github.com/benbjohnson/litestream/gs.ltxFileIterator.Item","parameters":[],"return_type":"*github.com/superfly/ltx.FileInfo","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/gs.ltxFileIterator.Next":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/github.com/benbjohnson/litestream/gs.ltxFileIterator.Next","kind":"method","span":{"start":[261,1],"end":[305,2],"bytes":[7395,8452]},"signature":"github.com/benbjohnson/litestream/gs.ltxFileIterator.Next","parameters":[],"return_type":"bool","metrics":{"cyclomatic":9},"body":{"269:17":{"kind":"call","span":{"start":[269,17],"end":[269,30],"bytes":[7567,7580]},"callee":null},"270:6":{"kind":"call","span":{"start":[270,6],"end":[270,35],"bytes":[7586,7615]},"callee":null},"278:28":{"kind":"call","span":{"start":[278,28],"end":[278,68],"bytes":[7786,7826]},"callee":null},"278:46":{"kind":"call","span":{"start":[278,46],"end":[278,67],"bytes":[7804,7825]},"callee":null},"285:16":{"kind":"call","span":{"start":[285,16],"end":[285,35],"bytes":[8022,8041]},"callee":null},"288:23":{"kind":"call","span":{"start":[288,23],"end":[288,55],"bytes":[8152,8184]},"callee":null}}}},"fields":{"client":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/client","kind":"field","type":"*github.com/benbjohnson/litestream/gs.ReplicaClient","span":{"start":[243,1],"end":[243,23],"bytes":[7066,7088]}},"err":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/err","kind":"field","type":"error","span":{"start":[246,1],"end":[246,14],"bytes":[7123,7136]}},"info":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/info","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[245,1],"end":[245,22],"bytes":[7101,7122]}},"it":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/it","kind":"field","type":"*cloud.google.com/go/storage.ObjectIterator","span":{"start":[242,1],"end":[242,32],"bytes":[7034,7065]}},"level":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ltxFileIterator/level","kind":"field","type":"int","span":{"start":[244,1],"end":[244,12],"bytes":[7089,7100]}}}}},"functions":{"github.com/benbjohnson/litestream/gs.NewReplicaClient":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient","kind":"function","span":{"start":[49,1],"end":[53,2],"bytes":[1027,1151]},"signature":"github.com/benbjohnson/litestream/gs.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/gs.ReplicaClient","metrics":{"cyclomatic":1},"body":{"51:11":{"kind":"call","span":{"start":[51,11],"end":[51,25],"bytes":[1102,1116]},"callee":null}}},"github.com/benbjohnson/litestream/gs.NewReplicaClientFromURL":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClientFromURL","kind":"function","span":{"start":[61,1],"end":[70,2],"bytes":[1397,1714]},"signature":"github.com/benbjohnson/litestream/gs.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[61,1],"end":[61,137],"bytes":[1397,1533]}},{"name":"host","type":"string","span":{"start":[61,1],"end":[61,137],"bytes":[1397,1533]}},{"name":"urlPath","type":"string","span":{"start":[61,1],"end":[61,137],"bytes":[1397,1533]}},{"name":"query","type":"net/url.Values","span":{"start":[61,1],"end":[61,137],"bytes":[1397,1533]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[61,1],"end":[61,137],"bytes":[1397,1533]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"63:15":{"kind":"call","span":{"start":[63,15],"end":[63,63],"bytes":[1565,1613]},"callee":null},"66:12":{"kind":"call","span":{"start":[66,12],"end":[66,30],"bytes":[1629,1647]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient"}}},"github.com/benbjohnson/litestream/gs.init":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.init","kind":"function","span":{"start":[24,1],"end":[26,2],"bytes":[297,384]},"signature":"github.com/benbjohnson/litestream/gs.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"25:2":{"kind":"call","span":{"start":[25,2],"end":[25,72],"bytes":[312,382]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}},"github.com/benbjohnson/litestream/gs.isNotExists":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists","kind":"function","span":{"start":[313,1],"end":[315,2],"bytes":[8585,8671]},"signature":"github.com/benbjohnson/litestream/gs.isNotExists","parameters":[{"name":"err","type":"error","span":{"start":[313,1],"end":[313,35],"bytes":[8585,8619]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"314:9":{"kind":"call","span":{"start":[314,9],"end":[314,50],"bytes":[8628,8669]},"callee":null}}},"github.com/benbjohnson/litestream/gs.newLTXFileIterator":{"id":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.newLTXFileIterator","kind":"function","span":{"start":[249,1],"end":[255,2],"bytes":[7140,7324]},"signature":"github.com/benbjohnson/litestream/gs.newLTXFileIterator","parameters":[{"name":"it","type":"*cloud.google.com/go/storage.ObjectIterator","span":{"start":[249,1],"end":[249,105],"bytes":[7140,7244]}},{"name":"client","type":"*github.com/benbjohnson/litestream/gs.ReplicaClient","span":{"start":[249,1],"end":[249,105],"bytes":[7140,7244]}},{"name":"level","type":"int","span":{"start":[249,1],"end":[249,105],"bytes":[7140,7244]}}],"return_type":"*github.com/benbjohnson/litestream/gs.ltxFileIterator","metrics":{"cyclomatic":1},"body":{}}},"content_hash":"1bc094d2a506f33e506545d5cebb40caf43ad4fec91331d27bbb588fdf9df78b"},"heartbeat.go":{"id":"can://go/litestream/heartbeat.go","kind":"module","span":{"start":[1,1],"end":[85,1],"bytes":[0,1575]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"sync\"\n\t\"time\"\n)\n\nconst (\n\tDefaultHeartbeatInterval = 5 * time.Minute\n\tDefaultHeartbeatTimeout = 30 * time.Second\n\tMinHeartbeatInterval = 1 * time.Minute\n)\n\ntype HeartbeatClient struct {\n\tmu sync.Mutex\n\thttpClient *http.Client\n\n\tURL string\n\tInterval time.Duration\n\tTimeout time.Duration\n\n\tlastPingAt time.Time\n}\n\nfunc NewHeartbeatClient(url string, interval time.Duration) *HeartbeatClient {\n\tif interval \u003c MinHeartbeatInterval {\n\t\tinterval = MinHeartbeatInterval\n\t}\n\n\ttimeout := DefaultHeartbeatTimeout\n\n\treturn \u0026HeartbeatClient{\n\t\tURL: url,\n\t\tInterval: interval,\n\t\tTimeout: timeout,\n\t\thttpClient: \u0026http.Client{\n\t\t\tTimeout: timeout,\n\t\t},\n\t}\n}\n\nfunc (c *HeartbeatClient) Ping(ctx context.Context) error {\n\tif c.URL == \"\" {\n\t\treturn nil\n\t}\n\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, c.URL, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create request: %w\", err)\n\t}\n\n\tresp, err := c.httpClient.Do(req)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"http request: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode \u003c 200 || resp.StatusCode \u003e= 300 {\n\t\treturn fmt.Errorf(\"unexpected status code: %d\", resp.StatusCode)\n\t}\n\n\treturn nil\n}\n\nfunc (c *HeartbeatClient) ShouldPing() bool {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\treturn time.Since(c.lastPingAt) \u003e= c.Interval\n}\n\nfunc (c *HeartbeatClient) LastPingAt() time.Time {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\treturn c.lastPingAt\n}\n\nfunc (c *HeartbeatClient) RecordPing() {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tc.lastPingAt = time.Now()\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"fmt","path":"fmt","span":{"start":[5,1],"end":[5,7],"bytes":[40,46]}},{"name":"http","path":"net/http","span":{"start":[6,1],"end":[6,12],"bytes":[47,58]}},{"name":"sync","path":"sync","span":{"start":[7,1],"end":[7,8],"bytes":[59,66]}},{"name":"time","path":"time","span":{"start":[8,1],"end":[8,8],"bytes":[67,74]}}],"types":{"HeartbeatClient":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient","kind":"struct","span":{"start":[17,1],"end":[26,2],"bytes":[222,390]},"callables":{"github.com/benbjohnson/litestream.HeartbeatClient.LastPingAt":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.LastPingAt","kind":"method","span":{"start":[74,1],"end":[78,2],"bytes":[1362,1469]},"signature":"github.com/benbjohnson/litestream.HeartbeatClient.LastPingAt","parameters":[],"return_type":"time.Time","metrics":{"cyclomatic":1},"body":{"75:2":{"kind":"call","span":{"start":[75,2],"end":[75,13],"bytes":[1414,1425]},"callee":null},"76:8":{"kind":"call","span":{"start":[76,8],"end":[76,21],"bytes":[1433,1446]},"callee":null}}},"github.com/benbjohnson/litestream.HeartbeatClient.Ping":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.Ping","kind":"method","span":{"start":[45,1],"end":[66,2],"bytes":[730,1230]},"signature":"github.com/benbjohnson/litestream.HeartbeatClient.Ping","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[45,1],"end":[45,60],"bytes":[730,789]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"50:14":{"kind":"call","span":{"start":[50,14],"end":[50,73],"bytes":[838,897]},"callee":null},"52:10":{"kind":"call","span":{"start":[52,10],"end":[52,47],"bytes":[924,961]},"callee":null},"55:15":{"kind":"call","span":{"start":[55,15],"end":[55,35],"bytes":[980,1000]},"callee":null},"57:10":{"kind":"call","span":{"start":[57,10],"end":[57,45],"bytes":[1027,1062]},"callee":null},"59:8":{"kind":"call","span":{"start":[59,8],"end":[59,25],"bytes":[1073,1090]},"callee":null},"62:10":{"kind":"call","span":{"start":[62,10],"end":[62,67],"bytes":[1155,1212]},"callee":null}}},"github.com/benbjohnson/litestream.HeartbeatClient.RecordPing":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.RecordPing","kind":"method","span":{"start":[80,1],"end":[84,2],"bytes":[1471,1574]},"signature":"github.com/benbjohnson/litestream.HeartbeatClient.RecordPing","parameters":[],"metrics":{"cyclomatic":1},"body":{"81:2":{"kind":"call","span":{"start":[81,2],"end":[81,13],"bytes":[1513,1524]},"callee":null},"82:8":{"kind":"call","span":{"start":[82,8],"end":[82,21],"bytes":[1532,1545]},"callee":null},"83:17":{"kind":"call","span":{"start":[83,17],"end":[83,27],"bytes":[1562,1572]},"callee":null}}},"github.com/benbjohnson/litestream.HeartbeatClient.ShouldPing":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.ShouldPing","kind":"method","span":{"start":[68,1],"end":[72,2],"bytes":[1232,1360]},"signature":"github.com/benbjohnson/litestream.HeartbeatClient.ShouldPing","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"69:2":{"kind":"call","span":{"start":[69,2],"end":[69,13],"bytes":[1279,1290]},"callee":null},"70:8":{"kind":"call","span":{"start":[70,8],"end":[70,21],"bytes":[1298,1311]},"callee":null},"71:9":{"kind":"call","span":{"start":[71,9],"end":[71,33],"bytes":[1320,1344]},"callee":null}}}},"fields":{"Interval":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/Interval","kind":"field","type":"time.Duration","span":{"start":[22,1],"end":[22,24],"bytes":[318,341]}},"Timeout":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/Timeout","kind":"field","type":"time.Duration","span":{"start":[23,1],"end":[23,24],"bytes":[342,365]}},"URL":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/URL","kind":"field","type":"string","span":{"start":[21,1],"end":[21,17],"bytes":[301,317]}},"httpClient":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/httpClient","kind":"field","type":"*net/http.Client","span":{"start":[19,1],"end":[19,25],"bytes":[275,299]}},"lastPingAt":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/lastPingAt","kind":"field","type":"time.Time","span":{"start":[25,1],"end":[25,22],"bytes":[367,388]}},"mu":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[18,1],"end":[18,23],"bytes":[252,274]}}}}},"functions":{"github.com/benbjohnson/litestream.NewHeartbeatClient":{"id":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.NewHeartbeatClient","kind":"function","span":{"start":[28,1],"end":[43,2],"bytes":[392,728]},"signature":"github.com/benbjohnson/litestream.NewHeartbeatClient","parameters":[{"name":"url","type":"string","span":{"start":[28,1],"end":[28,79],"bytes":[392,470]}},{"name":"interval","type":"time.Duration","span":{"start":[28,1],"end":[28,79],"bytes":[392,470]}}],"return_type":"*github.com/benbjohnson/litestream.HeartbeatClient","metrics":{"cyclomatic":2},"body":{}}},"content_hash":"ef90f2e79f1a8f89bd34a9cada9e3c399a410cf774b5c2b3233863dc7cbf2581"},"internal/hexdump.go":{"id":"can://go/litestream/internal/hexdump.go","kind":"module","span":{"start":[1,1],"end":[46,1],"bytes":[0,1259]},"package":"internal","source":"package internal\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\nfunc Hexdump(data []byte) string {\n\tprevRow := make([]byte, 16)\n\n\tvar buf bytes.Buffer\n\tvar dupWritten bool\n\tfor i := 0; i \u003c len(data); i += 16 {\n\t\trow := make([]byte, 16)\n\t\tcopy(row, data[i:])\n\n\t\t// Write out one line of asterisks to show that we just have duplicate rows.\n\t\tif i != 0 \u0026\u0026 i+16 \u003c len(data) \u0026\u0026 bytes.Equal(row, prevRow) {\n\t\t\tif !dupWritten {\n\t\t\t\tdupWritten = true\n\t\t\t\tfmt.Fprintln(\u0026buf, \"***\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Track previous row so we know when we have duplicates.\n\t\tcopy(prevRow, row)\n\t\tdupWritten = false\n\n\t\tfmt.Fprintf(\u0026buf, \"%08x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x |%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s|\\n\", i,\n\t\t\trow[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7],\n\t\t\trow[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15],\n\t\t\ttoChar(row[0]), toChar(row[1]), toChar(row[2]), toChar(row[3]), toChar(row[4]), toChar(row[5]), toChar(row[6]), toChar(row[7]),\n\t\t\ttoChar(row[8]), toChar(row[9]), toChar(row[10]), toChar(row[11]), toChar(row[12]), toChar(row[13]), toChar(row[14]), toChar(row[15]),\n\t\t)\n\t}\n\treturn buf.String()\n}\n\nfunc toChar(b byte) string {\n\tif b \u003c 32 || b \u003e 126 {\n\t\treturn \".\"\n\t}\n\treturn string(b)\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[27,35]}},{"name":"fmt","path":"fmt","span":{"start":[5,1],"end":[5,7],"bytes":[36,42]}}],"types":{},"functions":{"github.com/benbjohnson/litestream/internal.Hexdump":{"id":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.Hexdump","kind":"function","span":{"start":[8,1],"end":[38,2],"bytes":[46,1168]},"signature":"github.com/benbjohnson/litestream/internal.Hexdump","parameters":[{"name":"data","type":"[]byte","span":{"start":[8,1],"end":[8,35],"bytes":[46,80]}}],"return_type":"string","metrics":{"cyclomatic":4},"body":{"13:18":{"kind":"call","span":{"start":[13,18],"end":[13,27],"bytes":[171,180]},"callee":null},"14:10":{"kind":"call","span":{"start":[14,10],"end":[14,26],"bytes":[201,217]},"callee":null},"15:3":{"kind":"call","span":{"start":[15,3],"end":[15,22],"bytes":[220,239]},"callee":null},"18:23":{"kind":"call","span":{"start":[18,23],"end":[18,32],"bytes":[342,351]},"callee":null},"18:36":{"kind":"call","span":{"start":[18,36],"end":[18,61],"bytes":[355,380]},"callee":null},"21:5":{"kind":"call","span":{"start":[21,5],"end":[21,30],"bytes":[429,454]},"callee":null},"27:3":{"kind":"call","span":{"start":[27,3],"end":[27,21],"bytes":[539,557]},"callee":null},"30:3":{"kind":"call","span":{"start":[30,3],"end":[35,4],"bytes":[582,1142]},"callee":null},"33:100":{"kind":"call","span":{"start":[33,100],"end":[33,114],"bytes":[970,984]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:116":{"kind":"call","span":{"start":[33,116],"end":[33,130],"bytes":[986,1000]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:20":{"kind":"call","span":{"start":[33,20],"end":[33,34],"bytes":[890,904]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:36":{"kind":"call","span":{"start":[33,36],"end":[33,50],"bytes":[906,920]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:4":{"kind":"call","span":{"start":[33,4],"end":[33,18],"bytes":[874,888]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:52":{"kind":"call","span":{"start":[33,52],"end":[33,66],"bytes":[922,936]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:68":{"kind":"call","span":{"start":[33,68],"end":[33,82],"bytes":[938,952]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"33:84":{"kind":"call","span":{"start":[33,84],"end":[33,98],"bytes":[954,968]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:104":{"kind":"call","span":{"start":[34,104],"end":[34,119],"bytes":[1105,1120]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:121":{"kind":"call","span":{"start":[34,121],"end":[34,136],"bytes":[1122,1137]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:20":{"kind":"call","span":{"start":[34,20],"end":[34,34],"bytes":[1021,1035]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:36":{"kind":"call","span":{"start":[34,36],"end":[34,51],"bytes":[1037,1052]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:4":{"kind":"call","span":{"start":[34,4],"end":[34,18],"bytes":[1005,1019]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:53":{"kind":"call","span":{"start":[34,53],"end":[34,68],"bytes":[1054,1069]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:70":{"kind":"call","span":{"start":[34,70],"end":[34,85],"bytes":[1071,1086]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"34:87":{"kind":"call","span":{"start":[34,87],"end":[34,102],"bytes":[1088,1103]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"37:9":{"kind":"call","span":{"start":[37,9],"end":[37,21],"bytes":[1154,1166]},"callee":null},"9:13":{"kind":"call","span":{"start":[9,13],"end":[9,29],"bytes":[93,109]},"callee":null}}},"github.com/benbjohnson/litestream/internal.toChar":{"id":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar","kind":"function","span":{"start":[40,1],"end":[45,2],"bytes":[1170,1258]},"signature":"github.com/benbjohnson/litestream/internal.toChar","parameters":[{"name":"b","type":"byte","span":{"start":[40,1],"end":[40,29],"bytes":[1170,1198]}}],"return_type":"string","metrics":{"cyclomatic":2},"body":{"44:9":{"kind":"call","span":{"start":[44,9],"end":[44,18],"bytes":[1247,1256]},"callee":null}}}},"content_hash":"124cc6cc77df8fbcf11b7d27687a0e2fe0edb403fd28c849424522fb3f482bf6"},"internal/internal.go":{"id":"can://go/litestream/internal/internal.go","kind":"module","span":{"start":[1,1],"end":[178,1],"bytes":[0,4815]},"package":"internal","source":"package internal\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"syscall\"\n\n\t\"github.com/pierrec/lz4/v4\"\n\t\"github.com/prometheus/client_golang/prometheus\"\n\t\"github.com/prometheus/client_golang/prometheus/promauto\"\n)\n\n// ReadCloser wraps a reader to also attach a separate closer.\ntype ReadCloser struct {\n\tr io.Reader\n\tc io.Closer\n}\n\n// NewReadCloser returns a new instance of ReadCloser.\nfunc NewReadCloser(r io.Reader, c io.Closer) *ReadCloser {\n\treturn \u0026ReadCloser{r, c}\n}\n\n// Read reads bytes into the underlying reader.\nfunc (r *ReadCloser) Read(p []byte) (n int, err error) {\n\treturn r.r.Read(p)\n}\n\n// Close closes the reader (if implementing io.ReadCloser) and the Closer.\nfunc (r *ReadCloser) Close() error {\n\tif rc, ok := r.r.(io.Closer); ok {\n\t\tif err := rc.Close(); err != nil {\n\t\t\tr.c.Close()\n\t\t\treturn err\n\t\t}\n\t}\n\treturn r.c.Close()\n}\n\n// LZ4ReadCloser wraps an LZ4 reader with the underlying source for proper closing.\ntype LZ4ReadCloser struct {\n\t*lz4.Reader\n\tunderlying io.Closer\n}\n\nfunc (r *LZ4ReadCloser) Close() error {\n\treturn r.underlying.Close()\n}\n\n// NewLZ4Reader creates an LZ4 decompressing reader that wraps the source.\n// Closing the returned reader also closes the underlying source.\nfunc NewLZ4Reader(r io.ReadCloser) io.ReadCloser {\n\treturn \u0026LZ4ReadCloser{\n\t\tReader: lz4.NewReader(r),\n\t\tunderlying: r,\n\t}\n}\n\n// ReadCounter wraps an io.Reader and counts the total number of bytes read.\ntype ReadCounter struct {\n\tr io.Reader\n\tn int64\n}\n\n// NewReadCounter returns a new instance of ReadCounter that wraps r.\nfunc NewReadCounter(r io.Reader) *ReadCounter {\n\treturn \u0026ReadCounter{r: r}\n}\n\n// Read reads from the underlying reader into p and adds the bytes read to the counter.\nfunc (r *ReadCounter) Read(p []byte) (int, error) {\n\tn, err := r.r.Read(p)\n\tr.n += int64(n)\n\treturn n, err\n}\n\n// N returns the total number of bytes read.\nfunc (r *ReadCounter) N() int64 { return r.n }\n\n// CreateFile creates the file and matches the mode \u0026 uid/gid of fi.\nfunc CreateFile(filename string, fi os.FileInfo) (*os.File, error) {\n\tmode := os.FileMode(0600)\n\tif fi != nil {\n\t\tmode = fi.Mode()\n\t}\n\n\tf, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tuid, gid := Fileinfo(fi)\n\t_ = f.Chown(uid, gid)\n\treturn f, nil\n}\n\n// MkdirAll is a copy of os.MkdirAll() except that it attempts to set the\n// mode/uid/gid to match fi for each created directory.\nfunc MkdirAll(path string, fi os.FileInfo) error {\n\tuid, gid := Fileinfo(fi)\n\n\t// Fast path: if we can tell whether path is a directory or file, stop with success or error.\n\tdir, err := os.Stat(path)\n\tif err == nil {\n\t\tif dir.IsDir() {\n\t\t\treturn nil\n\t\t}\n\t\treturn \u0026os.PathError{Op: \"mkdir\", Path: path, Err: syscall.ENOTDIR}\n\t}\n\n\t// Slow path: make sure parent exists and then call Mkdir for path.\n\ti := len(path)\n\tfor i \u003e 0 \u0026\u0026 os.IsPathSeparator(path[i-1]) { // Skip trailing path separator.\n\t\ti--\n\t}\n\n\tj := i\n\tfor j \u003e 0 \u0026\u0026 !os.IsPathSeparator(path[j-1]) { // Scan backward over element.\n\t\tj--\n\t}\n\n\tif j \u003e 1 {\n\t\t// Create parent.\n\t\terr = MkdirAll(fixRootDirectory(path[:j-1]), fi)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Parent now exists; invoke Mkdir and use its result.\n\tmode := os.FileMode(0700)\n\tif fi != nil {\n\t\tmode = fi.Mode()\n\t}\n\terr = os.Mkdir(path, mode)\n\tif err != nil {\n\t\t// Handle arguments like \"foo/.\" by\n\t\t// double-checking that directory doesn't exist.\n\t\tdir, err1 := os.Lstat(path)\n\t\tif err1 == nil \u0026\u0026 dir.IsDir() {\n\t\t\t_ = os.Chown(path, uid, gid)\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\t_ = os.Chown(path, uid, gid)\n\treturn nil\n}\n\n// Shared replica metrics.\nvar (\n\tOperationTotalCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_replica_operation_total\",\n\t\tHelp: \"The number of replica operations performed\",\n\t}, []string{\"replica_type\", \"operation\"})\n\n\tOperationBytesCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_replica_operation_bytes\",\n\t\tHelp: \"The number of bytes used by replica operations\",\n\t}, []string{\"replica_type\", \"operation\"})\n\n\tOperationDurationHistogramVec = promauto.NewHistogramVec(prometheus.HistogramOpts{\n\t\tName: \"litestream_replica_operation_duration_seconds\",\n\t\tHelp: \"Duration of replica operations by type and operation\",\n\t\tBuckets: []float64{0.01, 0.05, 0.1, 0.5, 1, 5, 10, 30, 60},\n\t}, []string{\"replica_type\", \"operation\"})\n\n\tOperationErrorCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_replica_operation_errors_total\",\n\t\tHelp: \"Number of replica operation errors by type, operation, and error code\",\n\t}, []string{\"replica_type\", \"operation\", \"code\"})\n\n\tL0RetentionGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_l0_retention_files_total\",\n\t\tHelp: \"Number of L0 files by status during retention enforcement\",\n\t}, []string{\"db\", \"status\"})\n)\n","imports":[{"name":"io","path":"io","span":{"start":[4,1],"end":[4,6],"bytes":[27,32]}},{"name":"os","path":"os","span":{"start":[5,1],"end":[5,6],"bytes":[33,38]}},{"name":"syscall","path":"syscall","span":{"start":[6,1],"end":[6,11],"bytes":[39,49]}},{"name":"v4","path":"github.com/pierrec/lz4/v4","span":{"start":[8,1],"end":[8,29],"bytes":[51,79]}},{"name":"prometheus","path":"github.com/prometheus/client_golang/prometheus","span":{"start":[9,1],"end":[9,50],"bytes":[80,129]}},{"name":"promauto","path":"github.com/prometheus/client_golang/prometheus/promauto","span":{"start":[10,1],"end":[10,59],"bytes":[130,188]}}],"types":{"LZ4ReadCloser":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.LZ4ReadCloser","kind":"struct","span":{"start":[41,1],"end":[44,2],"bytes":[908,972]},"base_types":["*github.com/pierrec/lz4/v4.Reader"],"callables":{"github.com/benbjohnson/litestream/internal.LZ4ReadCloser.Close":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.LZ4ReadCloser/github.com/benbjohnson/litestream/internal.LZ4ReadCloser.Close","kind":"method","span":{"start":[46,1],"end":[48,2],"bytes":[974,1044]},"signature":"github.com/benbjohnson/litestream/internal.LZ4ReadCloser.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"47:9":{"kind":"call","span":{"start":[47,9],"end":[47,29],"bytes":[1022,1042]},"callee":null}}}},"fields":{"*github.com/pierrec/lz4/v4.Reader":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.LZ4ReadCloser/*github.com/pierrec/lz4/v4.Reader","kind":"field","type":"*github.com/pierrec/lz4/v4.Reader","span":{"start":[42,1],"end":[42,13],"bytes":[936,948]}},"underlying":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.LZ4ReadCloser/underlying","kind":"field","type":"io.Closer","span":{"start":[43,1],"end":[43,22],"bytes":[949,970]}}}},"ReadCloser":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCloser","kind":"struct","span":{"start":[14,1],"end":[17,2],"bytes":[255,307]},"callables":{"github.com/benbjohnson/litestream/internal.ReadCloser.Close":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCloser/github.com/benbjohnson/litestream/internal.ReadCloser.Close","kind":"method","span":{"start":[30,1],"end":[38,2],"bytes":[655,822]},"signature":"github.com/benbjohnson/litestream/internal.ReadCloser.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"32:13":{"kind":"call","span":{"start":[32,13],"end":[32,23],"bytes":[740,750]},"callee":null},"33:4":{"kind":"call","span":{"start":[33,4],"end":[33,15],"bytes":[768,779]},"callee":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar"},"37:9":{"kind":"call","span":{"start":[37,9],"end":[37,20],"bytes":[809,820]},"callee":null}}},"github.com/benbjohnson/litestream/internal.ReadCloser.Read":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCloser/github.com/benbjohnson/litestream/internal.ReadCloser.Read","kind":"method","span":{"start":[25,1],"end":[27,2],"bytes":[500,578]},"signature":"github.com/benbjohnson/litestream/internal.ReadCloser.Read","parameters":[{"name":"p","type":"[]byte","span":{"start":[25,1],"end":[25,57],"bytes":[500,556]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"26:9":{"kind":"call","span":{"start":[26,9],"end":[26,20],"bytes":[565,576]},"callee":null}}}},"fields":{"c":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCloser/c","kind":"field","type":"io.Closer","span":{"start":[16,1],"end":[16,13],"bytes":[293,305]}},"r":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCloser/r","kind":"field","type":"io.Reader","span":{"start":[15,1],"end":[15,13],"bytes":[280,292]}}}},"ReadCounter":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter","kind":"struct","span":{"start":[60,1],"end":[63,2],"bytes":[1394,1443]},"callables":{"github.com/benbjohnson/litestream/internal.ReadCounter.N":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N","kind":"method","span":{"start":[78,1],"end":[78,47],"bytes":[1836,1882]},"signature":"github.com/benbjohnson/litestream/internal.ReadCounter.N","parameters":[],"return_type":"int64","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/internal.ReadCounter.Read":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.Read","kind":"method","span":{"start":[71,1],"end":[75,2],"bytes":[1681,1789]},"signature":"github.com/benbjohnson/litestream/internal.ReadCounter.Read","parameters":[{"name":"p","type":"[]byte","span":{"start":[71,1],"end":[71,52],"bytes":[1681,1732]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"72:12":{"kind":"call","span":{"start":[72,12],"end":[72,23],"bytes":[1744,1755]},"callee":null},"73:9":{"kind":"call","span":{"start":[73,9],"end":[73,17],"bytes":[1764,1772]},"callee":null}}}},"fields":{"n":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/n","kind":"field","type":"int64","span":{"start":[62,1],"end":[62,9],"bytes":[1433,1441]}},"r":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/r","kind":"field","type":"io.Reader","span":{"start":[61,1],"end":[61,13],"bytes":[1420,1432]}}}}},"functions":{"github.com/benbjohnson/litestream/internal.CreateFile":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.CreateFile","kind":"function","span":{"start":[81,1],"end":[95,2],"bytes":[1953,2265]},"signature":"github.com/benbjohnson/litestream/internal.CreateFile","parameters":[{"name":"filename","type":"string","span":{"start":[81,1],"end":[81,69],"bytes":[1953,2021]}},{"name":"fi","type":"os.FileInfo","span":{"start":[81,1],"end":[81,69],"bytes":[1953,2021]}}],"return_type":"(*os.File, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"82:10":{"kind":"call","span":{"start":[82,10],"end":[82,27],"bytes":[2031,2048]},"callee":null},"84:10":{"kind":"call","span":{"start":[84,10],"end":[84,19],"bytes":[2074,2083]},"callee":null},"87:12":{"kind":"call","span":{"start":[87,12],"end":[87,73],"bytes":[2099,2160]},"callee":null},"92:14":{"kind":"call","span":{"start":[92,14],"end":[92,26],"bytes":[2213,2225]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo"},"93:6":{"kind":"call","span":{"start":[93,6],"end":[93,23],"bytes":[2231,2248]},"callee":null}}},"github.com/benbjohnson/litestream/internal.MkdirAll":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","kind":"function","span":{"start":[99,1],"end":[148,2],"bytes":[2397,3546]},"signature":"github.com/benbjohnson/litestream/internal.MkdirAll","parameters":[{"name":"path","type":"string","span":{"start":[99,1],"end":[99,51],"bytes":[2397,2447]}},{"name":"fi","type":"os.FileInfo","span":{"start":[99,1],"end":[99,51],"bytes":[2397,2447]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"100:14":{"kind":"call","span":{"start":[100,14],"end":[100,26],"bytes":[2461,2473]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo"},"103:14":{"kind":"call","span":{"start":[103,14],"end":[103,27],"bytes":[2583,2596]},"callee":null},"105:6":{"kind":"call","span":{"start":[105,6],"end":[105,17],"bytes":[2619,2630]},"callee":null},"112:7":{"kind":"call","span":{"start":[112,7],"end":[112,16],"bytes":[2800,2809]},"callee":null},"113:15":{"kind":"call","span":{"start":[113,15],"end":[113,44],"bytes":[2824,2853]},"callee":null},"118:16":{"kind":"call","span":{"start":[118,16],"end":[118,45],"bytes":[2922,2951]},"callee":null},"124:18":{"kind":"call","span":{"start":[124,18],"end":[124,46],"bytes":[3044,3072]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.fixRootDirectory"},"124:9":{"kind":"call","span":{"start":[124,9],"end":[124,51],"bytes":[3035,3077]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll"},"131:10":{"kind":"call","span":{"start":[131,10],"end":[131,27],"bytes":[3183,3200]},"callee":null},"133:10":{"kind":"call","span":{"start":[133,10],"end":[133,19],"bytes":[3226,3235]},"callee":null},"135:8":{"kind":"call","span":{"start":[135,8],"end":[135,28],"bytes":[3246,3266]},"callee":null},"139:16":{"kind":"call","span":{"start":[139,16],"end":[139,30],"bytes":[3388,3402]},"callee":null},"140:21":{"kind":"call","span":{"start":[140,21],"end":[140,32],"bytes":[3423,3434]},"callee":null},"141:8":{"kind":"call","span":{"start":[141,8],"end":[141,32],"bytes":[3444,3468]},"callee":null},"146:6":{"kind":"call","span":{"start":[146,6],"end":[146,30],"bytes":[3508,3532]},"callee":null}}},"github.com/benbjohnson/litestream/internal.NewLZ4Reader":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader","kind":"function","span":{"start":[52,1],"end":[57,2],"bytes":[1187,1315]},"signature":"github.com/benbjohnson/litestream/internal.NewLZ4Reader","parameters":[{"name":"r","type":"io.ReadCloser","span":{"start":[52,1],"end":[52,51],"bytes":[1187,1237]}}],"return_type":"io.ReadCloser","metrics":{"cyclomatic":1},"body":{"54:15":{"kind":"call","span":{"start":[54,15],"end":[54,31],"bytes":[1276,1292]},"callee":null}}},"github.com/benbjohnson/litestream/internal.NewReadCloser":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCloser","kind":"function","span":{"start":[20,1],"end":[22,2],"bytes":[364,450]},"signature":"github.com/benbjohnson/litestream/internal.NewReadCloser","parameters":[{"name":"r","type":"io.Reader","span":{"start":[20,1],"end":[20,59],"bytes":[364,422]}},{"name":"c","type":"io.Closer","span":{"start":[20,1],"end":[20,59],"bytes":[364,422]}}],"return_type":"*github.com/benbjohnson/litestream/internal.ReadCloser","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/internal.NewReadCounter":{"id":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter","kind":"function","span":{"start":[66,1],"end":[68,2],"bytes":[1515,1591]},"signature":"github.com/benbjohnson/litestream/internal.NewReadCounter","parameters":[{"name":"r","type":"io.Reader","span":{"start":[66,1],"end":[66,48],"bytes":[1515,1562]}}],"return_type":"*github.com/benbjohnson/litestream/internal.ReadCounter","metrics":{"cyclomatic":1},"body":{}}},"content_hash":"1dbef4f2385d3ead118aea4ee0553279841074b2fe2988a4c16fe625415de1b5"},"internal/internal_unix.go":{"id":"can://go/litestream/internal/internal_unix.go","kind":"module","span":{"start":[1,1],"end":[39,1],"bytes":[0,771]},"package":"internal","source":"//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage internal\n\nimport (\n\t\"os\"\n\t\"syscall\"\n)\n\n// Fileinfo returns syscall fields from a FileInfo object.\nfunc Fileinfo(fi os.FileInfo) (uid, gid int) {\n\tif fi == nil {\n\t\treturn -1, -1\n\t}\n\tstat, ok := fi.Sys().(*syscall.Stat_t)\n\tif !ok {\n\t\treturn -1, -1\n\t}\n\treturn int(stat.Uid), int(stat.Gid)\n}\n\nfunc fixRootDirectory(p string) string {\n\treturn p\n}\n\n// FsyncDir syncs a directory so a preceding rename within it is durable.\nfunc FsyncDir(path string) error {\n\tdir, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := dir.Sync(); err != nil {\n\t\t_ = dir.Close()\n\t\treturn err\n\t}\n\treturn dir.Close()\n}\n","imports":[{"name":"os","path":"os","span":{"start":[7,1],"end":[7,6],"bytes":[186,191]}},{"name":"syscall","path":"syscall","span":{"start":[8,1],"end":[8,11],"bytes":[192,202]}}],"types":{},"functions":{"github.com/benbjohnson/litestream/internal.Fileinfo":{"id":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo","kind":"function","span":{"start":[12,1],"end":[21,2],"bytes":[265,454]},"signature":"github.com/benbjohnson/litestream/internal.Fileinfo","parameters":[{"name":"fi","type":"os.FileInfo","span":{"start":[12,1],"end":[12,47],"bytes":[265,311]}}],"return_type":"(int, int)","metrics":{"cyclomatic":3},"body":{"16:14":{"kind":"call","span":{"start":[16,14],"end":[16,22],"bytes":[360,368]},"callee":null},"20:24":{"kind":"call","span":{"start":[20,24],"end":[20,37],"bytes":[439,452]},"callee":null},"20:9":{"kind":"call","span":{"start":[20,9],"end":[20,22],"bytes":[424,437]},"callee":null}}},"github.com/benbjohnson/litestream/internal.FsyncDir":{"id":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir","kind":"function","span":{"start":[28,1],"end":[38,2],"bytes":[584,770]},"signature":"github.com/benbjohnson/litestream/internal.FsyncDir","parameters":[{"name":"path","type":"string","span":{"start":[28,1],"end":[28,35],"bytes":[584,618]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"29:14":{"kind":"call","span":{"start":[29,14],"end":[29,27],"bytes":[632,645]},"callee":null},"33:12":{"kind":"call","span":{"start":[33,12],"end":[33,22],"bytes":[690,700]},"callee":null},"34:7":{"kind":"call","span":{"start":[34,7],"end":[34,18],"bytes":[721,732]},"callee":null},"37:9":{"kind":"call","span":{"start":[37,9],"end":[37,20],"bytes":[757,768]},"callee":null}}},"github.com/benbjohnson/litestream/internal.fixRootDirectory":{"id":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.fixRootDirectory","kind":"function","span":{"start":[23,1],"end":[25,2],"bytes":[456,508]},"signature":"github.com/benbjohnson/litestream/internal.fixRootDirectory","parameters":[{"name":"p","type":"string","span":{"start":[23,1],"end":[23,41],"bytes":[456,496]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{}}},"content_hash":"cd90a0b1e0c7f49f8dd99c8818b37ffa3b4d7f8edf3215f0394eda7a0b6c8905"},"internal/limit_read_closer.go":{"id":"can://go/litestream/internal/limit_read_closer.go","kind":"module","span":{"start":[1,1],"end":[30,1],"bytes":[0,558]},"package":"internal","source":"package internal\n\nimport \"io\"\n\n// Copied from the io package to implement io.Closer.\nfunc LimitReadCloser(r io.ReadCloser, n int64) io.ReadCloser {\n\treturn \u0026LimitedReadCloser{r, n}\n}\n\ntype LimitedReadCloser struct {\n\tR io.ReadCloser // underlying reader\n\tN int64 // max bytes remaining\n}\n\nfunc (l *LimitedReadCloser) Close() error {\n\treturn l.R.Close()\n}\n\nfunc (l *LimitedReadCloser) Read(p []byte) (n int, err error) {\n\tif l.N \u003c= 0 {\n\t\treturn 0, io.EOF\n\t}\n\tif int64(len(p)) \u003e l.N {\n\t\tp = p[0:l.N]\n\t}\n\tn, err = l.R.Read(p)\n\tl.N -= int64(n)\n\treturn\n}\n","imports":[{"name":"io","path":"io","span":{"start":[3,1],"end":[3,12],"bytes":[18,29]}}],"types":{"LimitedReadCloser":{"id":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitedReadCloser","kind":"struct","span":{"start":[10,1],"end":[13,2],"bytes":[184,295]},"callables":{"github.com/benbjohnson/litestream/internal.LimitedReadCloser.Close":{"id":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitedReadCloser/github.com/benbjohnson/litestream/internal.LimitedReadCloser.Close","kind":"method","span":{"start":[15,1],"end":[17,2],"bytes":[297,362]},"signature":"github.com/benbjohnson/litestream/internal.LimitedReadCloser.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"16:9":{"kind":"call","span":{"start":[16,9],"end":[16,20],"bytes":[349,360]},"callee":null}}},"github.com/benbjohnson/litestream/internal.LimitedReadCloser.Read":{"id":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitedReadCloser/github.com/benbjohnson/litestream/internal.LimitedReadCloser.Read","kind":"method","span":{"start":[19,1],"end":[29,2],"bytes":[364,557]},"signature":"github.com/benbjohnson/litestream/internal.LimitedReadCloser.Read","parameters":[{"name":"p","type":"[]byte","span":{"start":[19,1],"end":[19,64],"bytes":[364,427]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"23:11":{"kind":"call","span":{"start":[23,11],"end":[23,17],"bytes":[475,481]},"callee":null},"23:5":{"kind":"call","span":{"start":[23,5],"end":[23,18],"bytes":[469,482]},"callee":null},"26:11":{"kind":"call","span":{"start":[26,11],"end":[26,22],"bytes":[519,530]},"callee":null},"27:9":{"kind":"call","span":{"start":[27,9],"end":[27,17],"bytes":[539,547]},"callee":null}}}},"fields":{"N":{"id":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitedReadCloser/N","kind":"field","type":"int64","span":{"start":[12,1],"end":[12,40],"bytes":[254,293]}},"R":{"id":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitedReadCloser/R","kind":"field","type":"io.ReadCloser","span":{"start":[11,1],"end":[11,38],"bytes":[216,253]}}}}},"functions":{"github.com/benbjohnson/litestream/internal.LimitReadCloser":{"id":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser","kind":"function","span":{"start":[6,1],"end":[8,2],"bytes":[85,182]},"signature":"github.com/benbjohnson/litestream/internal.LimitReadCloser","parameters":[{"name":"r","type":"io.ReadCloser","span":{"start":[6,1],"end":[6,63],"bytes":[85,147]}},{"name":"n","type":"int64","span":{"start":[6,1],"end":[6,63],"bytes":[85,147]}}],"return_type":"io.ReadCloser","metrics":{"cyclomatic":1},"body":{}}},"content_hash":"c02d22d6d9369a280aca33bc4e0a77f1ee533201289cb691fc16d304732b75d7"},"internal/lock_unix.go":{"id":"can://go/litestream/internal/lock_unix.go","kind":"module","span":{"start":[1,1],"end":[51,1],"bytes":[0,1085]},"package":"internal","source":"//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris\n\npackage internal\n\nimport (\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tsqlitePendingByte = 0x40000000\n\tsqliteSharedFirst = sqlitePendingByte + 2\n\tsqliteSharedSize = 510\n)\n\nfunc LockFileExclusive(f *os.File) error {\n\tfd := int(f.Fd())\n\n\tif err := setFcntlLock(fd, unix.F_WRLCK, sqlitePendingByte, 1); err != nil {\n\t\treturn err\n\t}\n\n\tif err := setFcntlLock(fd, unix.F_WRLCK, sqliteSharedFirst, sqliteSharedSize); err != nil {\n\t\t_ = setFcntlLock(fd, unix.F_UNLCK, sqlitePendingByte, 1)\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc UnlockFile(f *os.File) error {\n\tfd := int(f.Fd())\n\terr1 := setFcntlLock(fd, unix.F_UNLCK, sqliteSharedFirst, sqliteSharedSize)\n\terr2 := setFcntlLock(fd, unix.F_UNLCK, sqlitePendingByte, 1)\n\tif err1 != nil {\n\t\treturn err1\n\t}\n\treturn err2\n}\n\nfunc setFcntlLock(fd int, lockType int16, start int64, length int64) error {\n\tflock := unix.Flock_t{\n\t\tType: lockType,\n\t\tWhence: 0,\n\t\tStart: start,\n\t\tLen: length,\n\t}\n\treturn unix.FcntlFlock(uintptr(fd), unix.F_SETLKW, \u0026flock)\n}\n","imports":[{"name":"os","path":"os","span":{"start":[6,1],"end":[6,6],"bytes":[118,123]}},{"name":"unix","path":"golang.org/x/sys/unix","span":{"start":[8,1],"end":[8,25],"bytes":[125,149]}}],"types":{},"functions":{"github.com/benbjohnson/litestream/internal.LockFileExclusive":{"id":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.LockFileExclusive","kind":"function","span":{"start":[17,1],"end":[30,2],"bytes":[264,604]},"signature":"github.com/benbjohnson/litestream/internal.LockFileExclusive","parameters":[{"name":"f","type":"*os.File","span":{"start":[17,1],"end":[17,43],"bytes":[264,306]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"18:12":{"kind":"call","span":{"start":[18,12],"end":[18,18],"bytes":[318,324]},"callee":null},"18:8":{"kind":"call","span":{"start":[18,8],"end":[18,19],"bytes":[314,325]},"callee":null},"20:12":{"kind":"call","span":{"start":[20,12],"end":[20,64],"bytes":[338,390]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock"},"24:12":{"kind":"call","span":{"start":[24,12],"end":[24,79],"bytes":[433,500]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock"},"25:7":{"kind":"call","span":{"start":[25,7],"end":[25,59],"bytes":[521,573]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock"}}},"github.com/benbjohnson/litestream/internal.UnlockFile":{"id":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.UnlockFile","kind":"function","span":{"start":[32,1],"end":[40,2],"bytes":[606,849]},"signature":"github.com/benbjohnson/litestream/internal.UnlockFile","parameters":[{"name":"f","type":"*os.File","span":{"start":[32,1],"end":[32,36],"bytes":[606,641]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"33:12":{"kind":"call","span":{"start":[33,12],"end":[33,18],"bytes":[653,659]},"callee":null},"33:8":{"kind":"call","span":{"start":[33,8],"end":[33,19],"bytes":[649,660]},"callee":null},"34:10":{"kind":"call","span":{"start":[34,10],"end":[34,77],"bytes":[670,737]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock"},"35:10":{"kind":"call","span":{"start":[35,10],"end":[35,62],"bytes":[747,799]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock"}}},"github.com/benbjohnson/litestream/internal.setFcntlLock":{"id":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock","kind":"function","span":{"start":[42,1],"end":[50,2],"bytes":[851,1084]},"signature":"github.com/benbjohnson/litestream/internal.setFcntlLock","parameters":[{"name":"fd","type":"int","span":{"start":[42,1],"end":[42,77],"bytes":[851,927]}},{"name":"lockType","type":"int16","span":{"start":[42,1],"end":[42,77],"bytes":[851,927]}},{"name":"start","type":"int64","span":{"start":[42,1],"end":[42,77],"bytes":[851,927]}},{"name":"length","type":"int64","span":{"start":[42,1],"end":[42,77],"bytes":[851,927]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"49:25":{"kind":"call","span":{"start":[49,25],"end":[49,36],"bytes":[1047,1058]},"callee":null},"49:9":{"kind":"call","span":{"start":[49,9],"end":[49,60],"bytes":[1031,1082]},"callee":null}}}},"content_hash":"9d2a4e0444c4721b2c9695b88a883848ac89a7d4f28181ccc72c75ab9e76f491"},"internal/log.go":{"id":"can://go/litestream/internal/log.go","kind":"module","span":{"start":[1,1],"end":[125,1],"bytes":[0,2737]},"package":"internal","source":"package internal\n\nimport (\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"path\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/lmittmann/tint\"\n\t\"github.com/mattn/go-isatty\"\n)\n\nvar modulePrefix string\nvar moduleLastSegment string\n\nfunc init() {\n\tif info, ok := debug.ReadBuildInfo(); ok \u0026\u0026 info.Main.Path != \"\" {\n\t\tmodulePrefix = info.Main.Path + \"/\"\n\t\tmoduleLastSegment = path.Base(info.Main.Path)\n\t}\n}\n\nconst LevelTrace = slog.LevelDebug - 4\n\n// LoggingConfig configures logging.\ntype LoggingConfig struct {\n\tLevel string `yaml:\"level\"`\n\tType string `yaml:\"type\"`\n\tStderr bool `yaml:\"stderr\"`\n\tSource bool `yaml:\"source\"`\n}\n\nfunc InitLog(w io.Writer, level, typ string, addSource bool) {\n\tlogOptions := slog.HandlerOptions{\n\t\tLevel: slog.LevelInfo,\n\t\tAddSource: addSource,\n\t\tReplaceAttr: ReplaceAttr,\n\t}\n\n\t// Read log level from environment, if available.\n\tif v := os.Getenv(\"LOG_LEVEL\"); v != \"\" {\n\t\tlevel = v\n\t}\n\n\tswitch strings.ToUpper(level) {\n\tcase \"TRACE\":\n\t\tlogOptions.Level = LevelTrace\n\tcase \"DEBUG\":\n\t\tlogOptions.Level = slog.LevelDebug\n\tcase \"INFO\":\n\t\tlogOptions.Level = slog.LevelInfo\n\tcase \"WARN\", \"WARNING\":\n\t\tlogOptions.Level = slog.LevelWarn\n\tcase \"ERROR\":\n\t\tlogOptions.Level = slog.LevelError\n\t}\n\n\tvar logHandler slog.Handler\n\tswitch typ {\n\tcase \"json\":\n\t\tlogHandler = slog.NewJSONHandler(w, \u0026logOptions)\n\tcase \"pretty\":\n\t\tnoColor := true\n\t\tif f, ok := w.(*os.File); ok {\n\t\t\tnoColor = !isatty.IsTerminal(f.Fd()) \u0026\u0026 !isatty.IsCygwinTerminal(f.Fd())\n\t\t}\n\t\tlogHandler = tint.NewHandler(w, \u0026tint.Options{\n\t\t\tLevel: logOptions.Level,\n\t\t\tAddSource: addSource,\n\t\t\tTimeFormat: time.TimeOnly,\n\t\t\tNoColor: noColor,\n\t\t\tReplaceAttr: ReplaceAttr,\n\t\t})\n\tcase \"text\", \"\":\n\t\tlogHandler = slog.NewTextHandler(w, \u0026logOptions)\n\t}\n\n\t// Set global default logger.\n\tslog.SetDefault(slog.New(logHandler))\n}\n\nfunc CleanSourcePath(src *slog.Source) {\n\tif modulePrefix == \"\" {\n\t\treturn\n\t}\n\n\tif idx := strings.Index(src.File, modulePrefix); idx \u003e= 0 {\n\t\tsrc.File = src.File[idx+len(modulePrefix):]\n\t\treturn\n\t}\n\n\tmoduleName := strings.TrimSuffix(modulePrefix, \"/\")\n\tif idx := strings.Index(src.File, moduleName+\"@\"); idx \u003e= 0 {\n\t\trest := src.File[idx+len(moduleName):]\n\t\tif slashIdx := strings.Index(rest, \"/\"); slashIdx \u003e= 0 {\n\t\t\tsrc.File = rest[slashIdx+1:]\n\t\t}\n\t\treturn\n\t}\n\n\tif moduleLastSegment != \"\" {\n\t\tsep := \"/\" + moduleLastSegment + \"/\"\n\t\tif idx := strings.LastIndex(src.File, sep); idx \u003e= 0 {\n\t\t\tsrc.File = src.File[idx+len(sep):]\n\t\t}\n\t}\n}\n\nfunc ReplaceAttr(groups []string, a slog.Attr) slog.Attr {\n\tif a.Key == slog.LevelKey \u0026\u0026 a.Value.Any() == LevelTrace {\n\t\ta.Value = slog.StringValue(\"TRACE\")\n\t}\n\n\tif a.Key == slog.SourceKey {\n\t\tif src, ok := a.Value.Any().(*slog.Source); ok {\n\t\t\tCleanSourcePath(src)\n\t\t}\n\t}\n\n\treturn a\n}\n","imports":[{"name":"io","path":"io","span":{"start":[4,1],"end":[4,6],"bytes":[27,32]}},{"name":"slog","path":"log/slog","span":{"start":[5,1],"end":[5,12],"bytes":[33,44]}},{"name":"os","path":"os","span":{"start":[6,1],"end":[6,6],"bytes":[45,50]}},{"name":"path","path":"path","span":{"start":[7,1],"end":[7,8],"bytes":[51,58]}},{"name":"debug","path":"runtime/debug","span":{"start":[8,1],"end":[8,17],"bytes":[59,75]}},{"name":"strings","path":"strings","span":{"start":[9,1],"end":[9,11],"bytes":[76,86]}},{"name":"time","path":"time","span":{"start":[10,1],"end":[10,8],"bytes":[87,94]}},{"name":"tint","path":"github.com/lmittmann/tint","span":{"start":[12,1],"end":[12,29],"bytes":[96,124]}},{"name":"go-isatty","path":"github.com/mattn/go-isatty","span":{"start":[13,1],"end":[13,30],"bytes":[125,154]}}],"types":{"LoggingConfig":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.LoggingConfig","kind":"struct","span":{"start":[29,1],"end":[34,2],"bytes":[463,613]},"callables":{},"fields":{"Level":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.LoggingConfig/Level","kind":"field","type":"string","span":{"start":[30,1],"end":[30,30],"bytes":[491,520]}},"Source":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.LoggingConfig/Source","kind":"field","type":"bool","span":{"start":[33,1],"end":[33,31],"bytes":[581,611]}},"Stderr":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.LoggingConfig/Stderr","kind":"field","type":"bool","span":{"start":[32,1],"end":[32,31],"bytes":[550,580]}},"Type":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.LoggingConfig/Type","kind":"field","type":"string","span":{"start":[31,1],"end":[31,29],"bytes":[521,549]}}}}},"functions":{"github.com/benbjohnson/litestream/internal.CleanSourcePath":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.CleanSourcePath","kind":"function","span":{"start":[85,1],"end":[110,2],"bytes":[1813,2449]},"signature":"github.com/benbjohnson/litestream/internal.CleanSourcePath","parameters":[{"name":"src","type":"*log/slog.Source","span":{"start":[85,1],"end":[85,41],"bytes":[1813,1853]}}],"metrics":{"cyclomatic":7},"body":{"106:13":{"kind":"call","span":{"start":[106,13],"end":[106,45],"bytes":[2358,2390]},"callee":null},"107:28":{"kind":"call","span":{"start":[107,28],"end":[107,36],"bytes":[2430,2438]},"callee":null},"90:12":{"kind":"call","span":{"start":[90,12],"end":[90,49],"bytes":[1903,1940]},"callee":null},"91:27":{"kind":"call","span":{"start":[91,27],"end":[91,44],"bytes":[1979,1996]},"callee":null},"95:16":{"kind":"call","span":{"start":[95,16],"end":[95,53],"bytes":[2027,2064]},"callee":null},"96:12":{"kind":"call","span":{"start":[96,12],"end":[96,51],"bytes":[2076,2115]},"callee":null},"97:24":{"kind":"call","span":{"start":[97,24],"end":[97,39],"bytes":[2151,2166]},"callee":null},"98:18":{"kind":"call","span":{"start":[98,18],"end":[98,42],"bytes":[2186,2210]},"callee":null}}},"github.com/benbjohnson/litestream/internal.InitLog":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","kind":"function","span":{"start":[36,1],"end":[83,2],"bytes":[615,1811]},"signature":"github.com/benbjohnson/litestream/internal.InitLog","parameters":[{"name":"w","type":"io.Writer","span":{"start":[36,1],"end":[36,63],"bytes":[615,677]}},{"name":"level","type":"string","span":{"start":[36,1],"end":[36,63],"bytes":[615,677]}},{"name":"typ","type":"string","span":{"start":[36,1],"end":[36,63],"bytes":[615,677]}},{"name":"addSource","type":"bool","span":{"start":[36,1],"end":[36,63],"bytes":[615,677]}}],"metrics":{"cyclomatic":13},"body":{"44:10":{"kind":"call","span":{"start":[44,10],"end":[44,32],"bytes":[863,885]},"callee":null},"48:9":{"kind":"call","span":{"start":[48,9],"end":[48,31],"bytes":[921,943]},"callee":null},"64:16":{"kind":"call","span":{"start":[64,16],"end":[64,51],"bytes":[1284,1319]},"callee":null},"68:15":{"kind":"call","span":{"start":[68,15],"end":[68,40],"bytes":[1401,1426]},"callee":null},"68:33":{"kind":"call","span":{"start":[68,33],"end":[68,39],"bytes":[1419,1425]},"callee":null},"68:45":{"kind":"call","span":{"start":[68,45],"end":[68,76],"bytes":[1431,1462]},"callee":null},"68:69":{"kind":"call","span":{"start":[68,69],"end":[68,75],"bytes":[1455,1461]},"callee":null},"70:16":{"kind":"call","span":{"start":[70,16],"end":[76,5],"bytes":[1482,1666]},"callee":null},"78:16":{"kind":"call","span":{"start":[78,16],"end":[78,51],"bytes":[1700,1735]},"callee":null},"82:18":{"kind":"call","span":{"start":[82,18],"end":[82,38],"bytes":[1788,1808]},"callee":null},"82:2":{"kind":"call","span":{"start":[82,2],"end":[82,39],"bytes":[1772,1809]},"callee":null}}},"github.com/benbjohnson/litestream/internal.ReplaceAttr":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.ReplaceAttr","kind":"function","span":{"start":[112,1],"end":[124,2],"bytes":[2451,2736]},"signature":"github.com/benbjohnson/litestream/internal.ReplaceAttr","parameters":[{"name":"groups","type":"[]string","span":{"start":[112,1],"end":[112,59],"bytes":[2451,2509]}},{"name":"a","type":"log/slog.Attr","span":{"start":[112,1],"end":[112,59],"bytes":[2451,2509]}}],"return_type":"log/slog.Attr","metrics":{"cyclomatic":4},"body":{"113:31":{"kind":"call","span":{"start":[113,31],"end":[113,44],"bytes":[2540,2553]},"callee":null},"114:13":{"kind":"call","span":{"start":[114,13],"end":[114,38],"bytes":[2582,2607]},"callee":null},"118:17":{"kind":"call","span":{"start":[118,17],"end":[118,30],"bytes":[2658,2671]},"callee":null},"119:4":{"kind":"call","span":{"start":[119,4],"end":[119,24],"bytes":[2696,2716]},"callee":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.CleanSourcePath"}}},"github.com/benbjohnson/litestream/internal.init":{"id":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.init","kind":"function","span":{"start":[19,1],"end":[24,2],"bytes":[212,384]},"signature":"github.com/benbjohnson/litestream/internal.init","parameters":[],"metrics":{"cyclomatic":2},"body":{"20:17":{"kind":"call","span":{"start":[20,17],"end":[20,38],"bytes":[242,263]},"callee":null},"22:23":{"kind":"call","span":{"start":[22,23],"end":[22,48],"bytes":[354,379]},"callee":null}}}},"content_hash":"c9c5547d3de71f196df17f3249b69dfca8c99670203b2b6ef1b287535b67e95a"},"internal/resumable_reader.go":{"id":"can://go/litestream/internal/resumable_reader.go","kind":"module","span":{"start":[1,1],"end":[311,1],"bytes":[0,10457]},"package":"internal","source":"package internal\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/superfly/ltx\"\n)\n\ntype LTXFileOpener interface {\n\tOpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error)\n}\n\n// resumableReader wraps an io.ReadCloser from a remote storage backend with\n// automatic reconnection on read errors.\n//\n// During restore, the LTX compactor opens all LTX file streams upfront, then\n// processes pages in page-number order. Incremental LTX files that only contain\n// high-numbered pages may have their S3/storage streams sit idle for minutes\n// while the compactor works through lower-numbered pages from the snapshot.\n// Storage providers (S3, Tigris, etc.) may close these idle connections,\n// causing \"unexpected EOF\" errors.\n//\n// This reader detects two failure modes:\n// 1. Non-EOF errors (connection reset, timeout) - the stream broke mid-transfer.\n// 2. Premature EOF - the server closed the connection cleanly, but we haven't\n// read all bytes yet (detected by comparing offset against known file size).\n//\n// On failure, it closes the dead stream and reopens from the current byte\n// offset using the storage backend's range request support (the offset parameter\n// of OpenLTXFile). Callers like io.ReadFull see a seamless byte stream because\n// partial reads are returned without error, prompting the caller to request\n// remaining bytes on the next Read call.\ntype ResumableReader struct {\n\tctx context.Context\n\tclient LTXFileOpener\n\tlevel int\n\tminTXID ltx.TXID\n\tmaxTXID ltx.TXID\n\tsize int64 // expected total file size from FileInfo; 0 means unknown\n\toffset int64\n\tretryN int\n\terr error\n\tlogger *slog.Logger\n\n\t// mu guards rc and closed. Close may be called from a different goroutine\n\t// than Read: Compactor.Compact closes its source readers when it returns\n\t// while its compaction goroutine may still be reading them. Once closed is\n\t// set, Read must not reopen the stream or it would leak the new connection.\n\tmu sync.Mutex\n\trc io.ReadCloser\n\tcancel context.CancelFunc\n\tclosed bool\n}\n\n// NewResumableReader creates a ResumableReader. Primarily exposed for testing.\nfunc NewResumableReader(ctx context.Context, client LTXFileOpener, level int, minTXID, maxTXID ltx.TXID, size int64, rc io.ReadCloser, logger *slog.Logger) *ResumableReader {\n\treturn \u0026ResumableReader{\n\t\tctx: ctx,\n\t\tclient: client,\n\t\tlevel: level,\n\t\tminTXID: minTXID,\n\t\tmaxTXID: maxTXID,\n\t\tsize: size,\n\t\trc: rc,\n\t\tlogger: logger,\n\t}\n}\n\nconst resumableReaderMaxRetries = 3\n\n// resumableReaderBackoff is the base delay between retry attempts, doubling\n// per attempt. Zero-delay retries land every attempt inside the same provider\n// throttle window (e.g. Tigris 408 load shedding), guaranteeing exhaustion.\nconst resumableReaderBackoff = 250 * time.Millisecond\n\n// resumableReaderStallTimeout bounds a single Read of an open stream. Nothing\n// else does: the S3 client sets no ResponseHeaderTimeout and no read deadline on\n// the response body, and TCP keepalive does not fire against a peer that is\n// alive but simply sending nothing. It is a var rather than a const only so\n// tests can shorten it.\nvar resumableReaderStallTimeout = 30 * time.Second\n\n// ErrReadStalled reports a read that produced nothing for\n// resumableReaderStallTimeout and had its stream cancelled to force a reconnect.\nvar ErrReadStalled = errors.New(\"ltx stream read stalled\")\n\nfunc (r *ResumableReader) Read(p []byte) (int, error) {\n\tfor {\n\t\trc, cancel, err := r.stream()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif r.err != nil {\n\t\t\treturn 0, r.err\n\t\t}\n\n\t\t// Reopen the stream from the current offset if the previous\n\t\t// connection was closed (the stream is nil after a retry).\n\t\tif rc == nil {\n\t\t\tstreamCtx, streamCancel := context.WithCancel(r.ctx)\n\t\t\tnewRC, err := r.client.OpenLTXFile(streamCtx, r.level, r.minTXID, r.maxTXID, r.offset, 0)\n\t\t\tif err != nil {\n\t\t\t\tstreamCancel()\n\t\t\t\tif errors.Is(err, os.ErrNotExist) || errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {\n\t\t\t\t\treturn 0, fmt.Errorf(\"reopen ltx file at offset %d: %w\", r.offset, err)\n\t\t\t\t}\n\t\t\t\tif ctxErr := r.ctx.Err(); ctxErr != nil {\n\t\t\t\t\tr.err = fmt.Errorf(\"reopen ltx file at offset %d: %v: %w\", r.offset, err, ctxErr)\n\t\t\t\t\treturn 0, r.err\n\t\t\t\t}\n\t\t\t\tif retryErr := r.retry(fmt.Errorf(\"reopen ltx file at offset %d: %w\", r.offset, err)); retryErr != nil {\n\t\t\t\t\treturn 0, retryErr\n\t\t\t\t}\n\t\t\t\tr.logger.Debug(\"reopen ltx file failed, retrying\",\n\t\t\t\t\t\"level\", r.level, \"min\", r.minTXID, \"max\", r.maxTXID,\n\t\t\t\t\t\"offset\", r.offset, \"error\", err, \"attempt\", r.retryN)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !r.setStream(newRC, streamCancel) {\n\t\t\t\t// Closed while the stream was being reopened.\n\t\t\t\tstreamCancel()\n\t\t\t\t_ = newRC.Close()\n\t\t\t\treturn 0, os.ErrClosed\n\t\t\t}\n\t\t\trc, cancel = newRC, streamCancel\n\t\t}\n\n\t\tn, err := r.readStream(rc, cancel, p)\n\t\tr.offset += int64(n)\n\n\t\tif err == nil {\n\t\t\tif n \u003e 0 \u0026\u0026 n == len(p) {\n\t\t\t\tr.retryN = 0\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\n\t\tif err == io.EOF {\n\t\t\t// Distinguish legitimate EOF (fully read) from premature EOF\n\t\t\t// (server closed idle connection). When the file size is known\n\t\t\t// and we haven't read it all, treat as a connection drop.\n\t\t\tif r.size \u003e 0 \u0026\u0026 r.offset \u003c r.size {\n\t\t\t\tr.logger.Debug(\"premature EOF on ltx file, reconnecting\",\n\t\t\t\t\t\"level\", r.level, \"min\", r.minTXID, \"max\", r.maxTXID,\n\t\t\t\t\t\"offset\", r.offset, \"size\", r.size, \"attempt\", r.retryN+1)\n\t\t\t\tr.dropStream()\n\t\t\t\tif retryErr := r.retry(io.ErrUnexpectedEOF); retryErr != nil {\n\t\t\t\t\treturn n, retryErr\n\t\t\t\t}\n\t\t\t\tif n \u003e 0 {\n\t\t\t\t\t// Return the bytes we did get. The caller (e.g. io.ReadFull)\n\t\t\t\t\t// will call Read again, which will trigger the reopen above.\n\t\t\t\t\treturn n, nil\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn n, io.EOF\n\t\t}\n\n\t\t// Non-EOF error (connection reset, timeout, etc.). Close the dead\n\t\t// stream so the next iteration reopens from the current offset.\n\t\tr.logger.Debug(\"read error on ltx file, reconnecting\",\n\t\t\t\"level\", r.level, \"min\", r.minTXID, \"max\", r.maxTXID,\n\t\t\t\"error\", err, \"offset\", r.offset, \"attempt\", r.retryN+1)\n\t\tr.dropStream()\n\t\tif retryErr := r.retry(err); retryErr != nil {\n\t\t\treturn n, retryErr\n\t\t}\n\t\tif n \u003e 0 {\n\t\t\treturn n, nil\n\t\t}\n\t}\n}\n\n// readStream reads from the current stream under a stall timeout. A read that\n// produces nothing before the timeout expires has its stream's request context\n// cancelled, which unblocks the read with an error and sends the caller down the\n// reconnect path that already handles a dropped connection.\n//\n// Cancellation rather than Close: net/http's (*body).Read holds the body mutex\n// for the duration of the network read and (*body).Close wants that same mutex,\n// so a watchdog calling Close would queue behind the very read it is trying to\n// interrupt. Only the request context reaches a parked read.\nfunc (r *ResumableReader) readStream(rc io.ReadCloser, cancel context.CancelFunc, p []byte) (int, error) {\n\t// Captured per stream: by the time the timer fires, r.cancel may already\n\t// belong to a healthy replacement, and cancelling that one would be a\n\t// self-inflicted drop.\n\ttimeout, offset := resumableReaderStallTimeout, r.offset\n\tif cancel == nil || timeout \u003c= 0 {\n\t\treturn rc.Read(p)\n\t}\n\n\tvar stalled atomic.Bool\n\ttimer := time.AfterFunc(timeout, func() {\n\t\tstalled.Store(true)\n\t\tr.logger.Debug(\"ltx file read stalled, cancelling stream\",\n\t\t\t\"level\", r.level, \"min\", r.minTXID, \"max\", r.maxTXID,\n\t\t\t\"offset\", offset, \"timeout\", timeout)\n\t\tcancel()\n\t})\n\tdefer timer.Stop()\n\n\tn, err := rc.Read(p)\n\tif err != nil \u0026\u0026 stalled.Load() {\n\t\t// %v, not %w: the underlying error is context.Canceled, and a stall is\n\t\t// retryable where a cancelled parent context is terminal. Letting\n\t\t// context.Canceled into the chain invites an errors.Is check above to\n\t\t// abandon a restore that only needed to reconnect.\n\t\terr = fmt.Errorf(\"%w after %s: %v\", ErrReadStalled, timeout, err)\n\t}\n\treturn n, err\n}\n\n// Close closes the current underlying stream, if any, and marks the reader as\n// closed. Closing is permanent: subsequent reads fail with os.ErrClosed rather\n// than reopening the remote stream, which would leak the new connection.\nfunc (r *ResumableReader) Close() error {\n\tr.mu.Lock()\n\tif r.closed {\n\t\tr.mu.Unlock()\n\t\treturn nil\n\t}\n\tr.closed = true\n\trc, cancel := r.rc, r.cancel\n\tr.rc, r.cancel = nil, nil\n\tr.mu.Unlock()\n\n\tif cancel != nil {\n\t\tcancel()\n\t}\n\tif rc != nil {\n\t\treturn rc.Close()\n\t}\n\treturn nil\n}\n\n// stream returns the current underlying stream, or nil if the next read should\n// reopen it. Returns os.ErrClosed if the reader has been closed.\nfunc (r *ResumableReader) stream() (io.ReadCloser, context.CancelFunc, error) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.closed {\n\t\treturn nil, nil, os.ErrClosed\n\t}\n\treturn r.rc, r.cancel, nil\n}\n\n// setStream installs a newly reopened stream. It reports false if the reader\n// was closed while the stream was being opened, in which case the caller must\n// close the new stream itself.\nfunc (r *ResumableReader) setStream(rc io.ReadCloser, cancel context.CancelFunc) bool {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.closed {\n\t\treturn false\n\t}\n\tr.rc, r.cancel = rc, cancel\n\treturn true\n}\n\n// dropStream closes and clears the current stream after a read failure so the\n// next read reopens from the current offset. The stream is already being\n// discarded, so a close error should not stop recovery. Log it only to aid\n// debugging.\nfunc (r *ResumableReader) dropStream() {\n\tr.mu.Lock()\n\trc, cancel := r.rc, r.cancel\n\tr.rc, r.cancel = nil, nil\n\tr.mu.Unlock()\n\n\tif cancel != nil {\n\t\tcancel()\n\t}\n\tif rc == nil {\n\t\treturn\n\t}\n\tif err := rc.Close(); err != nil {\n\t\tr.logger.Debug(\"close ltx file\",\n\t\t\t\"level\", r.level, \"min\", r.minTXID, \"max\", r.maxTXID,\n\t\t\t\"offset\", r.offset, \"error\", err)\n\t}\n}\n\nfunc (r *ResumableReader) retry(err error) error {\n\tr.retryN++\n\tif r.retryN \u003e resumableReaderMaxRetries {\n\t\tr.err = fmt.Errorf(\"max retries exceeded reading ltx file (level=%d, min=%s, max=%s, offset=%d): %w\",\n\t\t\tr.level, r.minTXID, r.maxTXID, r.offset, err)\n\t\treturn r.err\n\t}\n\n\t// Wait before the caller reopens. Retrying with no delay lands every\n\t// attempt inside the same provider throttle window, so the attempts are\n\t// spent without the provider ever getting a chance to recover.\n\tselect {\n\tcase \u003c-r.ctx.Done():\n\t\tr.err = r.ctx.Err()\n\t\treturn r.err\n\tcase \u003c-time.After(resumableReaderBackoff \u003c\u003c (r.retryN - 1)):\n\t}\n\treturn nil\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[27,37]}},{"name":"errors","path":"errors","span":{"start":[5,1],"end":[5,10],"bytes":[38,47]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[48,54]}},{"name":"io","path":"io","span":{"start":[7,1],"end":[7,6],"bytes":[55,60]}},{"name":"slog","path":"log/slog","span":{"start":[8,1],"end":[8,12],"bytes":[61,72]}},{"name":"os","path":"os","span":{"start":[9,1],"end":[9,6],"bytes":[73,78]}},{"name":"sync","path":"sync","span":{"start":[10,1],"end":[10,8],"bytes":[79,86]}},{"name":"atomic","path":"sync/atomic","span":{"start":[11,1],"end":[11,15],"bytes":[87,101]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[102,109]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[14,1],"end":[14,27],"bytes":[111,137]}}],"types":{"LTXFileOpener":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.LTXFileOpener","kind":"interface","span":{"start":[17,1],"end":[19,2],"bytes":[141,288]},"callables":{"github.com/benbjohnson/litestream/internal.LTXFileOpener.OpenLTXFile":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.LTXFileOpener/github.com/benbjohnson/litestream/internal.LTXFileOpener.OpenLTXFile","kind":"method","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]},"signature":"github.com/benbjohnson/litestream/internal.LTXFileOpener.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]}},{"name":"level","type":"int","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]}},{"name":"offset","type":"int64","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]}},{"name":"size","type":"int64","span":{"start":[18,1],"end":[18,115],"bytes":[172,286]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"body":{}}}},"ResumableReader":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader","kind":"struct","span":{"start":[41,1],"end":[61,2],"bytes":[1485,2140]},"callables":{"github.com/benbjohnson/litestream/internal.ResumableReader.Close":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Close","kind":"method","span":{"start":[225,1],"end":[243,2],"bytes":[8208,8486]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"226:2":{"kind":"call","span":{"start":[226,2],"end":[226,13],"bytes":[8251,8262]},"callee":null},"228:3":{"kind":"call","span":{"start":[228,3],"end":[228,16],"bytes":[8280,8293]},"callee":null},"234:2":{"kind":"call","span":{"start":[234,2],"end":[234,15],"bytes":[8385,8398]},"callee":null},"237:3":{"kind":"call","span":{"start":[237,3],"end":[237,11],"bytes":[8422,8430]},"callee":null},"240:10":{"kind":"call","span":{"start":[240,10],"end":[240,20],"bytes":[8459,8469]},"callee":null}}},"github.com/benbjohnson/litestream/internal.ResumableReader.Read":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","kind":"method","span":{"start":[95,1],"end":[181,2],"bytes":[3491,6267]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.Read","parameters":[{"name":"p","type":"[]byte","span":{"start":[95,1],"end":[95,56],"bytes":[3491,3546]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":18},"body":{"108:31":{"kind":"call","span":{"start":[108,31],"end":[108,56],"bytes":[3841,3866]},"callee":null},"109:18":{"kind":"call","span":{"start":[109,18],"end":[109,93],"bytes":[3884,3959]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.LTXFileOpener/github.com/benbjohnson/litestream/internal.LTXFileOpener.OpenLTXFile"},"111:5":{"kind":"call","span":{"start":[111,5],"end":[111,19],"bytes":[3983,3997]},"callee":null},"112:42":{"kind":"call","span":{"start":[112,42],"end":[112,74],"bytes":[4039,4071]},"callee":null},"112:78":{"kind":"call","span":{"start":[112,78],"end":[112,118],"bytes":[4075,4115]},"callee":null},"112:8":{"kind":"call","span":{"start":[112,8],"end":[112,38],"bytes":[4005,4035]},"callee":null},"113:16":{"kind":"call","span":{"start":[113,16],"end":[113,77],"bytes":[4133,4194]},"callee":null},"115:18":{"kind":"call","span":{"start":[115,18],"end":[115,29],"bytes":[4218,4229]},"callee":null},"116:14":{"kind":"call","span":{"start":[116,14],"end":[116,87],"bytes":[4260,4333]},"callee":null},"119:20":{"kind":"call","span":{"start":[119,20],"end":[119,90],"bytes":[4380,4450]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.retry"},"119:28":{"kind":"call","span":{"start":[119,28],"end":[119,89],"bytes":[4388,4449]},"callee":null},"122:5":{"kind":"call","span":{"start":[122,5],"end":[124,60],"bytes":[4504,4673]},"callee":null},"127:8":{"kind":"call","span":{"start":[127,8],"end":[127,40],"bytes":[4699,4731]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.setStream"},"129:5":{"kind":"call","span":{"start":[129,5],"end":[129,19],"bytes":[4789,4803]},"callee":null},"130:9":{"kind":"call","span":{"start":[130,9],"end":[130,22],"bytes":[4812,4825]},"callee":null},"136:13":{"kind":"call","span":{"start":[136,13],"end":[136,40],"bytes":[4911,4938]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.readStream"},"137:15":{"kind":"call","span":{"start":[137,15],"end":[137,23],"bytes":[4953,4961]},"callee":null},"140:21":{"kind":"call","span":{"start":[140,21],"end":[140,27],"bytes":[5001,5007]},"callee":null},"151:5":{"kind":"call","span":{"start":[151,5],"end":[153,64],"bytes":[5313,5493]},"callee":null},"154:5":{"kind":"call","span":{"start":[154,5],"end":[154,19],"bytes":[5498,5512]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.dropStream"},"155:20":{"kind":"call","span":{"start":[155,20],"end":[155,48],"bytes":[5532,5560]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.retry"},"170:3":{"kind":"call","span":{"start":[170,3],"end":[172,60],"bytes":[5965,6136]},"callee":null},"173:3":{"kind":"call","span":{"start":[173,3],"end":[173,17],"bytes":[6139,6153]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.dropStream"},"174:18":{"kind":"call","span":{"start":[174,18],"end":[174,30],"bytes":[6171,6183]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.retry"},"97:22":{"kind":"call","span":{"start":[97,22],"end":[97,32],"bytes":[3575,3585]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.stream"}}},"github.com/benbjohnson/litestream/internal.ResumableReader.dropStream":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.dropStream","kind":"method","span":{"start":[273,1],"end":[290,2],"bytes":[9461,9819]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.dropStream","parameters":[],"metrics":{"cyclomatic":4},"body":{"274:2":{"kind":"call","span":{"start":[274,2],"end":[274,13],"bytes":[9503,9514]},"callee":null},"277:2":{"kind":"call","span":{"start":[277,2],"end":[277,15],"bytes":[9573,9586]},"callee":null},"280:3":{"kind":"call","span":{"start":[280,3],"end":[280,11],"bytes":[9610,9618]},"callee":null},"285:12":{"kind":"call","span":{"start":[285,12],"end":[285,22],"bytes":[9661,9671]},"callee":null},"286:3":{"kind":"call","span":{"start":[286,3],"end":[288,37],"bytes":[9688,9814]},"callee":null}}},"github.com/benbjohnson/litestream/internal.ResumableReader.readStream":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.readStream","kind":"method","span":{"start":[192,1],"end":[220,2],"bytes":[6877,7973]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.readStream","parameters":[{"name":"rc","type":"io.ReadCloser","span":{"start":[192,1],"end":[192,107],"bytes":[6877,6983]}},{"name":"cancel","type":"context.CancelFunc","span":{"start":[192,1],"end":[192,107],"bytes":[6877,6983]}},{"name":"p","type":"[]byte","span":{"start":[192,1],"end":[192,107],"bytes":[6877,6983]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"198:10":{"kind":"call","span":{"start":[198,10],"end":[198,20],"bytes":[7259,7269]},"callee":null},"202:11":{"kind":"call","span":{"start":[202,11],"end":[208,4],"bytes":[7309,7537]},"callee":null},"209:8":{"kind":"call","span":{"start":[209,8],"end":[209,20],"bytes":[7545,7557]},"callee":null},"211:12":{"kind":"call","span":{"start":[211,12],"end":[211,22],"bytes":[7570,7580]},"callee":null},"212:19":{"kind":"call","span":{"start":[212,19],"end":[212,33],"bytes":[7599,7613]},"callee":null},"217:9":{"kind":"call","span":{"start":[217,9],"end":[217,68],"bytes":[7894,7953]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.readStream/github.com/benbjohnson/litestream/internal.ResumableReader.readStream.closure_1","kind":"function","span":{"start":[202,1],"end":[208,4],"bytes":[7299,7537]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.readStream.closure_1","parameters":[],"body":{"203:3":{"kind":"call","span":{"start":[203,3],"end":[203,22],"bytes":[7344,7363]},"callee":null},"204:3":{"kind":"call","span":{"start":[204,3],"end":[206,41],"bytes":[7366,7522]},"callee":null},"207:3":{"kind":"call","span":{"start":[207,3],"end":[207,11],"bytes":[7525,7533]},"callee":null}}}}},"github.com/benbjohnson/litestream/internal.ResumableReader.retry":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.retry","kind":"method","span":{"start":[292,1],"end":[310,2],"bytes":[9821,10456]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.retry","parameters":[{"name":"err","type":"error","span":{"start":[292,1],"end":[292,51],"bytes":[9821,9871]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"295:11":{"kind":"call","span":{"start":[295,11],"end":[296,49],"bytes":[9937,10079]},"callee":null},"304:9":{"kind":"call","span":{"start":[304,9],"end":[304,21],"bytes":[10327,10339]},"callee":null},"305:11":{"kind":"call","span":{"start":[305,11],"end":[305,22],"bytes":[10351,10362]},"callee":null},"307:9":{"kind":"call","span":{"start":[307,9],"end":[307,61],"bytes":[10386,10438]},"callee":null}}},"github.com/benbjohnson/litestream/internal.ResumableReader.setStream":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.setStream","kind":"method","span":{"start":[259,1],"end":[267,2],"bytes":[9018,9216]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.setStream","parameters":[{"name":"rc","type":"io.ReadCloser","span":{"start":[259,1],"end":[259,88],"bytes":[9018,9105]}},{"name":"cancel","type":"context.CancelFunc","span":{"start":[259,1],"end":[259,88],"bytes":[9018,9105]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"260:2":{"kind":"call","span":{"start":[260,2],"end":[260,13],"bytes":[9107,9118]},"callee":null},"261:8":{"kind":"call","span":{"start":[261,8],"end":[261,21],"bytes":[9126,9139]},"callee":null}}},"github.com/benbjohnson/litestream/internal.ResumableReader.stream":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.stream","kind":"method","span":{"start":[247,1],"end":[254,2],"bytes":[8634,8827]},"signature":"github.com/benbjohnson/litestream/internal.ResumableReader.stream","parameters":[],"return_type":"(io.ReadCloser, context.CancelFunc, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"248:2":{"kind":"call","span":{"start":[248,2],"end":[248,13],"bytes":[8715,8726]},"callee":null},"249:8":{"kind":"call","span":{"start":[249,8],"end":[249,21],"bytes":[8734,8747]},"callee":null}}}},"fields":{"cancel":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/cancel","kind":"field","type":"context.CancelFunc","span":{"start":[59,1],"end":[59,27],"bytes":[2099,2125]}},"client":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/client","kind":"field","type":"github.com/benbjohnson/litestream/internal.LTXFileOpener","span":{"start":[43,1],"end":[43,23],"bytes":[1540,1562]}},"closed":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/closed","kind":"field","type":"bool","span":{"start":[60,1],"end":[60,13],"bytes":[2126,2138]}},"ctx":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/ctx","kind":"field","type":"context.Context","span":{"start":[42,1],"end":[42,25],"bytes":[1515,1539]}},"err":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/err","kind":"field","type":"error","span":{"start":[50,1],"end":[50,15],"bytes":[1714,1728]}},"level":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/level","kind":"field","type":"int","span":{"start":[44,1],"end":[44,13],"bytes":[1563,1575]}},"logger":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[51,1],"end":[51,22],"bytes":[1729,1750]}},"maxTXID":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/maxTXID","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[46,1],"end":[46,18],"bytes":[1594,1611]}},"minTXID":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/minTXID","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[45,1],"end":[45,18],"bytes":[1576,1593]}},"mu":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/mu","kind":"field","type":"sync.Mutex","span":{"start":[57,1],"end":[57,19],"bytes":[2058,2076]}},"offset":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/offset","kind":"field","type":"int64","span":{"start":[48,1],"end":[48,15],"bytes":[1686,1700]}},"rc":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/rc","kind":"field","type":"io.ReadCloser","span":{"start":[58,1],"end":[58,22],"bytes":[2077,2098]}},"retryN":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/retryN","kind":"field","type":"int","span":{"start":[49,1],"end":[49,13],"bytes":[1701,1713]}},"size":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/size","kind":"field","type":"int64","span":{"start":[47,1],"end":[47,74],"bytes":[1612,1685]}}}}},"functions":{"github.com/benbjohnson/litestream/internal.NewResumableReader":{"id":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.NewResumableReader","kind":"function","span":{"start":[64,1],"end":[75,2],"bytes":[2222,2571]},"signature":"github.com/benbjohnson/litestream/internal.NewResumableReader","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"client","type":"github.com/benbjohnson/litestream/internal.LTXFileOpener","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"level","type":"int","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"size","type":"int64","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"rc","type":"io.ReadCloser","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}},{"name":"logger","type":"*log/slog.Logger","span":{"start":[64,1],"end":[64,175],"bytes":[2222,2396]}}],"return_type":"*github.com/benbjohnson/litestream/internal.ResumableReader","metrics":{"cyclomatic":1},"body":{}}},"content_hash":"fa33ef78e5f66fb580013297d9d6f83b89578cdc31f5c6f77ab5322525ad28aa"},"internal/testingutil/testingutil.go":{"id":"can://go/litestream/internal/testingutil/testingutil.go","kind":"module","span":{"start":[1,1],"end":[525,1],"bytes":[0,16630]},"package":"testingutil","source":"package testingutil\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"math/rand/v2\"\n\t\"net\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n\n\tsftpserver \"github.com/pkg/sftp\"\n\t\"golang.org/x/crypto/ssh\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/abs\"\n\t\"github.com/benbjohnson/litestream/file\"\n\t\"github.com/benbjohnson/litestream/gs\"\n\t\"github.com/benbjohnson/litestream/internal\"\n\t\"github.com/benbjohnson/litestream/nats\"\n\t\"github.com/benbjohnson/litestream/oss\"\n\t\"github.com/benbjohnson/litestream/s3\"\n\t\"github.com/benbjohnson/litestream/sftp\"\n\t\"github.com/benbjohnson/litestream/webdav\"\n)\n\nconst (\n\tdefaultTigrisEndpoint = \"https://fly.storage.tigris.dev\"\n\tdefaultTigrisRegion = \"auto\"\n\tdefaultTigrisBucket = \"litestream-dev\"\n\tdefaultTigrisPathRoot = \"integration-tests\"\n)\n\nvar (\n\t// Enables integration tests.\n\tintegration = flag.Bool(\"integration\", false, \"\")\n\t// Enables specific types of replicas to be tested.\n\treplicaClientTypes = flag.String(\"replica-clients\", \"file\", \"\")\n\t// Sets the log level for the tests.\n\tlogLevel = flag.String(\"log.level\", \"debug\", \"\")\n)\n\n// S3 settings\nvar (\n\t// Replica client settings\n\ts3AccessKeyID = flag.String(\"s3-access-key-id\", os.Getenv(\"LITESTREAM_S3_ACCESS_KEY_ID\"), \"\")\n\ts3SecretAccessKey = flag.String(\"s3-secret-access-key\", os.Getenv(\"LITESTREAM_S3_SECRET_ACCESS_KEY\"), \"\")\n\ts3Region = flag.String(\"s3-region\", os.Getenv(\"LITESTREAM_S3_REGION\"), \"\")\n\ts3Bucket = flag.String(\"s3-bucket\", os.Getenv(\"LITESTREAM_S3_BUCKET\"), \"\")\n\ts3Path = flag.String(\"s3-path\", os.Getenv(\"LITESTREAM_S3_PATH\"), \"\")\n\ts3Endpoint = flag.String(\"s3-endpoint\", os.Getenv(\"LITESTREAM_S3_ENDPOINT\"), \"\")\n\ts3ForcePathStyle = flag.Bool(\"s3-force-path-style\", os.Getenv(\"LITESTREAM_S3_FORCE_PATH_STYLE\") == \"true\", \"\")\n\ts3SkipVerify = flag.Bool(\"s3-skip-verify\", os.Getenv(\"LITESTREAM_S3_SKIP_VERIFY\") == \"true\", \"\")\n)\n\n// Tigris settings (S3-compatible)\nvar (\n\ttigrisAccessKeyID = flag.String(\"tigris-access-key-id\", os.Getenv(\"LITESTREAM_TIGRIS_ACCESS_KEY_ID\"), \"\")\n\ttigrisSecretAccessKey = flag.String(\"tigris-secret-access-key\", os.Getenv(\"LITESTREAM_TIGRIS_SECRET_ACCESS_KEY\"), \"\")\n)\n\n// Cloudflare R2 settings (S3-compatible)\nvar (\n\tr2AccessKeyID = flag.String(\"r2-access-key-id\", os.Getenv(\"LITESTREAM_R2_ACCESS_KEY_ID\"), \"\")\n\tr2SecretAccessKey = flag.String(\"r2-secret-access-key\", os.Getenv(\"LITESTREAM_R2_SECRET_ACCESS_KEY\"), \"\")\n\tr2Endpoint = flag.String(\"r2-endpoint\", os.Getenv(\"LITESTREAM_R2_ENDPOINT\"), \"\")\n\tr2Bucket = flag.String(\"r2-bucket\", os.Getenv(\"LITESTREAM_R2_BUCKET\"), \"\")\n)\n\n// Backblaze B2 settings (S3-compatible)\nvar (\n\tb2KeyID = flag.String(\"b2-key-id\", os.Getenv(\"LITESTREAM_B2_KEY_ID\"), \"\")\n\tb2ApplicationKey = flag.String(\"b2-application-key\", os.Getenv(\"LITESTREAM_B2_APPLICATION_KEY\"), \"\")\n\tb2Endpoint = flag.String(\"b2-endpoint\", os.Getenv(\"LITESTREAM_B2_ENDPOINT\"), \"\")\n\tb2Bucket = flag.String(\"b2-bucket\", os.Getenv(\"LITESTREAM_B2_BUCKET\"), \"\")\n)\n\n// Google cloud storage settings\nvar (\n\tgsBucket = flag.String(\"gs-bucket\", os.Getenv(\"LITESTREAM_GS_BUCKET\"), \"\")\n\tgsPath = flag.String(\"gs-path\", os.Getenv(\"LITESTREAM_GS_PATH\"), \"\")\n)\n\n// Azure blob storage settings\nvar (\n\tabsAccountName = flag.String(\"abs-account-name\", os.Getenv(\"LITESTREAM_ABS_ACCOUNT_NAME\"), \"\")\n\tabsAccountKey = flag.String(\"abs-account-key\", os.Getenv(\"LITESTREAM_ABS_ACCOUNT_KEY\"), \"\")\n\tabsSASToken = flag.String(\"abs-sas-token\", os.Getenv(\"LITESTREAM_ABS_SAS_TOKEN\"), \"\")\n\tabsBucket = flag.String(\"abs-bucket\", os.Getenv(\"LITESTREAM_ABS_BUCKET\"), \"\")\n\tabsPath = flag.String(\"abs-path\", os.Getenv(\"LITESTREAM_ABS_PATH\"), \"\")\n)\n\n// SFTP settings\nvar (\n\tsftpHost = flag.String(\"sftp-host\", os.Getenv(\"LITESTREAM_SFTP_HOST\"), \"\")\n\tsftpUser = flag.String(\"sftp-user\", os.Getenv(\"LITESTREAM_SFTP_USER\"), \"\")\n\tsftpPassword = flag.String(\"sftp-password\", os.Getenv(\"LITESTREAM_SFTP_PASSWORD\"), \"\")\n\tsftpKeyPath = flag.String(\"sftp-key-path\", os.Getenv(\"LITESTREAM_SFTP_KEY_PATH\"), \"\")\n\tsftpPath = flag.String(\"sftp-path\", os.Getenv(\"LITESTREAM_SFTP_PATH\"), \"\")\n)\n\n// WebDAV settings\nvar (\n\twebdavURL = flag.String(\"webdav-url\", os.Getenv(\"LITESTREAM_WEBDAV_URL\"), \"\")\n\twebdavUsername = flag.String(\"webdav-username\", os.Getenv(\"LITESTREAM_WEBDAV_USERNAME\"), \"\")\n\twebdavPassword = flag.String(\"webdav-password\", os.Getenv(\"LITESTREAM_WEBDAV_PASSWORD\"), \"\")\n\twebdavPath = flag.String(\"webdav-path\", os.Getenv(\"LITESTREAM_WEBDAV_PATH\"), \"\")\n)\n\n// NATS settings\nvar (\n\tnatsURL = flag.String(\"nats-url\", os.Getenv(\"LITESTREAM_NATS_URL\"), \"\")\n\tnatsBucket = flag.String(\"nats-bucket\", os.Getenv(\"LITESTREAM_NATS_BUCKET\"), \"\")\n\tnatsCreds = flag.String(\"nats-creds\", os.Getenv(\"LITESTREAM_NATS_CREDS\"), \"\")\n\tnatsUsername = flag.String(\"nats-username\", os.Getenv(\"LITESTREAM_NATS_USERNAME\"), \"\")\n\tnatsPassword = flag.String(\"nats-password\", os.Getenv(\"LITESTREAM_NATS_PASSWORD\"), \"\")\n)\n\n// Alibaba Cloud OSS settings\nvar (\n\tossAccessKeyID = flag.String(\"oss-access-key-id\", os.Getenv(\"LITESTREAM_OSS_ACCESS_KEY_ID\"), \"\")\n\tossAccessKeySecret = flag.String(\"oss-access-key-secret\", os.Getenv(\"LITESTREAM_OSS_ACCESS_KEY_SECRET\"), \"\")\n\tossRegion = flag.String(\"oss-region\", os.Getenv(\"LITESTREAM_OSS_REGION\"), \"\")\n\tossBucket = flag.String(\"oss-bucket\", os.Getenv(\"LITESTREAM_OSS_BUCKET\"), \"\")\n\tossPath = flag.String(\"oss-path\", os.Getenv(\"LITESTREAM_OSS_PATH\"), \"\")\n\tossEndpoint = flag.String(\"oss-endpoint\", os.Getenv(\"LITESTREAM_OSS_ENDPOINT\"), \"\")\n)\n\nfunc Integration() bool {\n\treturn *integration\n}\n\nfunc ReplicaClientTypes() []string {\n\treturn strings.Split(*replicaClientTypes, \",\")\n}\n\nfunc NewDB(tb testing.TB, path string) *litestream.DB {\n\ttb.Helper()\n\ttb.Logf(\"db=%s\", path)\n\n\tlevel := slog.LevelDebug\n\tif strings.EqualFold(*logLevel, \"trace\") {\n\t\tlevel = internal.LevelTrace\n\t}\n\n\tdb := litestream.NewDB(path)\n\tdb.Logger = slog.New(slog.NewTextHandler(os.Stdout, \u0026slog.HandlerOptions{\n\t\tLevel: level,\n\t\tReplaceAttr: internal.ReplaceAttr,\n\t}))\n\treturn db\n}\n\n// MustOpenDBs returns a new instance of a DB \u0026 associated SQL DB.\nfunc MustOpenDBs(tb testing.TB) (*litestream.DB, *sql.DB) {\n\ttb.Helper()\n\tdb := MustOpenDB(tb)\n\treturn db, MustOpenSQLDB(tb, db.Path())\n}\n\n// MustCloseDBs closes db \u0026 sqldb and removes the parent directory.\nfunc MustCloseDBs(tb testing.TB, db *litestream.DB, sqldb *sql.DB) {\n\ttb.Helper()\n\tMustCloseDB(tb, db)\n\tMustCloseSQLDB(tb, sqldb)\n}\n\n// MustOpenDB returns a new instance of a DB.\nfunc MustOpenDB(tb testing.TB) *litestream.DB {\n\ttb.Helper()\n\tdir := tb.TempDir()\n\treturn MustOpenDBAt(tb, filepath.Join(dir, \"db\"))\n}\n\n// MustOpenDBAt returns a new instance of a DB for a given path.\nfunc MustOpenDBAt(tb testing.TB, path string) *litestream.DB {\n\ttb.Helper()\n\tdb := NewDB(tb, path)\n\tdb.MonitorInterval = 0 // disable background goroutine\n\tdb.ShutdownSyncTimeout = 0 // disable shutdown sync retry for faster tests\n\tdb.Replica = litestream.NewReplica(db)\n\tdb.Replica.Client = NewFileReplicaClient(tb)\n\tdb.Replica.MonitorEnabled = false // disable background goroutine\n\tif err := db.Open(); err != nil {\n\t\ttb.Fatal(err)\n\t}\n\treturn db\n}\n\n// MustCloseDB closes db and removes its parent directory.\nfunc MustCloseDB(tb testing.TB, db *litestream.DB) {\n\ttb.Helper()\n\tif err := db.Close(context.Background()); err != nil \u0026\u0026 !strings.Contains(err.Error(), `database is closed`) \u0026\u0026 !strings.Contains(err.Error(), `file already closed`) {\n\t\ttb.Fatal(err)\n\t} else if err := os.RemoveAll(filepath.Dir(db.Path())); err != nil {\n\t\ttb.Fatal(err)\n\t}\n}\n\n// MustOpenSQLDB returns a database/sql DB.\nfunc MustOpenSQLDB(tb testing.TB, path string) *sql.DB {\n\ttb.Helper()\n\td, err := sql.Open(\"sqlite\", path)\n\tif err != nil {\n\t\ttb.Fatal(err)\n\t} else if _, err := d.ExecContext(context.Background(), `PRAGMA journal_mode = wal;`); err != nil {\n\t\ttb.Fatal(err)\n\t} else if _, err := d.ExecContext(context.Background(), `PRAGMA busy_timeout = 5000;`); err != nil {\n\t\ttb.Fatal(err)\n\t}\n\treturn d\n}\n\n// MustCloseSQLDB closes a database/sql DB.\nfunc MustCloseSQLDB(tb testing.TB, d *sql.DB) {\n\ttb.Helper()\n\tif err := d.Close(); err != nil {\n\t\ttb.Fatal(err)\n\t}\n}\n\n// NewReplicaClient returns a new client for integration testing by type name.\nfunc NewReplicaClient(tb testing.TB, typ string) litestream.ReplicaClient {\n\ttb.Helper()\n\n\tswitch typ {\n\tcase file.ReplicaClientType:\n\t\treturn NewFileReplicaClient(tb)\n\tcase s3.ReplicaClientType:\n\t\treturn NewS3ReplicaClient(tb)\n\tcase gs.ReplicaClientType:\n\t\treturn NewGSReplicaClient(tb)\n\tcase abs.ReplicaClientType:\n\t\treturn NewABSReplicaClient(tb)\n\tcase sftp.ReplicaClientType:\n\t\treturn NewSFTPReplicaClient(tb)\n\tcase webdav.ReplicaClientType:\n\t\treturn NewWebDAVReplicaClient(tb)\n\tcase nats.ReplicaClientType:\n\t\treturn NewNATSReplicaClient(tb)\n\tcase oss.ReplicaClientType:\n\t\treturn NewOSSReplicaClient(tb)\n\tcase \"tigris\":\n\t\treturn NewTigrisReplicaClient(tb)\n\tcase \"r2\":\n\t\treturn NewR2ReplicaClient(tb)\n\tcase \"b2\":\n\t\treturn NewB2ReplicaClient(tb)\n\tdefault:\n\t\ttb.Fatalf(\"invalid replica client type: %q\", typ)\n\t\treturn nil\n\t}\n}\n\n// NewFileReplicaClient returns a new client for integration testing.\nfunc NewFileReplicaClient(tb testing.TB) *file.ReplicaClient {\n\ttb.Helper()\n\treturn file.NewReplicaClient(tb.TempDir())\n}\n\n// NewS3ReplicaClient returns a new client for integration testing.\nfunc NewS3ReplicaClient(tb testing.TB) *s3.ReplicaClient {\n\ttb.Helper()\n\n\tc := s3.NewReplicaClient()\n\tc.AccessKeyID = *s3AccessKeyID\n\tc.SecretAccessKey = *s3SecretAccessKey\n\tc.Region = *s3Region\n\tc.Bucket = *s3Bucket\n\tc.Path = path.Join(*s3Path, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\tc.Endpoint = *s3Endpoint\n\tc.ForcePathStyle = *s3ForcePathStyle\n\tc.SkipVerify = *s3SkipVerify\n\treturn c\n}\n\n// NewTigrisReplicaClient returns an S3 client configured for Fly.io Tigris.\nfunc NewTigrisReplicaClient(tb testing.TB) *s3.ReplicaClient {\n\ttb.Helper()\n\n\tif *tigrisAccessKeyID == \"\" || *tigrisSecretAccessKey == \"\" {\n\t\ttb.Skip(\"tigris credentials not configured (set LITESTREAM_TIGRIS_ACCESS_KEY_ID/SECRET_ACCESS_KEY)\")\n\t}\n\n\tc := s3.NewReplicaClient()\n\tc.AccessKeyID = *tigrisAccessKeyID\n\tc.SecretAccessKey = *tigrisSecretAccessKey\n\tc.Region = defaultTigrisRegion\n\tc.Bucket = defaultTigrisBucket\n\tc.Path = path.Join(defaultTigrisPathRoot, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\tc.Endpoint = defaultTigrisEndpoint\n\tc.ForcePathStyle = true\n\tc.RequireContentMD5 = false\n\treturn c\n}\n\n// NewR2ReplicaClient returns an S3 client configured for Cloudflare R2.\n// Skips the test if R2 credentials are not configured.\nfunc NewR2ReplicaClient(tb testing.TB) *s3.ReplicaClient {\n\ttb.Helper()\n\n\tif *r2AccessKeyID == \"\" || *r2SecretAccessKey == \"\" {\n\t\ttb.Skip(\"r2 credentials not configured (set LITESTREAM_R2_ACCESS_KEY_ID/SECRET_ACCESS_KEY)\")\n\t}\n\tif *r2Endpoint == \"\" {\n\t\ttb.Skip(\"r2 endpoint not configured (set LITESTREAM_R2_ENDPOINT)\")\n\t}\n\tif *r2Bucket == \"\" {\n\t\ttb.Skip(\"r2 bucket not configured (set LITESTREAM_R2_BUCKET)\")\n\t}\n\n\tc := s3.NewReplicaClient()\n\tc.AccessKeyID = *r2AccessKeyID\n\tc.SecretAccessKey = *r2SecretAccessKey\n\tc.Region = \"auto\"\n\tc.Bucket = *r2Bucket\n\tc.Path = path.Join(\"integration-tests\", fmt.Sprintf(\"%016x\", rand.Uint64()))\n\tc.Endpoint = *r2Endpoint\n\tc.ForcePathStyle = true\n\tc.SignPayload = true\n\treturn c\n}\n\n// NewB2ReplicaClient returns a new Backblaze B2 client for integration testing.\n// B2 uses S3-compatible API with path-style URLs and signed payloads.\nfunc NewB2ReplicaClient(tb testing.TB) *s3.ReplicaClient {\n\ttb.Helper()\n\n\tif *b2KeyID == \"\" || *b2ApplicationKey == \"\" {\n\t\ttb.Skip(\"b2 credentials not configured (set LITESTREAM_B2_KEY_ID/APPLICATION_KEY)\")\n\t}\n\tif *b2Endpoint == \"\" {\n\t\ttb.Skip(\"b2 endpoint not configured (set LITESTREAM_B2_ENDPOINT)\")\n\t}\n\tif *b2Bucket == \"\" {\n\t\ttb.Skip(\"b2 bucket not configured (set LITESTREAM_B2_BUCKET)\")\n\t}\n\n\tc := s3.NewReplicaClient()\n\tc.AccessKeyID = *b2KeyID\n\tc.SecretAccessKey = *b2ApplicationKey\n\tc.Region = \"us-west-002\" // B2 uses region in endpoint format\n\tc.Bucket = *b2Bucket\n\tc.Path = path.Join(\"integration-tests\", fmt.Sprintf(\"%016x\", rand.Uint64()))\n\tc.Endpoint = *b2Endpoint\n\tc.ForcePathStyle = true\n\tc.SignPayload = true\n\treturn c\n}\n\n// NewGSReplicaClient returns a new client for integration testing.\nfunc NewGSReplicaClient(tb testing.TB) *gs.ReplicaClient {\n\ttb.Helper()\n\n\t// Log basic diagnostic information for integration test troubleshooting\n\ttb.Logf(\"GCS Integration Test Setup:\")\n\tcredsSet := \"not set\"\n\tif os.Getenv(\"GOOGLE_APPLICATION_CREDENTIALS\") != \"\" {\n\t\tcredsSet = \"set\"\n\t}\n\ttb.Logf(\" GOOGLE_APPLICATION_CREDENTIALS: %s\", credsSet)\n\ttb.Logf(\" LITESTREAM_GS_BUCKET: %s\", *gsBucket)\n\ttb.Logf(\" LITESTREAM_GS_PATH: %s\", *gsPath)\n\n\tc := gs.NewReplicaClient()\n\tc.Bucket = *gsBucket\n\tc.Path = path.Join(*gsPath, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\n\t// Test basic connectivity\n\tctx := context.Background()\n\tif err := c.Init(ctx); err != nil {\n\t\ttb.Logf(\"GCS client initialization failed: %v\", err)\n\t\ttb.Logf(\"This may indicate credential or project issues\")\n\t\treturn c // Return anyway to let the actual test show the detailed error\n\t}\n\ttb.Logf(\"GCS client initialized successfully\")\n\n\treturn c\n}\n\n// NewABSReplicaClient returns a new client for integration testing.\nfunc NewABSReplicaClient(tb testing.TB) *abs.ReplicaClient {\n\ttb.Helper()\n\n\tc := abs.NewReplicaClient()\n\tc.AccountName = *absAccountName\n\tc.AccountKey = *absAccountKey\n\tc.SASToken = *absSASToken\n\tc.Bucket = *absBucket\n\tc.Path = path.Join(*absPath, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\treturn c\n}\n\n// NewSFTPReplicaClient returns a new client for integration testing.\nfunc NewSFTPReplicaClient(tb testing.TB) *sftp.ReplicaClient {\n\ttb.Helper()\n\n\tc := sftp.NewReplicaClient()\n\tc.Host = *sftpHost\n\tc.User = *sftpUser\n\tc.Password = *sftpPassword\n\tc.KeyPath = *sftpKeyPath\n\tc.Path = path.Join(*sftpPath, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\treturn c\n}\n\n// NewWebDAVReplicaClient returns a new client for integration testing.\nfunc NewWebDAVReplicaClient(tb testing.TB) *webdav.ReplicaClient {\n\ttb.Helper()\n\n\tc := webdav.NewReplicaClient()\n\tc.URL = *webdavURL\n\tc.Username = *webdavUsername\n\tc.Password = *webdavPassword\n\tc.Path = path.Join(*webdavPath, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\treturn c\n}\n\n// NewNATSReplicaClient returns a new client for integration testing.\nfunc NewNATSReplicaClient(tb testing.TB) *nats.ReplicaClient {\n\ttb.Helper()\n\n\tc := nats.NewReplicaClient()\n\tc.URL = *natsURL\n\tc.BucketName = *natsBucket\n\tc.Creds = *natsCreds\n\tc.Username = *natsUsername\n\tc.Password = *natsPassword\n\treturn c\n}\n\n// NewOSSReplicaClient returns a new client for integration testing.\nfunc NewOSSReplicaClient(tb testing.TB) *oss.ReplicaClient {\n\ttb.Helper()\n\n\tc := oss.NewReplicaClient()\n\tc.AccessKeyID = *ossAccessKeyID\n\tc.AccessKeySecret = *ossAccessKeySecret\n\tc.Region = *ossRegion\n\tc.Bucket = *ossBucket\n\tc.Path = path.Join(*ossPath, fmt.Sprintf(\"%016x\", rand.Uint64()))\n\tc.Endpoint = *ossEndpoint\n\treturn c\n}\n\n// MustDeleteAll deletes all objects under the client's path.\nfunc MustDeleteAll(tb testing.TB, c litestream.ReplicaClient) {\n\ttb.Helper()\n\n\tif err := c.DeleteAll(context.Background()); err != nil {\n\t\ttb.Fatalf(\"cannot delete all: %s\", err)\n\t}\n\n\tswitch c := c.(type) {\n\tcase *sftp.ReplicaClient:\n\t\tif err := c.Cleanup(context.Background()); err != nil {\n\t\t\ttb.Fatalf(\"cannot cleanup sftp: %s\", err)\n\t\t}\n\t}\n}\n\nfunc MockSFTPServer(t *testing.T, hostKey ssh.Signer) string {\n\tconfig := \u0026ssh.ServerConfig{NoClientAuth: true}\n\tconfig.AddHostKey(hostKey)\n\n\tlistener, err := net.Listen(\"tcp\", \"127.0.0.1:0\") // random available port\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tgo func() {\n\t\tfor {\n\t\t\tconn, err := listener.Accept()\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tgo func() {\n\t\t\t\t_, chans, reqs, err := ssh.NewServerConn(conn, config)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tgo ssh.DiscardRequests(reqs)\n\n\t\t\t\tfor ch := range chans {\n\t\t\t\t\tif ch.ChannelType() != \"session\" {\n\t\t\t\t\t\tch.Reject(ssh.UnknownChannelType, \"unsupported\")\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tchannel, requests, err := ch.Accept()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tgo func(in \u003c-chan *ssh.Request) {\n\t\t\t\t\t\tfor req := range in {\n\t\t\t\t\t\t\tif req.Type == \"subsystem\" \u0026\u0026 string(req.Payload[4:]) == \"sftp\" {\n\t\t\t\t\t\t\t\treq.Reply(true, nil)\n\n\t\t\t\t\t\t\t\tserver, err := sftpserver.NewServer(channel)\n\t\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif err := server.Serve(); err != nil \u0026\u0026 err != io.EOF {\n\t\t\t\t\t\t\t\t\tt.Logf(\"SFTP server error: %v\", err)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treq.Reply(false, nil)\n\t\t\t\t\t\t}\n\t\t\t\t\t}(requests)\n\t\t\t\t}\n\t\t\t}()\n\t\t}\n\t}()\n\n\treturn listener.Addr().String()\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[30,40]}},{"name":"sql","path":"database/sql","span":{"start":[5,1],"end":[5,16],"bytes":[41,56]}},{"name":"flag","path":"flag","span":{"start":[6,1],"end":[6,8],"bytes":[57,64]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[65,71]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[72,77]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[78,89]}},{"name":"v2","path":"math/rand/v2","span":{"start":[10,1],"end":[10,16],"bytes":[90,105]}},{"name":"net","path":"net","span":{"start":[11,1],"end":[11,7],"bytes":[106,112]}},{"name":"os","path":"os","span":{"start":[12,1],"end":[12,6],"bytes":[113,118]}},{"name":"path","path":"path","span":{"start":[13,1],"end":[13,8],"bytes":[119,126]}},{"name":"filepath","path":"path/filepath","span":{"start":[14,1],"end":[14,17],"bytes":[127,143]}},{"name":"strings","path":"strings","span":{"start":[15,1],"end":[15,11],"bytes":[144,154]}},{"name":"testing","path":"testing","span":{"start":[16,1],"end":[16,11],"bytes":[155,165]}},{"name":"sftp","path":"github.com/pkg/sftp","alias":"sftpserver","span":{"start":[18,1],"end":[18,34],"bytes":[167,200]}},{"name":"ssh","path":"golang.org/x/crypto/ssh","span":{"start":[19,1],"end":[19,27],"bytes":[201,227]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[21,1],"end":[21,37],"bytes":[229,265]}},{"name":"abs","path":"github.com/benbjohnson/litestream/abs","span":{"start":[22,1],"end":[22,41],"bytes":[266,306]}},{"name":"file","path":"github.com/benbjohnson/litestream/file","span":{"start":[23,1],"end":[23,42],"bytes":[307,348]}},{"name":"gs","path":"github.com/benbjohnson/litestream/gs","span":{"start":[24,1],"end":[24,40],"bytes":[349,388]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[25,1],"end":[25,46],"bytes":[389,434]}},{"name":"nats","path":"github.com/benbjohnson/litestream/nats","span":{"start":[26,1],"end":[26,42],"bytes":[435,476]}},{"name":"oss","path":"github.com/benbjohnson/litestream/oss","span":{"start":[27,1],"end":[27,41],"bytes":[477,517]}},{"name":"s3","path":"github.com/benbjohnson/litestream/s3","span":{"start":[28,1],"end":[28,40],"bytes":[518,557]}},{"name":"sftp","path":"github.com/benbjohnson/litestream/sftp","span":{"start":[29,1],"end":[29,42],"bytes":[558,599]}},{"name":"webdav","path":"github.com/benbjohnson/litestream/webdav","span":{"start":[30,1],"end":[30,44],"bytes":[600,643]}}],"types":{},"functions":{"github.com/benbjohnson/litestream/internal/testingutil.Integration":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.Integration","kind":"function","span":{"start":[135,1],"end":[137,2],"bytes":[5610,5658]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.Integration","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer","kind":"function","span":{"start":[468,1],"end":[524,2],"bytes":[15381,16629]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer","parameters":[{"name":"t","type":"*testing.T","span":{"start":[468,1],"end":[468,63],"bytes":[15381,15443]}},{"name":"hostKey","type":"golang.org/x/crypto/ssh.Signer","span":{"start":[468,1],"end":[468,63],"bytes":[15381,15443]}}],"return_type":"string","metrics":{"cyclomatic":12},"body":{"470:2":{"kind":"call","span":{"start":[470,2],"end":[470,28],"bytes":[15494,15520]},"callee":null},"472:19":{"kind":"call","span":{"start":[472,19],"end":[472,51],"bytes":[15540,15572]},"callee":null},"474:3":{"kind":"call","span":{"start":[474,3],"end":[474,15],"bytes":[15617,15629]},"callee":null},"477:5":{"kind":"call","span":{"start":[477,5],"end":[521,5],"bytes":[15638,16593]},"callee":null,"is_goroutine":true},"523:9":{"kind":"call","span":{"start":[523,9],"end":[523,24],"bytes":[16603,16618]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1","kind":"function","span":{"start":[477,1],"end":[521,5],"bytes":[15634,16593]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1","parameters":[],"body":{"479:17":{"kind":"call","span":{"start":[479,17],"end":[479,34],"bytes":[15671,15688]},"callee":null},"484:7":{"kind":"call","span":{"start":[484,7],"end":[519,7],"bytes":[15731,16584]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1.closure_1","kind":"function","span":{"start":[484,1],"end":[519,7],"bytes":[15725,16584]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1.closure_1","parameters":[],"body":{"485:28":{"kind":"call","span":{"start":[485,28],"end":[485,59],"bytes":[15767,15798]},"callee":null},"489:8":{"kind":"call","span":{"start":[489,8],"end":[489,33],"bytes":[15844,15869]},"callee":null,"is_goroutine":true},"492:9":{"kind":"call","span":{"start":[492,9],"end":[492,25],"bytes":[15907,15923]},"callee":null},"493:7":{"kind":"call","span":{"start":[493,7],"end":[493,55],"bytes":[15945,15993]},"callee":null},"496:32":{"kind":"call","span":{"start":[496,32],"end":[496,43],"bytes":[16047,16058]},"callee":null},"501:9":{"kind":"call","span":{"start":[501,9],"end":[517,17],"bytes":[16109,16571]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1.closure_1/github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1.closure_1.closure_1","kind":"function","span":{"start":[501,1],"end":[517,17],"bytes":[16101,16571]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MockSFTPServer.closure_1.closure_1.closure_1","parameters":[{"name":"in","type":"\u003c-chan *golang.org/x/crypto/ssh.Request","span":{"start":[501,1],"end":[501,39],"bytes":[16101,16139]}}],"body":{"503:38":{"kind":"call","span":{"start":[503,38],"end":[503,61],"bytes":[16205,16228]},"callee":null},"504:9":{"kind":"call","span":{"start":[504,9],"end":[504,29],"bytes":[16249,16269]},"callee":null},"506:24":{"kind":"call","span":{"start":[506,24],"end":[506,53],"bytes":[16294,16323]},"callee":null},"510:19":{"kind":"call","span":{"start":[510,19],"end":[510,33],"bytes":[16392,16406]},"callee":null},"511:10":{"kind":"call","span":{"start":[511,10],"end":[511,46],"bytes":[16447,16483]},"callee":null},"515:8":{"kind":"call","span":{"start":[515,8],"end":[515,29],"bytes":[16525,16546]},"callee":null}}}}}}}}},"github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB","kind":"function","span":{"start":[197,1],"end":[204,2],"bytes":[7298,7639]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[197,1],"end":[197,53],"bytes":[7298,7350]}},{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[197,1],"end":[197,53],"bytes":[7298,7350]}}],"metrics":{"cyclomatic":3},"body":{"198:2":{"kind":"call","span":{"start":[198,2],"end":[198,13],"bytes":[7352,7363]},"callee":null},"199:115":{"kind":"call","span":{"start":[199,115],"end":[199,167],"bytes":[7478,7530]},"callee":null},"199:12":{"kind":"call","span":{"start":[199,12],"end":[199,42],"bytes":[7375,7405]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close"},"199:132":{"kind":"call","span":{"start":[199,132],"end":[199,143],"bytes":[7495,7506]},"callee":null},"199:21":{"kind":"call","span":{"start":[199,21],"end":[199,41],"bytes":[7384,7404]},"callee":null},"199:59":{"kind":"call","span":{"start":[199,59],"end":[199,110],"bytes":[7422,7473]},"callee":null},"199:76":{"kind":"call","span":{"start":[199,76],"end":[199,87],"bytes":[7439,7450]},"callee":null},"200:3":{"kind":"call","span":{"start":[200,3],"end":[200,16],"bytes":[7535,7548]},"callee":null},"201:19":{"kind":"call","span":{"start":[201,19],"end":[201,56],"bytes":[7567,7604]},"callee":null},"201:32":{"kind":"call","span":{"start":[201,32],"end":[201,55],"bytes":[7580,7603]},"callee":null},"201:45":{"kind":"call","span":{"start":[201,45],"end":[201,54],"bytes":[7593,7602]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"202:3":{"kind":"call","span":{"start":[202,3],"end":[202,16],"bytes":[7621,7634]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.MustCloseDBs":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDBs","kind":"function","span":{"start":[168,1],"end":[172,2],"bytes":[6403,6534]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustCloseDBs","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[168,1],"end":[168,69],"bytes":[6403,6471]}},{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[168,1],"end":[168,69],"bytes":[6403,6471]}},{"name":"sqldb","type":"*database/sql.DB","span":{"start":[168,1],"end":[168,69],"bytes":[6403,6471]}}],"metrics":{"cyclomatic":1},"body":{"169:2":{"kind":"call","span":{"start":[169,2],"end":[169,13],"bytes":[6473,6484]},"callee":null},"170:2":{"kind":"call","span":{"start":[170,2],"end":[170,21],"bytes":[6486,6505]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB"},"171:2":{"kind":"call","span":{"start":[171,2],"end":[171,27],"bytes":[6507,6532]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseSQLDB"}}},"github.com/benbjohnson/litestream/internal/testingutil.MustCloseSQLDB":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseSQLDB","kind":"function","span":{"start":[221,1],"end":[226,2],"bytes":[8119,8235]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustCloseSQLDB","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[221,1],"end":[221,48],"bytes":[8119,8166]}},{"name":"d","type":"*database/sql.DB","span":{"start":[221,1],"end":[221,48],"bytes":[8119,8166]}}],"metrics":{"cyclomatic":2},"body":{"222:2":{"kind":"call","span":{"start":[222,2],"end":[222,13],"bytes":[8168,8179]},"callee":null},"223:12":{"kind":"call","span":{"start":[223,12],"end":[223,21],"bytes":[8191,8200]},"callee":null},"224:3":{"kind":"call","span":{"start":[224,3],"end":[224,16],"bytes":[8217,8230]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.MustDeleteAll":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustDeleteAll","kind":"function","span":{"start":[453,1],"end":[466,2],"bytes":[15034,15379]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustDeleteAll","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[453,1],"end":[453,64],"bytes":[15034,15097]}},{"name":"c","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[453,1],"end":[453,64],"bytes":[15034,15097]}}],"metrics":{"cyclomatic":5},"body":{"454:2":{"kind":"call","span":{"start":[454,2],"end":[454,13],"bytes":[15099,15110]},"callee":null},"456:12":{"kind":"call","span":{"start":[456,12],"end":[456,45],"bytes":[15123,15156]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteAll"},"456:24":{"kind":"call","span":{"start":[456,24],"end":[456,44],"bytes":[15135,15155]},"callee":null},"457:3":{"kind":"call","span":{"start":[457,3],"end":[457,42],"bytes":[15173,15212]},"callee":null},"462:13":{"kind":"call","span":{"start":[462,13],"end":[462,44],"bytes":[15280,15311]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup"},"462:23":{"kind":"call","span":{"start":[462,23],"end":[462,43],"bytes":[15290,15310]},"callee":null},"463:4":{"kind":"call","span":{"start":[463,4],"end":[463,45],"bytes":[15329,15370]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.MustOpenDB":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDB","kind":"function","span":{"start":[175,1],"end":[179,2],"bytes":[6582,6716]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustOpenDB","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[175,1],"end":[175,48],"bytes":[6582,6629]}}],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":1},"body":{"176:2":{"kind":"call","span":{"start":[176,2],"end":[176,13],"bytes":[6631,6642]},"callee":null},"177:9":{"kind":"call","span":{"start":[177,9],"end":[177,21],"bytes":[6651,6663]},"callee":null},"178:26":{"kind":"call","span":{"start":[178,26],"end":[178,50],"bytes":[6689,6713]},"callee":null},"178:9":{"kind":"call","span":{"start":[178,9],"end":[178,51],"bytes":[6672,6714]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt"}}},"github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","kind":"function","span":{"start":[182,1],"end":[194,2],"bytes":[6783,7237]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[182,1],"end":[182,63],"bytes":[6783,6845]}},{"name":"path","type":"string","span":{"start":[182,1],"end":[182,63],"bytes":[6783,6845]}}],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":2},"body":{"183:2":{"kind":"call","span":{"start":[183,2],"end":[183,13],"bytes":[6847,6858]},"callee":null},"184:8":{"kind":"call","span":{"start":[184,8],"end":[184,23],"bytes":[6866,6881]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewDB"},"187:15":{"kind":"call","span":{"start":[187,15],"end":[187,40],"bytes":[7032,7057]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica"},"188:22":{"kind":"call","span":{"start":[188,22],"end":[188,46],"bytes":[7079,7103]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient"},"190:12":{"kind":"call","span":{"start":[190,12],"end":[190,21],"bytes":[7182,7191]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open"},"191:3":{"kind":"call","span":{"start":[191,3],"end":[191,16],"bytes":[7208,7221]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBs":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBs","kind":"function","span":{"start":[161,1],"end":[165,2],"bytes":[6196,6333]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBs","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[161,1],"end":[161,60],"bytes":[6196,6255]}}],"return_type":"(*github.com/benbjohnson/litestream.DB, *database/sql.DB)","metrics":{"cyclomatic":1},"body":{"162:2":{"kind":"call","span":{"start":[162,2],"end":[162,13],"bytes":[6257,6268]},"callee":null},"163:8":{"kind":"call","span":{"start":[163,8],"end":[163,22],"bytes":[6276,6290]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDB"},"164:13":{"kind":"call","span":{"start":[164,13],"end":[164,41],"bytes":[6303,6331]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenSQLDB"},"164:31":{"kind":"call","span":{"start":[164,31],"end":[164,40],"bytes":[6321,6330]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"}}},"github.com/benbjohnson/litestream/internal/testingutil.MustOpenSQLDB":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenSQLDB","kind":"function","span":{"start":[207,1],"end":[218,2],"bytes":[7685,8073]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.MustOpenSQLDB","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[207,1],"end":[207,57],"bytes":[7685,7741]}},{"name":"path","type":"string","span":{"start":[207,1],"end":[207,57],"bytes":[7685,7741]}}],"return_type":"*database/sql.DB","metrics":{"cyclomatic":4},"body":{"208:2":{"kind":"call","span":{"start":[208,2],"end":[208,13],"bytes":[7743,7754]},"callee":null},"209:12":{"kind":"call","span":{"start":[209,12],"end":[209,36],"bytes":[7766,7790]},"callee":null},"211:3":{"kind":"call","span":{"start":[211,3],"end":[211,16],"bytes":[7810,7823]},"callee":null},"212:22":{"kind":"call","span":{"start":[212,22],"end":[212,87],"bytes":[7845,7910]},"callee":null},"212:36":{"kind":"call","span":{"start":[212,36],"end":[212,56],"bytes":[7859,7879]},"callee":null},"213:3":{"kind":"call","span":{"start":[213,3],"end":[213,16],"bytes":[7927,7940]},"callee":null},"214:22":{"kind":"call","span":{"start":[214,22],"end":[214,88],"bytes":[7962,8028]},"callee":null},"214:36":{"kind":"call","span":{"start":[214,36],"end":[214,56],"bytes":[7976,7996]},"callee":null},"215:3":{"kind":"call","span":{"start":[215,3],"end":[215,16],"bytes":[8045,8058]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewABSReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewABSReplicaClient","kind":"function","span":{"start":[388,1],"end":[398,2],"bytes":[13260,13556]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewABSReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[388,1],"end":[388,61],"bytes":[13260,13320]}}],"return_type":"*github.com/benbjohnson/litestream/abs.ReplicaClient","metrics":{"cyclomatic":1},"body":{"389:2":{"kind":"call","span":{"start":[389,2],"end":[389,13],"bytes":[13322,13333]},"callee":null},"391:7":{"kind":"call","span":{"start":[391,7],"end":[391,29],"bytes":[13341,13363]},"callee":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient"},"396:11":{"kind":"call","span":{"start":[396,11],"end":[396,67],"bytes":[13488,13544]},"callee":null},"396:31":{"kind":"call","span":{"start":[396,31],"end":[396,66],"bytes":[13508,13543]},"callee":null},"396:52":{"kind":"call","span":{"start":[396,52],"end":[396,65],"bytes":[13529,13542]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewB2ReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewB2ReplicaClient","kind":"function","span":{"start":[332,1],"end":[355,2],"bytes":[11474,12211]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewB2ReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[332,1],"end":[332,59],"bytes":[11474,11532]}}],"return_type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","metrics":{"cyclomatic":4},"body":{"333:2":{"kind":"call","span":{"start":[333,2],"end":[333,13],"bytes":[11534,11545]},"callee":null},"336:3":{"kind":"call","span":{"start":[336,3],"end":[336,86],"bytes":[11597,11680]},"callee":null},"339:3":{"kind":"call","span":{"start":[339,3],"end":[339,69],"bytes":[11710,11776]},"callee":null},"342:3":{"kind":"call","span":{"start":[342,3],"end":[342,65],"bytes":[11804,11866]},"callee":null},"345:7":{"kind":"call","span":{"start":[345,7],"end":[345,28],"bytes":[11877,11898]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient"},"350:11":{"kind":"call","span":{"start":[350,11],"end":[350,78],"bytes":[12059,12126]},"callee":null},"350:42":{"kind":"call","span":{"start":[350,42],"end":[350,77],"bytes":[12090,12125]},"callee":null},"350:63":{"kind":"call","span":{"start":[350,63],"end":[350,76],"bytes":[12111,12124]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewDB":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewDB","kind":"function","span":{"start":[143,1],"end":[158,2],"bytes":[5748,6127]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewDB","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[143,1],"end":[143,56],"bytes":[5748,5803]}},{"name":"path","type":"string","span":{"start":[143,1],"end":[143,56],"bytes":[5748,5803]}}],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":2},"body":{"144:2":{"kind":"call","span":{"start":[144,2],"end":[144,13],"bytes":[5805,5816]},"callee":null},"145:2":{"kind":"call","span":{"start":[145,2],"end":[145,24],"bytes":[5818,5840]},"callee":null},"148:5":{"kind":"call","span":{"start":[148,5],"end":[148,42],"bytes":[5872,5909]},"callee":null},"152:8":{"kind":"call","span":{"start":[152,8],"end":[152,30],"bytes":[5953,5975]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB"},"153:14":{"kind":"call","span":{"start":[153,14],"end":[156,5],"bytes":[5989,6114]},"callee":null},"153:23":{"kind":"call","span":{"start":[153,23],"end":[156,4],"bytes":[5998,6113]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient","kind":"function","span":{"start":[262,1],"end":[265,2],"bytes":[9215,9336]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[262,1],"end":[262,63],"bytes":[9215,9277]}}],"return_type":"*github.com/benbjohnson/litestream/file.ReplicaClient","metrics":{"cyclomatic":1},"body":{"263:2":{"kind":"call","span":{"start":[263,2],"end":[263,13],"bytes":[9279,9290]},"callee":null},"264:31":{"kind":"call","span":{"start":[264,31],"end":[264,43],"bytes":[9321,9333]},"callee":null},"264:9":{"kind":"call","span":{"start":[264,9],"end":[264,44],"bytes":[9299,9334]},"callee":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient"}}},"github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient","kind":"function","span":{"start":[358,1],"end":[385,2],"bytes":[12281,13189]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[358,1],"end":[358,59],"bytes":[12281,12339]}}],"return_type":"*github.com/benbjohnson/litestream/gs.ReplicaClient","metrics":{"cyclomatic":3},"body":{"359:2":{"kind":"call","span":{"start":[359,2],"end":[359,13],"bytes":[12341,12352]},"callee":null},"362:2":{"kind":"call","span":{"start":[362,2],"end":[362,40],"bytes":[12429,12467]},"callee":null},"364:5":{"kind":"call","span":{"start":[364,5],"end":[364,48],"bytes":[12495,12538]},"callee":null},"367:2":{"kind":"call","span":{"start":[367,2],"end":[367,59],"bytes":[12570,12627]},"callee":null},"368:2":{"kind":"call","span":{"start":[368,2],"end":[368,50],"bytes":[12629,12677]},"callee":null},"369:2":{"kind":"call","span":{"start":[369,2],"end":[369,46],"bytes":[12679,12723]},"callee":null},"371:7":{"kind":"call","span":{"start":[371,7],"end":[371,28],"bytes":[12731,12752]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient"},"373:11":{"kind":"call","span":{"start":[373,11],"end":[373,66],"bytes":[12785,12840]},"callee":null},"373:30":{"kind":"call","span":{"start":[373,30],"end":[373,65],"bytes":[12804,12839]},"callee":null},"373:51":{"kind":"call","span":{"start":[373,51],"end":[373,64],"bytes":[12825,12838]},"callee":null},"376:9":{"kind":"call","span":{"start":[376,9],"end":[376,29],"bytes":[12878,12898]},"callee":null},"377:12":{"kind":"call","span":{"start":[377,12],"end":[377,23],"bytes":[12910,12921]},"callee":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init"},"378:3":{"kind":"call","span":{"start":[378,3],"end":[378,55],"bytes":[12938,12990]},"callee":null},"379:3":{"kind":"call","span":{"start":[379,3],"end":[379,60],"bytes":[12993,13050]},"callee":null},"382:2":{"kind":"call","span":{"start":[382,2],"end":[382,48],"bytes":[13130,13176]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewNATSReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewNATSReplicaClient","kind":"function","span":{"start":[426,1],"end":[436,2],"bytes":[14328,14570]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewNATSReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[426,1],"end":[426,63],"bytes":[14328,14390]}}],"return_type":"*github.com/benbjohnson/litestream/nats.ReplicaClient","metrics":{"cyclomatic":1},"body":{"427:2":{"kind":"call","span":{"start":[427,2],"end":[427,13],"bytes":[14392,14403]},"callee":null},"429:7":{"kind":"call","span":{"start":[429,7],"end":[429,30],"bytes":[14411,14434]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient"}}},"github.com/benbjohnson/litestream/internal/testingutil.NewOSSReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewOSSReplicaClient","kind":"function","span":{"start":[439,1],"end":[450,2],"bytes":[14641,14970]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewOSSReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[439,1],"end":[439,61],"bytes":[14641,14701]}}],"return_type":"*github.com/benbjohnson/litestream/oss.ReplicaClient","metrics":{"cyclomatic":1},"body":{"440:2":{"kind":"call","span":{"start":[440,2],"end":[440,13],"bytes":[14703,14714]},"callee":null},"442:7":{"kind":"call","span":{"start":[442,7],"end":[442,29],"bytes":[14722,14744]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient"},"447:11":{"kind":"call","span":{"start":[447,11],"end":[447,67],"bytes":[14875,14931]},"callee":null},"447:31":{"kind":"call","span":{"start":[447,31],"end":[447,66],"bytes":[14895,14930]},"callee":null},"447:52":{"kind":"call","span":{"start":[447,52],"end":[447,65],"bytes":[14916,14929]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewR2ReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewR2ReplicaClient","kind":"function","span":{"start":[305,1],"end":[328,2],"bytes":[10604,11320]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewR2ReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[305,1],"end":[305,59],"bytes":[10604,10662]}}],"return_type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","metrics":{"cyclomatic":4},"body":{"306:2":{"kind":"call","span":{"start":[306,2],"end":[306,13],"bytes":[10664,10675]},"callee":null},"309:3":{"kind":"call","span":{"start":[309,3],"end":[309,95],"bytes":[10734,10826]},"callee":null},"312:3":{"kind":"call","span":{"start":[312,3],"end":[312,69],"bytes":[10856,10922]},"callee":null},"315:3":{"kind":"call","span":{"start":[315,3],"end":[315,65],"bytes":[10950,11012]},"callee":null},"318:7":{"kind":"call","span":{"start":[318,7],"end":[318,28],"bytes":[11023,11044]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient"},"323:11":{"kind":"call","span":{"start":[323,11],"end":[323,78],"bytes":[11168,11235]},"callee":null},"323:42":{"kind":"call","span":{"start":[323,42],"end":[323,77],"bytes":[11199,11234]},"callee":null},"323:63":{"kind":"call","span":{"start":[323,63],"end":[323,76],"bytes":[11220,11233]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","kind":"function","span":{"start":[229,1],"end":[259,2],"bytes":[8316,9143]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[229,1],"end":[229,76],"bytes":[8316,8391]}},{"name":"typ","type":"string","span":{"start":[229,1],"end":[229,76],"bytes":[8316,8391]}}],"return_type":"github.com/benbjohnson/litestream.ReplicaClient","metrics":{"cyclomatic":14},"body":{"230:2":{"kind":"call","span":{"start":[230,2],"end":[230,13],"bytes":[8393,8404]},"callee":null},"234:10":{"kind":"call","span":{"start":[234,10],"end":[234,34],"bytes":[8459,8483]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient"},"236:10":{"kind":"call","span":{"start":[236,10],"end":[236,32],"bytes":[8521,8543]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewS3ReplicaClient"},"238:10":{"kind":"call","span":{"start":[238,10],"end":[238,32],"bytes":[8581,8603]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient"},"240:10":{"kind":"call","span":{"start":[240,10],"end":[240,33],"bytes":[8642,8665]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewABSReplicaClient"},"242:10":{"kind":"call","span":{"start":[242,10],"end":[242,34],"bytes":[8705,8729]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewSFTPReplicaClient"},"244:10":{"kind":"call","span":{"start":[244,10],"end":[244,36],"bytes":[8771,8797]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewWebDAVReplicaClient"},"246:10":{"kind":"call","span":{"start":[246,10],"end":[246,34],"bytes":[8837,8861]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewNATSReplicaClient"},"248:10":{"kind":"call","span":{"start":[248,10],"end":[248,33],"bytes":[8900,8923]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewOSSReplicaClient"},"250:10":{"kind":"call","span":{"start":[250,10],"end":[250,36],"bytes":[8949,8975]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewTigrisReplicaClient"},"252:10":{"kind":"call","span":{"start":[252,10],"end":[252,32],"bytes":[8997,9019]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewR2ReplicaClient"},"254:10":{"kind":"call","span":{"start":[254,10],"end":[254,32],"bytes":[9041,9063]},"callee":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewB2ReplicaClient"},"256:3":{"kind":"call","span":{"start":[256,3],"end":[256,52],"bytes":[9076,9125]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewS3ReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewS3ReplicaClient","kind":"function","span":{"start":[268,1],"end":[281,2],"bytes":[9406,9794]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewS3ReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[268,1],"end":[268,59],"bytes":[9406,9464]}}],"return_type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","metrics":{"cyclomatic":1},"body":{"269:2":{"kind":"call","span":{"start":[269,2],"end":[269,13],"bytes":[9466,9477]},"callee":null},"271:7":{"kind":"call","span":{"start":[271,7],"end":[271,28],"bytes":[9485,9506]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient"},"276:11":{"kind":"call","span":{"start":[276,11],"end":[276,66],"bytes":[9633,9688]},"callee":null},"276:30":{"kind":"call","span":{"start":[276,30],"end":[276,65],"bytes":[9652,9687]},"callee":null},"276:51":{"kind":"call","span":{"start":[276,51],"end":[276,64],"bytes":[9673,9686]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewSFTPReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewSFTPReplicaClient","kind":"function","span":{"start":[401,1],"end":[411,2],"bytes":[13628,13908]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewSFTPReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[401,1],"end":[401,63],"bytes":[13628,13690]}}],"return_type":"*github.com/benbjohnson/litestream/sftp.ReplicaClient","metrics":{"cyclomatic":1},"body":{"402:2":{"kind":"call","span":{"start":[402,2],"end":[402,13],"bytes":[13692,13703]},"callee":null},"404:7":{"kind":"call","span":{"start":[404,7],"end":[404,30],"bytes":[13711,13734]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient"},"409:11":{"kind":"call","span":{"start":[409,11],"end":[409,68],"bytes":[13839,13896]},"callee":null},"409:32":{"kind":"call","span":{"start":[409,32],"end":[409,67],"bytes":[13860,13895]},"callee":null},"409:53":{"kind":"call","span":{"start":[409,53],"end":[409,66],"bytes":[13881,13894]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewTigrisReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewTigrisReplicaClient","kind":"function","span":{"start":[284,1],"end":[301,2],"bytes":[9873,10473]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewTigrisReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[284,1],"end":[284,63],"bytes":[9873,9935]}}],"return_type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","metrics":{"cyclomatic":2},"body":{"285:2":{"kind":"call","span":{"start":[285,2],"end":[285,13],"bytes":[9937,9948]},"callee":null},"288:3":{"kind":"call","span":{"start":[288,3],"end":[288,103],"bytes":[10015,10115]},"callee":null},"291:7":{"kind":"call","span":{"start":[291,7],"end":[291,28],"bytes":[10126,10147]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient"},"296:11":{"kind":"call","span":{"start":[296,11],"end":[296,80],"bytes":[10302,10371]},"callee":null},"296:44":{"kind":"call","span":{"start":[296,44],"end":[296,79],"bytes":[10335,10370]},"callee":null},"296:65":{"kind":"call","span":{"start":[296,65],"end":[296,78],"bytes":[10356,10369]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.NewWebDAVReplicaClient":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewWebDAVReplicaClient","kind":"function","span":{"start":[414,1],"end":[423,2],"bytes":[13982,14256]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.NewWebDAVReplicaClient","parameters":[{"name":"tb","type":"testing.TB","span":{"start":[414,1],"end":[414,67],"bytes":[13982,14048]}}],"return_type":"*github.com/benbjohnson/litestream/webdav.ReplicaClient","metrics":{"cyclomatic":1},"body":{"415:2":{"kind":"call","span":{"start":[415,2],"end":[415,13],"bytes":[14050,14061]},"callee":null},"417:7":{"kind":"call","span":{"start":[417,7],"end":[417,32],"bytes":[14069,14094]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient"},"421:11":{"kind":"call","span":{"start":[421,11],"end":[421,70],"bytes":[14185,14244]},"callee":null},"421:34":{"kind":"call","span":{"start":[421,34],"end":[421,69],"bytes":[14208,14243]},"callee":null},"421:55":{"kind":"call","span":{"start":[421,55],"end":[421,68],"bytes":[14229,14242]},"callee":null}}},"github.com/benbjohnson/litestream/internal/testingutil.ReplicaClientTypes":{"id":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.ReplicaClientTypes","kind":"function","span":{"start":[139,1],"end":[141,2],"bytes":[5660,5746]},"signature":"github.com/benbjohnson/litestream/internal/testingutil.ReplicaClientTypes","parameters":[],"return_type":"[]string","metrics":{"cyclomatic":1},"body":{"140:9":{"kind":"call","span":{"start":[140,9],"end":[140,48],"bytes":[5705,5744]},"callee":null}}}},"content_hash":"05ab44549f9219b4b32ffca96ff4acb54d6340b69512a42f2006aae45e5e2397"},"leaser.go":{"id":"can://go/litestream/leaser.go","kind":"module","span":{"start":[1,1],"end":[45,1],"bytes":[0,995]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n)\n\nvar ErrLeaseNotHeld = errors.New(\"lease not held\")\n\ntype LeaseExistsError struct {\n\tOwner string\n\tExpiresAt time.Time\n}\n\nfunc (e *LeaseExistsError) Error() string {\n\tif e.Owner != \"\" {\n\t\treturn fmt.Sprintf(\"lease already held by %s until %s\", e.Owner, e.ExpiresAt.Format(time.RFC3339))\n\t}\n\treturn fmt.Sprintf(\"lease already held until %s\", e.ExpiresAt.Format(time.RFC3339))\n}\n\ntype Leaser interface {\n\tType() string\n\tAcquireLease(ctx context.Context) (*Lease, error)\n\tRenewLease(ctx context.Context, lease *Lease) (*Lease, error)\n\tReleaseLease(ctx context.Context, lease *Lease) error\n}\n\ntype Lease struct {\n\tGeneration int64 `json:\"generation\"`\n\tExpiresAt time.Time `json:\"expires_at\"`\n\tOwner string `json:\"owner,omitempty\"`\n\tETag string `json:\"-\"`\n}\n\nfunc (l *Lease) IsExpired() bool {\n\treturn time.Now().After(l.ExpiresAt)\n}\n\nfunc (l *Lease) TTL() time.Duration {\n\treturn time.Until(l.ExpiresAt)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"errors","path":"errors","span":{"start":[5,1],"end":[5,10],"bytes":[40,49]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[50,56]}},{"name":"time","path":"time","span":{"start":[7,1],"end":[7,8],"bytes":[57,64]}}],"types":{"Lease":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease","kind":"struct","span":{"start":[31,1],"end":[36,2],"bytes":[660,845]},"callables":{"github.com/benbjohnson/litestream.Lease.IsExpired":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/github.com/benbjohnson/litestream.Lease.IsExpired","kind":"method","span":{"start":[38,1],"end":[40,2],"bytes":[847,921]},"signature":"github.com/benbjohnson/litestream.Lease.IsExpired","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"39:9":{"kind":"call","span":{"start":[39,9],"end":[39,19],"bytes":[890,900]},"callee":null}}},"github.com/benbjohnson/litestream.Lease.TTL":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/github.com/benbjohnson/litestream.Lease.TTL","kind":"method","span":{"start":[42,1],"end":[44,2],"bytes":[923,994]},"signature":"github.com/benbjohnson/litestream.Lease.TTL","parameters":[],"return_type":"time.Duration","metrics":{"cyclomatic":1},"body":{"43:9":{"kind":"call","span":{"start":[43,9],"end":[43,32],"bytes":[969,992]},"callee":null}}}},"fields":{"ETag":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/ETag","kind":"field","type":"string","span":{"start":[35,1],"end":[35,33],"bytes":[811,843]}},"ExpiresAt":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/ExpiresAt","kind":"field","type":"time.Time","span":{"start":[33,1],"end":[33,42],"bytes":[722,763]}},"Generation":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/Generation","kind":"field","type":"int64","span":{"start":[32,1],"end":[32,42],"bytes":[680,721]}},"Owner":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/Owner","kind":"field","type":"string","span":{"start":[34,1],"end":[34,47],"bytes":[764,810]}}}},"LeaseExistsError":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.LeaseExistsError","kind":"struct","span":{"start":[12,1],"end":[15,2],"bytes":[120,191]},"callables":{"github.com/benbjohnson/litestream.LeaseExistsError.Error":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.LeaseExistsError/github.com/benbjohnson/litestream.LeaseExistsError.Error","kind":"method","span":{"start":[17,1],"end":[22,2],"bytes":[193,447]},"signature":"github.com/benbjohnson/litestream.LeaseExistsError.Error","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{"19:10":{"kind":"call","span":{"start":[19,10],"end":[19,101],"bytes":[266,357]},"callee":null},"19:68":{"kind":"call","span":{"start":[19,68],"end":[19,100],"bytes":[324,356]},"callee":null},"21:52":{"kind":"call","span":{"start":[21,52],"end":[21,84],"bytes":[412,444]},"callee":null},"21:9":{"kind":"call","span":{"start":[21,9],"end":[21,85],"bytes":[369,445]},"callee":null}}}},"fields":{"ExpiresAt":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.LeaseExistsError/ExpiresAt","kind":"field","type":"time.Time","span":{"start":[14,1],"end":[14,21],"bytes":[169,189]}},"Owner":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.LeaseExistsError/Owner","kind":"field","type":"string","span":{"start":[13,1],"end":[13,18],"bytes":[151,168]}}}},"Leaser":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Leaser","kind":"interface","span":{"start":[24,1],"end":[29,2],"bytes":[449,658]},"callables":{"github.com/benbjohnson/litestream.Leaser.AcquireLease":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Leaser/github.com/benbjohnson/litestream.Leaser.AcquireLease","kind":"method","span":{"start":[26,1],"end":[26,51],"bytes":[488,538]},"signature":"github.com/benbjohnson/litestream.Leaser.AcquireLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[26,1],"end":[26,51],"bytes":[488,538]}}],"return_type":"(*github.com/benbjohnson/litestream.Lease, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.Leaser.ReleaseLease":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Leaser/github.com/benbjohnson/litestream.Leaser.ReleaseLease","kind":"method","span":{"start":[28,1],"end":[28,55],"bytes":[602,656]},"signature":"github.com/benbjohnson/litestream.Leaser.ReleaseLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[28,1],"end":[28,55],"bytes":[602,656]}},{"name":"lease","type":"*github.com/benbjohnson/litestream.Lease","span":{"start":[28,1],"end":[28,55],"bytes":[602,656]}}],"return_type":"error","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.Leaser.RenewLease":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Leaser/github.com/benbjohnson/litestream.Leaser.RenewLease","kind":"method","span":{"start":[27,1],"end":[27,63],"bytes":[539,601]},"signature":"github.com/benbjohnson/litestream.Leaser.RenewLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[27,1],"end":[27,63],"bytes":[539,601]}},{"name":"lease","type":"*github.com/benbjohnson/litestream.Lease","span":{"start":[27,1],"end":[27,63],"bytes":[539,601]}}],"return_type":"(*github.com/benbjohnson/litestream.Lease, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.Leaser.Type":{"id":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Leaser/github.com/benbjohnson/litestream.Leaser.Type","kind":"method","span":{"start":[25,1],"end":[25,15],"bytes":[473,487]},"signature":"github.com/benbjohnson/litestream.Leaser.Type","parameters":[],"return_type":"string","body":{}}}}},"functions":{},"content_hash":"86026b64494febb4e5dd447ddebcb76377306ae30fe8d8dcb68428d9833e9b1a"},"litestream.go":{"id":"can://go/litestream/litestream.go","kind":"module","span":{"start":[1,1],"end":[214,1],"bytes":[0,6059]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/superfly/ltx\"\n\t_ \"modernc.org/sqlite\"\n)\n\n// Naming constants.\nconst (\n\tMetaDirSuffix = \"-litestream\"\n)\n\n// SQLite checkpoint modes.\nconst (\n\tCheckpointModePassive = \"PASSIVE\"\n\tCheckpointModeFull = \"FULL\"\n\tCheckpointModeRestart = \"RESTART\"\n\tCheckpointModeTruncate = \"TRUNCATE\"\n)\n\n// Litestream errors.\nvar (\n\tErrNoSnapshots = errors.New(\"no snapshots available\")\n\tErrChecksumMismatch = errors.New(\"invalid replica, checksum mismatch\")\n\tErrLTXCorrupted = errors.New(\"ltx file corrupted\")\n\tErrLTXMissing = errors.New(\"ltx file missing\")\n\tErrDiskFull = errors.New(\"disk full\")\n)\n\n// LTXError provides detailed context for LTX file errors with recovery hints.\ntype LTXError struct {\n\tOp string // Operation that failed (e.g., \"open\", \"read\", \"validate\")\n\tPath string // File path\n\tLevel int // LTX level (0 = L0, etc.)\n\tMinTXID uint64 // Minimum transaction ID\n\tMaxTXID uint64 // Maximum transaction ID\n\tErr error // Underlying error\n\tHint string // Recovery hint for users\n}\n\nfunc (e *LTXError) Error() string {\n\tif e.Path != \"\" {\n\t\treturn e.Op + \" ltx file \" + e.Path + \": \" + e.Err.Error()\n\t}\n\treturn e.Op + \" ltx file: \" + e.Err.Error()\n}\n\nfunc (e *LTXError) Unwrap() error { return e.Err }\n\n// IsAutoRecoverable reports whether the underlying error indicates local state\n// corruption that can be fixed by resetting and re-downloading from remote.\n// Returns false for transient OS errors (EMFILE, EIO, EACCES) that should be\n// retried with backoff instead.\nfunc (e *LTXError) IsAutoRecoverable() bool {\n\tif os.IsNotExist(e.Err) || errors.Is(e.Err, ErrLTXMissing) {\n\t\treturn true\n\t}\n\tif errors.Is(e.Err, ErrLTXCorrupted) || errors.Is(e.Err, ErrChecksumMismatch) {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// NewLTXError creates a new LTX error with appropriate hints based on the error type.\nfunc NewLTXError(op, path string, level int, minTXID, maxTXID uint64, err error) *LTXError {\n\tltxErr := \u0026LTXError{\n\t\tOp: op,\n\t\tPath: path,\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tErr: err,\n\t}\n\n\t// Set appropriate hint based on error type\n\tif os.IsNotExist(err) || errors.Is(err, ErrLTXMissing) {\n\t\tltxErr.Hint = \"LTX file is missing. This can happen after VACUUM, manual checkpoint, or state corruption. \" +\n\t\t\t\"Run 'litestream reset \u003cdb\u003e' or delete the .sqlite-litestream directory and restart.\"\n\t} else if errors.Is(err, ErrLTXCorrupted) || errors.Is(err, ErrChecksumMismatch) {\n\t\tltxErr.Hint = \"LTX file is corrupted. Delete the .sqlite-litestream directory and restart to recover from replica.\"\n\t}\n\n\treturn ltxErr\n}\n\n// isShutdownError reports whether err is a context error caused by ctx itself\n// being done. Context errors that occur while ctx is still live, such as a\n// replica client whose credentials are bound to a cancelled context, are real\n// failures and must not be silently ignored.\nfunc isShutdownError(ctx context.Context, err error) bool {\n\treturn ctx.Err() != nil \u0026\u0026 (errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded))\n}\n\n// SQLite WAL constants.\nconst (\n\tWALHeaderChecksumOffset = 24\n\tWALFrameHeaderChecksumOffset = 16\n)\n\nvar (\n\t// LogWriter is the destination writer for all logging.\n\tLogWriter = os.Stdout\n\n\t// LogFlags are the flags passed to log.New().\n\tLogFlags = 0\n)\n\n// Checksum computes a running SQLite checksum over a byte slice.\nfunc Checksum(bo binary.ByteOrder, s0, s1 uint32, b []byte) (uint32, uint32) {\n\tassert(len(b)%8 == 0, \"misaligned checksum byte slice\")\n\n\t// Iterate over 8-byte units and compute checksum.\n\tfor i := 0; i \u003c len(b); i += 8 {\n\t\ts0 += bo.Uint32(b[i:]) + s1\n\t\ts1 += bo.Uint32(b[i+4:]) + s0\n\t}\n\treturn s0, s1\n}\n\nconst (\n\t// WALHeaderSize is the size of the WAL header, in bytes.\n\tWALHeaderSize = 32\n\n\t// WALFrameHeaderSize is the size of the WAL frame header, in bytes.\n\tWALFrameHeaderSize = 24\n)\n\n// rollback rolls back tx. Ignores already-rolled-back errors.\nfunc rollback(tx *sql.Tx) error {\n\tif err := tx.Rollback(); err != nil \u0026\u0026 !strings.Contains(err.Error(), `transaction has already been committed or rolled back`) {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// readWALHeader returns the header read from a WAL file.\nfunc readWALHeader(filename string) ([]byte, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tbuf := make([]byte, WALHeaderSize)\n\tn, err := io.ReadFull(f, buf)\n\treturn buf[:n], err\n}\n\n// readWALFileAt reads a slice from a file. Do not use this with database files\n// as it causes problems with non-OFD locks.\nfunc readWALFileAt(filename string, offset, n int64) ([]byte, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tbuf := make([]byte, n)\n\tif n, err := f.ReadAt(buf, offset); err != nil {\n\t\treturn buf[:n], err\n\t} else if n \u003c len(buf) {\n\t\treturn buf[:n], io.ErrUnexpectedEOF\n\t}\n\treturn buf, nil\n}\n\n// removeTmpFiles recursively finds and removes .tmp files.\nfunc removeTmpFiles(root string) error {\n\treturn filepath.Walk(root, func(path string, info os.FileInfo, err error) error {\n\t\tswitch {\n\t\tcase err != nil:\n\t\t\treturn nil // skip errored files\n\t\tcase info.IsDir():\n\t\t\treturn nil // skip directories\n\t\tcase !strings.HasSuffix(path, \".tmp\"):\n\t\t\treturn nil // skip non-temp files\n\t\tdefault:\n\t\t\treturn os.Remove(path)\n\t\t}\n\t})\n}\n\n// LTXDir returns the path to an LTX directory.\nfunc LTXDir(root string) string {\n\treturn path.Join(root, \"ltx\")\n}\n\n// LTXLevelDir returns the path to an LTX level directory.\nfunc LTXLevelDir(root string, level int) string {\n\treturn path.Join(LTXDir(root), strconv.Itoa(level))\n}\n\n// LTXFilePath returns the path to a single LTX file.\nfunc LTXFilePath(root string, level int, minTXID, maxTXID ltx.TXID) string {\n\treturn path.Join(LTXLevelDir(root, level), ltx.FormatFilename(minTXID, maxTXID))\n}\n\nfunc assert(condition bool, message string) {\n\tif !condition {\n\t\tpanic(\"assertion failed: \" + message)\n\t}\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"sql","path":"database/sql","span":{"start":[5,1],"end":[5,16],"bytes":[40,55]}},{"name":"binary","path":"encoding/binary","span":{"start":[6,1],"end":[6,19],"bytes":[56,74]}},{"name":"errors","path":"errors","span":{"start":[7,1],"end":[7,10],"bytes":[75,84]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[85,90]}},{"name":"os","path":"os","span":{"start":[9,1],"end":[9,6],"bytes":[91,96]}},{"name":"path","path":"path","span":{"start":[10,1],"end":[10,8],"bytes":[97,104]}},{"name":"filepath","path":"path/filepath","span":{"start":[11,1],"end":[11,17],"bytes":[105,121]}},{"name":"strconv","path":"strconv","span":{"start":[12,1],"end":[12,11],"bytes":[122,132]}},{"name":"strings","path":"strings","span":{"start":[13,1],"end":[13,11],"bytes":[133,143]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[15,1],"end":[15,27],"bytes":[145,171]}},{"name":"sqlite","path":"modernc.org/sqlite","alias":"_","span":{"start":[16,1],"end":[16,24],"bytes":[172,195]}}],"types":{"LTXError":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError","kind":"struct","span":{"start":[42,1],"end":[50,2],"bytes":[842,1178]},"callables":{"github.com/benbjohnson/litestream.LTXError.Error":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/github.com/benbjohnson/litestream.LTXError.Error","kind":"method","span":{"start":[52,1],"end":[57,2],"bytes":[1180,1345]},"signature":"github.com/benbjohnson/litestream.LTXError.Error","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{"54:48":{"kind":"call","span":{"start":[54,48],"end":[54,61],"bytes":[1282,1295]},"callee":null},"56:32":{"kind":"call","span":{"start":[56,32],"end":[56,45],"bytes":[1330,1343]},"callee":null}}},"github.com/benbjohnson/litestream.LTXError.IsAutoRecoverable":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/github.com/benbjohnson/litestream.LTXError.IsAutoRecoverable","kind":"method","span":{"start":[65,1],"end":[73,2],"bytes":[1667,1905]},"signature":"github.com/benbjohnson/litestream.LTXError.IsAutoRecoverable","parameters":[],"return_type":"bool","metrics":{"cyclomatic":3},"body":{"66:29":{"kind":"call","span":{"start":[66,29],"end":[66,60],"bytes":[1741,1772]},"callee":null},"66:5":{"kind":"call","span":{"start":[66,5],"end":[66,25],"bytes":[1717,1737]},"callee":null},"69:42":{"kind":"call","span":{"start":[69,42],"end":[69,79],"bytes":[1833,1870]},"callee":null},"69:5":{"kind":"call","span":{"start":[69,5],"end":[69,38],"bytes":[1796,1829]},"callee":null}}},"github.com/benbjohnson/litestream.LTXError.Unwrap":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/github.com/benbjohnson/litestream.LTXError.Unwrap","kind":"method","span":{"start":[59,1],"end":[59,51],"bytes":[1347,1397]},"signature":"github.com/benbjohnson/litestream.LTXError.Unwrap","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}}},"fields":{"Err":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/Err","kind":"field","type":"error","span":{"start":[48,1],"end":[48,36],"bytes":[1098,1133]}},"Hint":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/Hint","kind":"field","type":"string","span":{"start":[49,1],"end":[49,43],"bytes":[1134,1176]}},"Level":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/Level","kind":"field","type":"int","span":{"start":[45,1],"end":[45,44],"bytes":[970,1013]}},"MaxTXID":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/MaxTXID","kind":"field","type":"uint64","span":{"start":[47,1],"end":[47,42],"bytes":[1056,1097]}},"MinTXID":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/MinTXID","kind":"field","type":"uint64","span":{"start":[46,1],"end":[46,42],"bytes":[1014,1055]}},"Op":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/Op","kind":"field","type":"string","span":{"start":[43,1],"end":[43,76],"bytes":[865,940]}},"Path":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/Path","kind":"field","type":"string","span":{"start":[44,1],"end":[44,29],"bytes":[941,969]}}}}},"functions":{"github.com/benbjohnson/litestream.Checksum":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.Checksum","kind":"function","span":{"start":[120,1],"end":[129,2],"bytes":[3521,3825]},"signature":"github.com/benbjohnson/litestream.Checksum","parameters":[{"name":"bo","type":"encoding/binary.ByteOrder","span":{"start":[120,1],"end":[120,79],"bytes":[3521,3599]}},{"name":"s0","type":"uint32","span":{"start":[120,1],"end":[120,79],"bytes":[3521,3599]}},{"name":"s1","type":"uint32","span":{"start":[120,1],"end":[120,79],"bytes":[3521,3599]}},{"name":"b","type":"[]byte","span":{"start":[120,1],"end":[120,79],"bytes":[3521,3599]}}],"return_type":"(uint32, uint32)","metrics":{"cyclomatic":2},"body":{"121:2":{"kind":"call","span":{"start":[121,2],"end":[121,57],"bytes":[3601,3656]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert"},"121:9":{"kind":"call","span":{"start":[121,9],"end":[121,15],"bytes":[3608,3614]},"callee":null},"124:18":{"kind":"call","span":{"start":[124,18],"end":[124,24],"bytes":[3727,3733]},"callee":null},"125:9":{"kind":"call","span":{"start":[125,9],"end":[125,25],"bytes":[3752,3768]},"callee":null},"126:9":{"kind":"call","span":{"start":[126,9],"end":[126,27],"bytes":[3782,3800]},"callee":null}}},"github.com/benbjohnson/litestream.LTXDir":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXDir","kind":"function","span":{"start":[195,1],"end":[197,2],"bytes":[5502,5568]},"signature":"github.com/benbjohnson/litestream.LTXDir","parameters":[{"name":"root","type":"string","span":{"start":[195,1],"end":[195,34],"bytes":[5502,5535]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"196:9":{"kind":"call","span":{"start":[196,9],"end":[196,31],"bytes":[5544,5566]},"callee":null}}},"github.com/benbjohnson/litestream.LTXFilePath":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","kind":"function","span":{"start":[205,1],"end":[207,2],"bytes":[5789,5949]},"signature":"github.com/benbjohnson/litestream.LTXFilePath","parameters":[{"name":"root","type":"string","span":{"start":[205,1],"end":[205,77],"bytes":[5789,5865]}},{"name":"level","type":"int","span":{"start":[205,1],"end":[205,77],"bytes":[5789,5865]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[205,1],"end":[205,77],"bytes":[5789,5865]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[205,1],"end":[205,77],"bytes":[5789,5865]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"206:19":{"kind":"call","span":{"start":[206,19],"end":[206,43],"bytes":[5884,5908]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"206:45":{"kind":"call","span":{"start":[206,45],"end":[206,81],"bytes":[5910,5946]},"callee":null},"206:9":{"kind":"call","span":{"start":[206,9],"end":[206,82],"bytes":[5874,5947]},"callee":null}}},"github.com/benbjohnson/litestream.LTXLevelDir":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","kind":"function","span":{"start":[200,1],"end":[202,2],"bytes":[5629,5733]},"signature":"github.com/benbjohnson/litestream.LTXLevelDir","parameters":[{"name":"root","type":"string","span":{"start":[200,1],"end":[200,50],"bytes":[5629,5678]}},{"name":"level","type":"int","span":{"start":[200,1],"end":[200,50],"bytes":[5629,5678]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"201:19":{"kind":"call","span":{"start":[201,19],"end":[201,31],"bytes":[5697,5709]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXDir"},"201:33":{"kind":"call","span":{"start":[201,33],"end":[201,52],"bytes":[5711,5730]},"callee":null},"201:9":{"kind":"call","span":{"start":[201,9],"end":[201,53],"bytes":[5687,5731]},"callee":null}}},"github.com/benbjohnson/litestream.NewLTXError":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","kind":"function","span":{"start":[76,1],"end":[95,2],"bytes":[1994,2745]},"signature":"github.com/benbjohnson/litestream.NewLTXError","parameters":[{"name":"op","type":"string","span":{"start":[76,1],"end":[76,93],"bytes":[1994,2086]}},{"name":"path","type":"string","span":{"start":[76,1],"end":[76,93],"bytes":[1994,2086]}},{"name":"level","type":"int","span":{"start":[76,1],"end":[76,93],"bytes":[1994,2086]}},{"name":"minTXID","type":"uint64","span":{"start":[76,1],"end":[76,93],"bytes":[1994,2086]}},{"name":"maxTXID","type":"uint64","span":{"start":[76,1],"end":[76,93],"bytes":[1994,2086]}},{"name":"err","type":"error","span":{"start":[76,1],"end":[76,93],"bytes":[1994,2086]}}],"return_type":"*github.com/benbjohnson/litestream.LTXError","metrics":{"cyclomatic":3},"body":{"87:27":{"kind":"call","span":{"start":[87,27],"end":[87,56],"bytes":[2290,2319]},"callee":null},"87:5":{"kind":"call","span":{"start":[87,5],"end":[87,23],"bytes":[2268,2286]},"callee":null},"90:12":{"kind":"call","span":{"start":[90,12],"end":[90,43],"bytes":[2534,2565]},"callee":null},"90:47":{"kind":"call","span":{"start":[90,47],"end":[90,82],"bytes":[2569,2604]},"callee":null}}},"github.com/benbjohnson/litestream.assert":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert","kind":"function","span":{"start":[209,1],"end":[213,2],"bytes":[5951,6058]},"signature":"github.com/benbjohnson/litestream.assert","parameters":[{"name":"condition","type":"bool","span":{"start":[209,1],"end":[209,46],"bytes":[5951,5996]}},{"name":"message","type":"string","span":{"start":[209,1],"end":[209,46],"bytes":[5951,5996]}}],"metrics":{"cyclomatic":2},"body":{"211:3":{"kind":"call","span":{"start":[211,3],"end":[211,40],"bytes":[6016,6053]},"callee":null}}},"github.com/benbjohnson/litestream.isShutdownError":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","kind":"function","span":{"start":[101,1],"end":[103,2],"bytes":[3027,3195]},"signature":"github.com/benbjohnson/litestream.isShutdownError","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[101,1],"end":[101,60],"bytes":[3027,3086]}},{"name":"err","type":"error","span":{"start":[101,1],"end":[101,60],"bytes":[3027,3086]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"102:30":{"kind":"call","span":{"start":[102,30],"end":[102,62],"bytes":[3116,3148]},"callee":null},"102:66":{"kind":"call","span":{"start":[102,66],"end":[102,106],"bytes":[3152,3192]},"callee":null},"102:9":{"kind":"call","span":{"start":[102,9],"end":[102,18],"bytes":[3095,3104]},"callee":null}}},"github.com/benbjohnson/litestream.readWALFileAt":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALFileAt","kind":"function","span":{"start":[162,1],"end":[176,2],"bytes":[4684,5021]},"signature":"github.com/benbjohnson/litestream.readWALFileAt","parameters":[{"name":"filename","type":"string","span":{"start":[162,1],"end":[162,71],"bytes":[4684,4754]}},{"name":"offset","type":"int64","span":{"start":[162,1],"end":[162,71],"bytes":[4684,4754]}},{"name":"n","type":"int64","span":{"start":[162,1],"end":[162,71],"bytes":[4684,4754]}}],"return_type":"([]byte, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"163:12":{"kind":"call","span":{"start":[163,12],"end":[163,29],"bytes":[4766,4783]},"callee":null},"167:8":{"kind":"call","span":{"start":[167,8],"end":[167,17],"bytes":[4829,4838]},"callee":null},"169:9":{"kind":"call","span":{"start":[169,9],"end":[169,24],"bytes":[4848,4863]},"callee":null},"170:15":{"kind":"call","span":{"start":[170,15],"end":[170,36],"bytes":[4878,4899]},"callee":null},"172:16":{"kind":"call","span":{"start":[172,16],"end":[172,24],"bytes":[4951,4959]},"callee":null}}},"github.com/benbjohnson/litestream.readWALHeader":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader","kind":"function","span":{"start":[148,1],"end":[158,2],"bytes":[4329,4557]},"signature":"github.com/benbjohnson/litestream.readWALHeader","parameters":[{"name":"filename","type":"string","span":{"start":[148,1],"end":[148,54],"bytes":[4329,4382]}}],"return_type":"([]byte, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"149:12":{"kind":"call","span":{"start":[149,12],"end":[149,29],"bytes":[4394,4411]},"callee":null},"153:8":{"kind":"call","span":{"start":[153,8],"end":[153,17],"bytes":[4457,4466]},"callee":null},"155:9":{"kind":"call","span":{"start":[155,9],"end":[155,36],"bytes":[4476,4503]},"callee":null},"156:12":{"kind":"call","span":{"start":[156,12],"end":[156,31],"bytes":[4515,4534]},"callee":null}}},"github.com/benbjohnson/litestream.removeTmpFiles":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.removeTmpFiles","kind":"function","span":{"start":[179,1],"end":[192,2],"bytes":[5083,5452]},"signature":"github.com/benbjohnson/litestream.removeTmpFiles","parameters":[{"name":"root","type":"string","span":{"start":[179,1],"end":[179,41],"bytes":[5083,5123]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"180:9":{"kind":"call","span":{"start":[180,9],"end":[191,4],"bytes":[5132,5450]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.removeTmpFiles/github.com/benbjohnson/litestream.removeTmpFiles.closure_1","kind":"function","span":{"start":[180,1],"end":[191,4],"bytes":[5124,5450]},"signature":"github.com/benbjohnson/litestream.removeTmpFiles.closure_1","parameters":[{"name":"path","type":"string","span":{"start":[180,1],"end":[180,83],"bytes":[5124,5206]}},{"name":"info","type":"os.FileInfo","span":{"start":[180,1],"end":[180,83],"bytes":[5124,5206]}},{"name":"err","type":"error","span":{"start":[180,1],"end":[180,83],"bytes":[5124,5206]}}],"return_type":"error","error_channel":["error"],"body":{"184:8":{"kind":"call","span":{"start":[184,8],"end":[184,20],"bytes":[5280,5292]},"callee":null},"186:9":{"kind":"call","span":{"start":[186,9],"end":[186,40],"bytes":[5336,5367]},"callee":null},"189:11":{"kind":"call","span":{"start":[189,11],"end":[189,26],"bytes":[5427,5442]},"callee":null}}}}},"github.com/benbjohnson/litestream.rollback":{"id":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.rollback","kind":"function","span":{"start":[140,1],"end":[145,2],"bytes":[4076,4269]},"signature":"github.com/benbjohnson/litestream.rollback","parameters":[{"name":"tx","type":"*database/sql.Tx","span":{"start":[140,1],"end":[140,34],"bytes":[4076,4109]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"141:12":{"kind":"call","span":{"start":[141,12],"end":[141,25],"bytes":[4121,4134]},"callee":null},"141:42":{"kind":"call","span":{"start":[141,42],"end":[141,128],"bytes":[4151,4237]},"callee":null},"141:59":{"kind":"call","span":{"start":[141,59],"end":[141,70],"bytes":[4168,4179]},"callee":null}}}},"content_hash":"e4b652a8e8b83c18ff7d9f824a98e686528587ce7eba00d1a216bc5122e655b9"},"log.go":{"id":"can://go/litestream/log.go","kind":"module","span":{"start":[1,1],"end":[18,1],"bytes":[0,265]},"package":"litestream","source":"package litestream\n\nconst (\n\tLogKeySystem = \"system\"\n\tLogKeySubsystem = \"subsystem\"\n\tLogKeyDB = \"db\"\n)\n\nconst (\n\tLogSystemStore = \"store\"\n\tLogSystemServer = \"server\"\n)\n\nconst (\n\tLogSubsystemCompactor = \"compactor\"\n\tLogSubsystemWALReader = \"wal-reader\"\n)\n","imports":[],"types":{},"functions":{},"content_hash":"65bf3b1e8a77873e7202c299afb7bb22108561e035ee8dcd82da238b625816d4"},"mock/replica_client.go":{"id":"can://go/litestream/mock/replica_client.go","kind":"module","span":{"start":[1,1],"end":[54,1],"bytes":[0,1796]},"package":"mock","source":"package mock\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"log/slog\"\n\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\ntype ReplicaClient struct {\n\tInitFunc func(ctx context.Context) error\n\tDeleteAllFunc func(ctx context.Context) error\n\tLTXFilesFunc func(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error)\n\tOpenLTXFileFunc func(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error)\n\tWriteLTXFileFunc func(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, r io.Reader) (*ltx.FileInfo, error)\n\tDeleteLTXFilesFunc func(ctx context.Context, a []*ltx.FileInfo) error\n}\n\nfunc (c *ReplicaClient) Type() string { return \"mock\" }\n\nfunc (c *ReplicaClient) Init(ctx context.Context) error {\n\tif c.InitFunc != nil {\n\t\treturn c.InitFunc(ctx)\n\t}\n\treturn nil\n}\n\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\treturn c.DeleteAllFunc(ctx)\n}\n\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\treturn c.LTXFilesFunc(ctx, level, seek, useMetadata)\n}\n\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\treturn c.OpenLTXFileFunc(ctx, level, minTXID, maxTXID, offset, size)\n}\n\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, r io.Reader) (*ltx.FileInfo, error) {\n\treturn c.WriteLTXFileFunc(ctx, level, minTXID, maxTXID, r)\n}\n\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\treturn c.DeleteLTXFilesFunc(ctx, a)\n}\n\nfunc (c *ReplicaClient) SetLogger(_ *slog.Logger) {}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[23,33]}},{"name":"io","path":"io","span":{"start":[5,1],"end":[5,6],"bytes":[34,39]}},{"name":"slog","path":"log/slog","span":{"start":[6,1],"end":[6,12],"bytes":[40,51]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[8,1],"end":[8,27],"bytes":[53,79]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[10,1],"end":[10,37],"bytes":[81,117]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient","kind":"struct","span":{"start":[15,1],"end":[22,2],"bytes":[177,744]},"callables":{"github.com/benbjohnson/litestream/mock.ReplicaClient.DeleteAll":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.DeleteAll","kind":"method","span":{"start":[33,1],"end":[35,2],"bytes":[928,1021]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[33,1],"end":[33,63],"bytes":[928,990]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"34:9":{"kind":"call","span":{"start":[34,9],"end":[34,29],"bytes":[999,1019]},"callee":null}}},"github.com/benbjohnson/litestream/mock.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[49,1],"end":[51,2],"bytes":[1616,1741]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[49,1],"end":[49,87],"bytes":[1616,1702]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[49,1],"end":[49,87],"bytes":[1616,1702]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"50:9":{"kind":"call","span":{"start":[50,9],"end":[50,37],"bytes":[1711,1739]},"callee":null}}},"github.com/benbjohnson/litestream/mock.ReplicaClient.Init":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.Init","kind":"method","span":{"start":[26,1],"end":[31,2],"bytes":[803,926]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[26,1],"end":[26,58],"bytes":[803,860]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"28:10":{"kind":"call","span":{"start":[28,10],"end":[28,25],"bytes":[894,909]},"callee":null}}},"github.com/benbjohnson/litestream/mock.ReplicaClient.LTXFiles":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.LTXFiles","kind":"method","span":{"start":[37,1],"end":[39,2],"bytes":[1023,1204]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[37,1],"end":[37,126],"bytes":[1023,1148]}},{"name":"level","type":"int","span":{"start":[37,1],"end":[37,126],"bytes":[1023,1148]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[37,1],"end":[37,126],"bytes":[1023,1148]}},{"name":"useMetadata","type":"bool","span":{"start":[37,1],"end":[37,126],"bytes":[1023,1148]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"38:9":{"kind":"call","span":{"start":[38,9],"end":[38,54],"bytes":[1157,1202]},"callee":null}}},"github.com/benbjohnson/litestream/mock.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[41,1],"end":[43,2],"bytes":[1206,1417]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[41,1],"end":[41,140],"bytes":[1206,1345]}},{"name":"level","type":"int","span":{"start":[41,1],"end":[41,140],"bytes":[1206,1345]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[41,1],"end":[41,140],"bytes":[1206,1345]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[41,1],"end":[41,140],"bytes":[1206,1345]}},{"name":"offset","type":"int64","span":{"start":[41,1],"end":[41,140],"bytes":[1206,1345]}},{"name":"size","type":"int64","span":{"start":[41,1],"end":[41,140],"bytes":[1206,1345]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"42:9":{"kind":"call","span":{"start":[42,9],"end":[42,70],"bytes":[1354,1415]},"callee":null}}},"github.com/benbjohnson/litestream/mock.ReplicaClient.SetLogger":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.SetLogger","kind":"method","span":{"start":[53,1],"end":[53,53],"bytes":[1743,1795]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.SetLogger","parameters":[{"name":"_","type":"*log/slog.Logger","span":{"start":[53,1],"end":[53,53],"bytes":[1743,1795]}}],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/mock.ReplicaClient.Type":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.Type","kind":"method","span":{"start":[24,1],"end":[24,56],"bytes":[746,801]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/mock.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/github.com/benbjohnson/litestream/mock.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[45,1],"end":[47,2],"bytes":[1419,1614]},"signature":"github.com/benbjohnson/litestream/mock.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[45,1],"end":[45,134],"bytes":[1419,1552]}},{"name":"level","type":"int","span":{"start":[45,1],"end":[45,134],"bytes":[1419,1552]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[45,1],"end":[45,134],"bytes":[1419,1552]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[45,1],"end":[45,134],"bytes":[1419,1552]}},{"name":"r","type":"io.Reader","span":{"start":[45,1],"end":[45,134],"bytes":[1419,1552]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"46:9":{"kind":"call","span":{"start":[46,9],"end":[46,60],"bytes":[1561,1612]},"callee":null}}}},"fields":{"DeleteAllFunc":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/DeleteAllFunc","kind":"field","type":"func(ctx context.Context) error","span":{"start":[17,1],"end":[17,52],"bytes":[257,308]}},"DeleteLTXFilesFunc":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/DeleteLTXFilesFunc","kind":"field","type":"func(ctx context.Context, a []*github.com/superfly/ltx.FileInfo) error","span":{"start":[21,1],"end":[21,71],"bytes":[672,742]}},"InitFunc":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/InitFunc","kind":"field","type":"func(ctx context.Context) error","span":{"start":[16,1],"end":[16,52],"bytes":[205,256]}},"LTXFilesFunc":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/LTXFilesFunc","kind":"field","type":"func(ctx context.Context, level int, seek github.com/superfly/ltx.TXID, useMetadata bool) (github.com/superfly/ltx.FileIterator, error)","span":{"start":[18,1],"end":[18,116],"bytes":[309,424]}},"OpenLTXFileFunc":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/OpenLTXFileFunc","kind":"field","type":"func(ctx context.Context, level int, minTXID github.com/superfly/ltx.TXID, maxTXID github.com/superfly/ltx.TXID, offset int64, size int64) (io.ReadCloser, error)","span":{"start":[19,1],"end":[19,127],"bytes":[425,551]}},"WriteLTXFileFunc":{"id":"can://go/litestream/mock/replica_client.go/github.com/benbjohnson/litestream/mock.ReplicaClient/WriteLTXFileFunc","kind":"field","type":"func(ctx context.Context, level int, minTXID github.com/superfly/ltx.TXID, maxTXID github.com/superfly/ltx.TXID, r io.Reader) (*github.com/superfly/ltx.FileInfo, error)","span":{"start":[20,1],"end":[20,120],"bytes":[552,671]}}}}},"functions":{},"content_hash":"e4ae0946c515afc92b2b5c565860eb69a9495833baf931bf4947550cadb1926b"},"nats/replica_client.go":{"id":"can://go/litestream/nats/replica_client.go","kind":"module","span":{"start":[1,1],"end":[521,1],"bytes":[0,15428]},"package":"nats","source":"package nats\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/url\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/nats-io/nats.go\"\n\t\"github.com/nats-io/nats.go/jetstream\"\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"nats\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"nats\"\n\n// HeaderKeyTimestamp is the header key for storing LTX file timestamps in NATS object headers.\nconst HeaderKeyTimestamp = \"Litestream-Timestamp\"\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files to NATS JetStream Object Store.\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\tlogger *slog.Logger\n\n\t// NATS connection and JetStream context\n\tnc *nats.Conn\n\tjs jetstream.JetStream\n\tobjectStore jetstream.ObjectStore\n\n\t// Configuration\n\tURL string // NATS server URL\n\tBucketName string // Object store bucket name\n\tPath string // Base path for LTX files within the bucket\n\tJWT string // JWT token for authentication\n\tSeed string // Seed for JWT authentication\n\tCreds string // Credentials file path\n\tNKey string // NKey for authentication\n\tUsername string // Username for authentication\n\tPassword string // Password for authentication\n\tToken string // Token for authentication\n\tTLS bool // Enable TLS\n\tRootCAs []string // Root CA certificates\n\tClientCert string // Client certificate file path\n\tClientKey string // Client key file path\n\n\t// Note: Bucket configuration (replicas, storage, TTL, etc.) should be\n\t// managed externally via NATS CLI or API, not by Litestream\n\n\t// Connection options\n\tMaxReconnects int // Maximum reconnection attempts (-1 for unlimited)\n\tReconnectWait time.Duration // Wait time between reconnection attempts\n\tReconnectJitter time.Duration // Random jitter for reconnection\n\tTimeout time.Duration // Connection timeout\n\tPingInterval time.Duration // Ping interval\n\tMaxPingsOut int // Maximum number of pings without response\n\tReconnectBufSize int // Reconnection buffer size\n\tUserJWT func() (string, error) // JWT callback\n\tSigCB func([]byte) ([]byte, error) // Signature callback\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t\tMaxReconnects: -1, // Unlimited\n\t\tReconnectWait: 2 * time.Second,\n\t\tTimeout: 10 * time.Second,\n\t\tPingInterval: 2 * time.Minute,\n\t\tMaxPingsOut: 2,\n\t\tReconnectBufSize: 8 * 1024 * 1024, // 8MB\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\n// URL format: nats://[user:pass@]host[:port]/bucket\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tclient := NewReplicaClient()\n\n\t// Reconstruct URL without bucket path\n\tif host != \"\" {\n\t\tclient.URL = fmt.Sprintf(\"nats://%s\", host)\n\t}\n\n\t// Extract credentials from userinfo if present\n\tif userinfo != nil {\n\t\tclient.Username = userinfo.Username()\n\t\tclient.Password, _ = userinfo.Password()\n\t}\n\n\t// Extract bucket name from path\n\tbucket := strings.Trim(urlPath, \"/\")\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for nats replica URL\")\n\t}\n\tclient.BucketName = bucket\n\n\treturn client, nil\n}\n\n// Type returns \"nats\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init initializes the connection to NATS JetStream. No-op if already initialized.\nfunc (c *ReplicaClient) Init(ctx context.Context) error {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.objectStore != nil {\n\t\treturn nil\n\t}\n\n\tif c.nc == nil {\n\t\tif err := c.connect(ctx); err != nil {\n\t\t\treturn fmt.Errorf(\"nats: failed to connect: %w\", err)\n\t\t}\n\t}\n\n\tif err := c.initObjectStore(ctx); err != nil {\n\t\treturn fmt.Errorf(\"nats: failed to initialize object store: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// connect establishes a connection to NATS server with proper configuration.\nfunc (c *ReplicaClient) connect(_ context.Context) error {\n\turl := c.URL\n\tif url == \"\" {\n\t\turl = nats.DefaultURL\n\t}\n\n\tnc, err := nats.Connect(url, c.options()...)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect to NATS server: %w\", err)\n\t}\n\n\tjs, err := jetstream.New(nc)\n\tif err != nil {\n\t\tnc.Close()\n\t\treturn fmt.Errorf(\"failed to create JetStream context: %w\", err)\n\t}\n\n\tc.nc = nc\n\tc.js = js\n\treturn nil\n}\n\nfunc (c *ReplicaClient) options() []nats.Option {\n\topts := []nats.Option{\n\t\tnats.MaxReconnects(c.MaxReconnects),\n\t\tnats.ReconnectWait(c.ReconnectWait),\n\t\tnats.ReconnectJitter(c.ReconnectJitter, c.ReconnectJitter*2),\n\t\tnats.Timeout(c.Timeout),\n\t\tnats.PingInterval(c.PingInterval),\n\t\tnats.MaxPingsOutstanding(c.MaxPingsOut),\n\t\tnats.ReconnectBufSize(c.ReconnectBufSize),\n\t}\n\n\t// Authentication options\n\tswitch {\n\tcase c.JWT != \"\" \u0026\u0026 c.Seed != \"\":\n\t\topts = append(opts, nats.UserJWTAndSeed(c.JWT, c.Seed))\n\tcase c.Creds != \"\":\n\t\topts = append(opts, nats.UserCredentials(c.Creds))\n\tcase c.NKey != \"\":\n\t\topts = append(opts, nats.Nkey(c.NKey, c.SigCB))\n\tcase c.Username != \"\" \u0026\u0026 c.Password != \"\":\n\t\topts = append(opts, nats.UserInfo(c.Username, c.Password))\n\tcase c.Token != \"\":\n\t\topts = append(opts, nats.Token(c.Token))\n\t}\n\t// JWT callback\n\tif c.UserJWT != nil {\n\t\topts = append(opts, nats.UserJWT(c.UserJWT, c.SigCB))\n\t}\n\n\t// TLS configuration\n\tif c.TLS {\n\t\topts = append(opts, nats.Secure())\n\t}\n\n\tif c.ClientCert != \"\" \u0026\u0026 c.ClientKey != \"\" {\n\t\topts = append(opts, nats.ClientCert(c.ClientCert, c.ClientKey))\n\t}\n\n\tif len(c.RootCAs) \u003e 0 {\n\t\topts = append(opts, nats.RootCAs(c.RootCAs...))\n\t}\n\n\treturn opts\n}\n\n// initObjectStore retrieves the existing object store bucket.\n// The bucket must be pre-created using the NATS CLI or API.\nfunc (c *ReplicaClient) initObjectStore(ctx context.Context) error {\n\tif c.BucketName == \"\" {\n\t\treturn fmt.Errorf(\"bucket name is required\")\n\t}\n\n\t// Get existing object store - do not auto-create\n\tobjectStore, err := c.js.ObjectStore(ctx, c.BucketName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to access object store bucket %q (bucket must be created beforehand): %w\", c.BucketName, err)\n\t}\n\n\tc.objectStore = objectStore\n\treturn nil\n}\n\n// Close closes the NATS connection.\nfunc (c *ReplicaClient) Close() error {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.nc != nil {\n\t\tc.nc.Close()\n\t\tc.nc = nil\n\t\tc.js = nil\n\t\tc.objectStore = nil\n\t}\n\treturn nil\n}\n\n// ltxPath returns the object path for an LTX file.\nfunc (c *ReplicaClient) ltxPath(level int, minTXID, maxTXID ltx.TXID) string {\n\treturn litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n}\n\n// parseLTXPath parses an LTX object path and returns level, minTXID, and maxTXID.\nfunc (c *ReplicaClient) parseLTXPath(objPath string) (level int, minTXID, maxTXID ltx.TXID, err error) {\n\t// Remove the base path prefix if present\n\tif c.Path != \"\" \u0026\u0026 strings.HasPrefix(objPath, c.Path+\"/\") {\n\t\tobjPath = strings.TrimPrefix(objPath, c.Path+\"/\")\n\t}\n\n\t// Expected format: \"ltx/\u003clevel\u003e/\u003cminTXID\u003e-\u003cmaxTXID\u003e.ltx\"\n\tparts := strings.Split(objPath, \"/\")\n\tif len(parts) \u003c 3 || parts[0] != \"ltx\" {\n\t\treturn 0, 0, 0, fmt.Errorf(\"invalid ltx path: %s\", objPath)\n\t}\n\n\t// Parse level\n\tif level, err = strconv.Atoi(parts[1]); err != nil {\n\t\treturn 0, 0, 0, fmt.Errorf(\"invalid level in path %s: %w\", objPath, err)\n\t}\n\n\t// Parse filename (minTXID-maxTXID.ltx)\n\tfilename := parts[2]\n\tminTXIDVal, maxTXIDVal, err := ltx.ParseFilename(filename)\n\tif err != nil {\n\t\treturn 0, 0, 0, fmt.Errorf(\"invalid filename in path %s: %w\", objPath, err)\n\t}\n\n\treturn level, minTXIDVal, maxTXIDVal, nil\n}\n\n// LTXFiles returns an iterator of all LTX files on the replica for a given level.\n// NATS always uses accurate timestamps from headers since they're included in LIST operations at zero cost.\n// The useMetadata parameter is ignored.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// List all objects in the store\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"LIST\").Inc()\n\tobjectList, err := c.objectStore.List(ctx)\n\tif err != nil {\n\t\t// NATS returns \"no objects found\" when bucket is empty, treat as empty list\n\t\tif strings.Contains(err.Error(), \"no objects found\") {\n\t\t\tobjectList = nil // Empty list\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"failed to list objects: %w\", err)\n\t\t}\n\t}\n\n\tprefix := litestream.LTXLevelDir(c.Path, level) + \"/\"\n\tfileInfos := make([]*ltx.FileInfo, 0, len(objectList))\n\n\tfor _, objInfo := range objectList {\n\t\t// Filter by level prefix\n\t\tif !strings.HasPrefix(objInfo.Name, prefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfileLevel, minTXID, maxTXID, err := c.parseLTXPath(objInfo.Name)\n\t\tif err != nil {\n\t\t\tcontinue // Skip invalid paths\n\t\t}\n\n\t\tif fileLevel != level {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Apply seek filter\n\t\tif minTXID \u003c seek {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Always use accurate timestamp from headers since it's zero-cost\n\t\t// NATS includes headers in LIST operations, so no extra API call needed\n\t\tcreatedAt := objInfo.ModTime\n\t\tif objInfo.Headers != nil {\n\t\t\tif values, ok := objInfo.Headers[HeaderKeyTimestamp]; ok \u0026\u0026 len(values) \u003e 0 {\n\t\t\t\tif parsed, err := time.Parse(time.RFC3339Nano, values[0]); err == nil {\n\t\t\t\t\tcreatedAt = parsed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfileInfos = append(fileInfos, \u0026ltx.FileInfo{\n\t\t\tLevel: fileLevel,\n\t\t\tMinTXID: minTXID,\n\t\t\tMaxTXID: maxTXID,\n\t\t\tSize: int64(objInfo.Size),\n\t\t\tCreatedAt: createdAt,\n\t\t})\n\t}\n\n\t// Sort by minTXID\n\tsort.Slice(fileInfos, func(i, j int) bool {\n\t\treturn fileInfos[i].MinTXID \u003c fileInfos[j].MinTXID\n\t})\n\n\treturn \u0026ltxFileIterator{files: fileInfos, index: -1}, nil\n}\n\n// OpenLTXFile returns a reader that contains an LTX file at a given TXID range.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tobjectPath := c.ltxPath(level, minTXID, maxTXID)\n\n\tobjectResult, err := c.objectStore.Get(ctx, objectPath)\n\tif err != nil {\n\t\tif isNotFoundError(err) {\n\t\t\treturn nil, os.ErrNotExist\n\t\t}\n\t\treturn nil, fmt.Errorf(\"failed to get object %s: %w\", objectPath, err)\n\t}\n\n\t// Record metrics\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Inc()\n\t// Note: We can't get the size from NATS object reader directly, so we skip bytes counter\n\n\t// If offset is non-zero then discard the beginning bytes.\n\tif offset \u003e 0 {\n\t\tif _, err := io.CopyN(io.Discard, objectResult, offset); err != nil {\n\t\t\tobjectResult.Close()\n\t\t\treturn nil, fmt.Errorf(\"failed to discard offset bytes: %w\", err)\n\t\t}\n\t}\n\n\t// If size is non-zero then limit the reader to the size.\n\tif size \u003e 0 {\n\t\treturn internal.LimitReadCloser(objectResult, size), nil\n\t}\n\n\treturn objectResult, nil\n}\n\n// WriteLTXFile writes an LTX file to the replica.\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, r io.Reader) (*ltx.FileInfo, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tobjectPath := c.ltxPath(level, minTXID, maxTXID)\n\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(r, \u0026buf)\n\n\t// Extract timestamp from LTX header\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Combine buffered data with rest of reader\n\trc := internal.NewReadCounter(io.MultiReader(\u0026buf, r))\n\n\t// Store timestamp in NATS object headers for accurate timestamp retrieval\n\tobjectInfo, err := c.objectStore.Put(ctx, jetstream.ObjectMeta{\n\t\tName: objectPath,\n\t\tHeaders: map[string][]string{\n\t\t\tHeaderKeyTimestamp: {timestamp.Format(time.RFC3339Nano)},\n\t\t},\n\t}, rc)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to put object %s: %w\", objectPath, err)\n\t}\n\n\t// Record metrics\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(objectInfo.Size))\n\n\treturn \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: int64(objectInfo.Size),\n\t\tCreatedAt: timestamp,\n\t}, nil\n}\n\n// DeleteLTXFiles deletes one or more LTX files.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, fileInfo := range a {\n\t\tobjectPath := c.ltxPath(fileInfo.Level, fileInfo.MinTXID, fileInfo.MaxTXID)\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", fileInfo.Level, \"minTXID\", fileInfo.MinTXID, \"maxTXID\", fileInfo.MaxTXID, \"path\", objectPath)\n\n\t\tif err := c.objectStore.Delete(ctx, objectPath); err != nil {\n\t\t\tif !isNotFoundError(err) {\n\t\t\t\treturn fmt.Errorf(\"failed to delete object %s: %w\", objectPath, err)\n\t\t\t}\n\t\t}\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\treturn nil\n}\n\n// DeleteAll deletes all files in the object store.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\t// List all objects in the bucket\n\tobjectList, err := c.objectStore.List(ctx)\n\tif err != nil {\n\t\t// NATS returns \"no objects found\" when bucket is empty, treat as empty list\n\t\tif strings.Contains(err.Error(), \"no objects found\") {\n\t\t\tobjectList = nil // Empty list, nothing to delete\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"failed to list all objects: %w\", err)\n\t\t}\n\t}\n\n\tfor _, objInfo := range objectList {\n\t\tif err := c.objectStore.Delete(ctx, objInfo.Name); err != nil {\n\t\t\tif !isNotFoundError(err) {\n\t\t\t\treturn fmt.Errorf(\"failed to delete object %s: %w\", objInfo.Name, err)\n\t\t\t}\n\t\t}\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\treturn nil\n}\n\n// isNotFoundError checks if the error is a \"not found\" error.\nfunc isNotFoundError(err error) bool {\n\treturn err != nil \u0026\u0026 (errors.Is(err, jetstream.ErrObjectNotFound) || strings.Contains(err.Error(), \"not found\"))\n}\n\n// ltxFileIterator implements ltx.FileIterator for NATS object store.\ntype ltxFileIterator struct {\n\tfiles []*ltx.FileInfo\n\tindex int\n\terr error\n}\n\n// Next advances the iterator to the next file.\nfunc (itr *ltxFileIterator) Next() bool {\n\titr.index++\n\treturn itr.index \u003c len(itr.files)\n}\n\n// Item returns the current file info.\nfunc (itr *ltxFileIterator) Item() *ltx.FileInfo {\n\tif itr.index \u003c 0 || itr.index \u003e= len(itr.files) {\n\t\treturn nil\n\t}\n\treturn itr.files[itr.index]\n}\n\n// Err returns any error that occurred during iteration.\nfunc (itr *ltxFileIterator) Err() error {\n\treturn itr.err\n}\n\n// Close closes the iterator and returns any error that occurred during iteration.\nfunc (itr *ltxFileIterator) Close() error {\n\treturn itr.err\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[43,52]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[53,59]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[60,65]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[66,77]}},{"name":"url","path":"net/url","span":{"start":[10,1],"end":[10,11],"bytes":[78,88]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[89,94]}},{"name":"sort","path":"sort","span":{"start":[12,1],"end":[12,8],"bytes":[95,102]}},{"name":"strconv","path":"strconv","span":{"start":[13,1],"end":[13,11],"bytes":[103,113]}},{"name":"strings","path":"strings","span":{"start":[14,1],"end":[14,11],"bytes":[114,124]}},{"name":"sync","path":"sync","span":{"start":[15,1],"end":[15,8],"bytes":[125,132]}},{"name":"time","path":"time","span":{"start":[16,1],"end":[16,8],"bytes":[133,140]}},{"name":"nats.go","path":"github.com/nats-io/nats.go","span":{"start":[18,1],"end":[18,30],"bytes":[142,171]}},{"name":"jetstream","path":"github.com/nats-io/nats.go/jetstream","span":{"start":[19,1],"end":[19,40],"bytes":[172,211]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[20,1],"end":[20,27],"bytes":[212,238]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[22,1],"end":[22,37],"bytes":[240,276]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[23,1],"end":[23,46],"bytes":[277,322]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient","kind":"struct","span":{"start":[39,1],"end":[77,2],"bytes":[795,2563]},"callables":{"github.com/benbjohnson/litestream/nats.ReplicaClient.Close":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Close","kind":"method","span":{"start":[236,1],"end":[247,2],"bytes":[6815,6987]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"237:2":{"kind":"call","span":{"start":[237,2],"end":[237,13],"bytes":[6856,6867]},"callee":null},"238:8":{"kind":"call","span":{"start":[238,8],"end":[238,21],"bytes":[6875,6888]},"callee":null},"241:3":{"kind":"call","span":{"start":[241,3],"end":[241,15],"bytes":[6910,6922]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteAll":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteAll","kind":"method","span":{"start":[458,1],"end":[484,2],"bytes":[13661,14464]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[458,1],"end":[458,63],"bytes":[13661,13723]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"459:12":{"kind":"call","span":{"start":[459,12],"end":[459,23],"bytes":[13735,13746]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init"},"464:21":{"kind":"call","span":{"start":[464,21],"end":[464,44],"bytes":[13833,13856]},"callee":null},"467:23":{"kind":"call","span":{"start":[467,23],"end":[467,34],"bytes":[13975,13986]},"callee":null},"467:6":{"kind":"call","span":{"start":[467,6],"end":[467,55],"bytes":[13958,14007]},"callee":null},"470:11":{"kind":"call","span":{"start":[470,11],"end":[470,60],"bytes":[14084,14133]},"callee":null},"475:13":{"kind":"call","span":{"start":[475,13],"end":[475,52],"bytes":[14192,14231]},"callee":null},"476:8":{"kind":"call","span":{"start":[476,8],"end":[476,28],"bytes":[14253,14273]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError"},"477:12":{"kind":"call","span":{"start":[477,12],"end":[477,75],"bytes":[14287,14350]},"callee":null},"480:3":{"kind":"call","span":{"start":[480,3],"end":[480,81],"bytes":[14362,14440]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[436,1],"end":[455,2],"bytes":[12935,13607]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[436,1],"end":[436,87],"bytes":[12935,13021]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[436,1],"end":[436,87],"bytes":[12935,13021]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"437:12":{"kind":"call","span":{"start":[437,12],"end":[437,23],"bytes":[13033,13044]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init"},"442:17":{"kind":"call","span":{"start":[442,17],"end":[442,78],"bytes":[13122,13183]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath"},"444:3":{"kind":"call","span":{"start":[444,3],"end":[444,141],"bytes":[13187,13325]},"callee":null},"446:13":{"kind":"call","span":{"start":[446,13],"end":[446,50],"bytes":[13339,13376]},"callee":null},"447:8":{"kind":"call","span":{"start":[447,8],"end":[447,28],"bytes":[13398,13418]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError"},"448:12":{"kind":"call","span":{"start":[448,12],"end":[448,73],"bytes":[13432,13493]},"callee":null},"451:3":{"kind":"call","span":{"start":[451,3],"end":[451,81],"bytes":[13505,13583]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.Init":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","kind":"method","span":{"start":[129,1],"end":[148,2],"bytes":[4115,4513]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[129,1],"end":[129,58],"bytes":[4115,4172]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"130:2":{"kind":"call","span":{"start":[130,2],"end":[130,13],"bytes":[4174,4185]},"callee":null},"131:8":{"kind":"call","span":{"start":[131,8],"end":[131,21],"bytes":[4193,4206]},"callee":null},"138:13":{"kind":"call","span":{"start":[138,13],"end":[138,27],"bytes":[4282,4296]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.connect"},"139:11":{"kind":"call","span":{"start":[139,11],"end":[139,57],"bytes":[4321,4367]},"callee":null},"143:12":{"kind":"call","span":{"start":[143,12],"end":[143,34],"bytes":[4387,4409]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.initObjectStore"},"144:10":{"kind":"call","span":{"start":[144,10],"end":[144,72],"bytes":[4433,4495]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles","kind":"method","span":{"start":[285,1],"end":[351,2],"bytes":[8390,10248]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[285,1],"end":[285,126],"bytes":[8390,8515]}},{"name":"level","type":"int","span":{"start":[285,1],"end":[285,126],"bytes":[8390,8515]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[285,1],"end":[285,126],"bytes":[8390,8515]}},{"name":"useMetadata","type":"bool","span":{"start":[285,1],"end":[285,126],"bytes":[8390,8515]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"286:12":{"kind":"call","span":{"start":[286,12],"end":[286,23],"bytes":[8527,8538]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init"},"291:2":{"kind":"call","span":{"start":[291,2],"end":[291,78],"bytes":[8610,8686]},"callee":null},"292:21":{"kind":"call","span":{"start":[292,21],"end":[292,44],"bytes":[8713,8736]},"callee":null},"295:23":{"kind":"call","span":{"start":[295,23],"end":[295,34],"bytes":[8855,8866]},"callee":null},"295:6":{"kind":"call","span":{"start":[295,6],"end":[295,55],"bytes":[8838,8887]},"callee":null},"298:16":{"kind":"call","span":{"start":[298,16],"end":[298,61],"bytes":[8950,8995]},"callee":null},"302:12":{"kind":"call","span":{"start":[302,12],"end":[302,49],"bytes":[9015,9052]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"303:15":{"kind":"call","span":{"start":[303,15],"end":[303,56],"bytes":[9073,9114]},"callee":null},"303:40":{"kind":"call","span":{"start":[303,40],"end":[303,55],"bytes":[9098,9113]},"callee":null},"307:7":{"kind":"call","span":{"start":[307,7],"end":[307,46],"bytes":[9188,9227]},"callee":null},"311:39":{"kind":"call","span":{"start":[311,39],"end":[311,67],"bytes":[9285,9313]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.parseLTXPath"},"329:64":{"kind":"call","span":{"start":[329,64],"end":[329,75],"bytes":[9744,9755]},"callee":null},"330:23":{"kind":"call","span":{"start":[330,23],"end":[330,62],"bytes":[9784,9823]},"callee":null},"336:15":{"kind":"call","span":{"start":[336,15],"end":[342,5],"bytes":[9892,10060]},"callee":null},"340:15":{"kind":"call","span":{"start":[340,15],"end":[340,34],"bytes":[10010,10029]},"callee":null},"346:2":{"kind":"call","span":{"start":[346,2],"end":[348,4],"bytes":[10086,10186]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles/github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles.closure_1","kind":"function","span":{"start":[346,1],"end":[348,4],"bytes":[10085,10186]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles.closure_1","parameters":[{"name":"i","type":"int","span":{"start":[346,1],"end":[346,45],"bytes":[10085,10129]}},{"name":"j","type":"int","span":{"start":[346,1],"end":[346,45],"bytes":[10085,10129]}}],"return_type":"bool","body":{}}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[354,1],"end":[387,2],"bytes":[10331,11402]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[354,1],"end":[354,140],"bytes":[10331,10470]}},{"name":"level","type":"int","span":{"start":[354,1],"end":[354,140],"bytes":[10331,10470]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[354,1],"end":[354,140],"bytes":[10331,10470]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[354,1],"end":[354,140],"bytes":[10331,10470]}},{"name":"offset","type":"int64","span":{"start":[354,1],"end":[354,140],"bytes":[10331,10470]}},{"name":"size","type":"int64","span":{"start":[354,1],"end":[354,140],"bytes":[10331,10470]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"355:12":{"kind":"call","span":{"start":[355,12],"end":[355,23],"bytes":[10482,10493]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init"},"359:16":{"kind":"call","span":{"start":[359,16],"end":[359,50],"bytes":[10545,10579]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath"},"361:23":{"kind":"call","span":{"start":[361,23],"end":[361,57],"bytes":[10603,10637]},"callee":null},"363:6":{"kind":"call","span":{"start":[363,6],"end":[363,26],"bytes":[10660,10680]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError"},"366:15":{"kind":"call","span":{"start":[366,15],"end":[366,73],"bytes":[10731,10789]},"callee":null},"370:2":{"kind":"call","span":{"start":[370,2],"end":[370,77],"bytes":[10814,10889]},"callee":null},"375:16":{"kind":"call","span":{"start":[375,16],"end":[375,58],"bytes":[11080,11122]},"callee":null},"376:4":{"kind":"call","span":{"start":[376,4],"end":[376,24],"bytes":[11140,11160]},"callee":null},"377:16":{"kind":"call","span":{"start":[377,16],"end":[377,69],"bytes":[11176,11229]},"callee":null},"383:10":{"kind":"call","span":{"start":[383,10],"end":[383,54],"bytes":[11321,11365]},"callee":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser"}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.SetLogger":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.SetLogger","kind":"method","span":{"start":[92,1],"end":[94,2],"bytes":[2978,3084]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[92,1],"end":[92,57],"bytes":[2978,3034]}}],"metrics":{"cyclomatic":1},"body":{"93:13":{"kind":"call","span":{"start":[93,13],"end":[93,48],"bytes":[3047,3082]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.Type":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Type","kind":"method","span":{"start":[124,1],"end":[126,2],"bytes":[3962,4029]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/nats.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[390,1],"end":[433,2],"bytes":[11455,12884]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[390,1],"end":[390,134],"bytes":[11455,11588]}},{"name":"level","type":"int","span":{"start":[390,1],"end":[390,134],"bytes":[11455,11588]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[390,1],"end":[390,134],"bytes":[11455,11588]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[390,1],"end":[390,134],"bytes":[11455,11588]}},{"name":"r","type":"io.Reader","span":{"start":[390,1],"end":[390,134],"bytes":[11455,11588]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"391:12":{"kind":"call","span":{"start":[391,12],"end":[391,23],"bytes":[11600,11611]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init"},"395:16":{"kind":"call","span":{"start":[395,16],"end":[395,50],"bytes":[11663,11697]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath"},"399:15":{"kind":"call","span":{"start":[399,15],"end":[399,36],"bytes":[11808,11829]},"callee":null},"402:17":{"kind":"call","span":{"start":[402,17],"end":[402,42],"bytes":[11885,11910]},"callee":null},"404:15":{"kind":"call","span":{"start":[404,15],"end":[404,71],"bytes":[11942,11998]},"callee":null},"406:15":{"kind":"call","span":{"start":[406,15],"end":[406,44],"bytes":[12016,12045]},"callee":null},"409:32":{"kind":"call","span":{"start":[409,32],"end":[409,55],"bytes":[12130,12153]},"callee":null},"409:8":{"kind":"call","span":{"start":[409,8],"end":[409,56],"bytes":[12106,12154]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter"},"412:21":{"kind":"call","span":{"start":[412,21],"end":[417,8],"bytes":[12252,12422]},"callee":null},"415:25":{"kind":"call","span":{"start":[415,25],"end":[415,59],"bytes":[12373,12407]},"callee":null},"419:15":{"kind":"call","span":{"start":[419,15],"end":[419,73],"bytes":[12454,12512]},"callee":null},"423:2":{"kind":"call","span":{"start":[423,2],"end":[423,77],"bytes":[12537,12612]},"callee":null},"424:2":{"kind":"call","span":{"start":[424,2],"end":[424,77],"bytes":[12620,12695]},"callee":null},"424:82":{"kind":"call","span":{"start":[424,82],"end":[424,106],"bytes":[12700,12724]},"callee":null},"430:14":{"kind":"call","span":{"start":[430,14],"end":[430,36],"bytes":[12827,12849]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.connect":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.connect","kind":"method","span":{"start":[151,1],"end":[171,2],"bytes":[4593,5008]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.connect","parameters":[{"name":"_","type":"context.Context","span":{"start":[151,1],"end":[151,59],"bytes":[4593,4651]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"157:13":{"kind":"call","span":{"start":[157,13],"end":[157,46],"bytes":[4722,4755]},"callee":null},"157:31":{"kind":"call","span":{"start":[157,31],"end":[157,42],"bytes":[4740,4751]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.options"},"159:10":{"kind":"call","span":{"start":[159,10],"end":[159,65],"bytes":[4782,4837]},"callee":null},"162:13":{"kind":"call","span":{"start":[162,13],"end":[162,30],"bytes":[4854,4871]},"callee":null},"164:3":{"kind":"call","span":{"start":[164,3],"end":[164,13],"bytes":[4891,4901]},"callee":null},"165:10":{"kind":"call","span":{"start":[165,10],"end":[165,67],"bytes":[4911,4968]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.initObjectStore":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.initObjectStore","kind":"method","span":{"start":[220,1],"end":[233,2],"bytes":[6338,6776]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.initObjectStore","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[220,1],"end":[220,69],"bytes":[6338,6406]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"222:10":{"kind":"call","span":{"start":[222,10],"end":[222,47],"bytes":[6441,6478]},"callee":null},"226:22":{"kind":"call","span":{"start":[226,22],"end":[226,57],"bytes":[6555,6590]},"callee":null},"228:10":{"kind":"call","span":{"start":[228,10],"end":[228,122],"bytes":[6617,6729]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath","kind":"method","span":{"start":[250,1],"end":[252,2],"bytes":[7041,7185]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath","parameters":[{"name":"level","type":"int","span":{"start":[250,1],"end":[250,79],"bytes":[7041,7119]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[250,1],"end":[250,79],"bytes":[7041,7119]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[250,1],"end":[250,79],"bytes":[7041,7119]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"251:9":{"kind":"call","span":{"start":[251,9],"end":[251,64],"bytes":[7128,7183]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.options":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.options","kind":"method","span":{"start":[173,1],"end":[216,2],"bytes":[5010,6212]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.options","parameters":[],"return_type":"[]github.com/nats-io/nats.go.Option","metrics":{"cyclomatic":11},"body":{"175:3":{"kind":"call","span":{"start":[175,3],"end":[175,38],"bytes":[5086,5121]},"callee":null},"176:3":{"kind":"call","span":{"start":[176,3],"end":[176,38],"bytes":[5125,5160]},"callee":null},"177:3":{"kind":"call","span":{"start":[177,3],"end":[177,63],"bytes":[5164,5224]},"callee":null},"178:3":{"kind":"call","span":{"start":[178,3],"end":[178,26],"bytes":[5228,5251]},"callee":null},"179:3":{"kind":"call","span":{"start":[179,3],"end":[179,36],"bytes":[5255,5288]},"callee":null},"180:3":{"kind":"call","span":{"start":[180,3],"end":[180,42],"bytes":[5292,5331]},"callee":null},"181:3":{"kind":"call","span":{"start":[181,3],"end":[181,44],"bytes":[5335,5376]},"callee":null},"187:10":{"kind":"call","span":{"start":[187,10],"end":[187,58],"bytes":[5463,5511]},"callee":null},"187:23":{"kind":"call","span":{"start":[187,23],"end":[187,57],"bytes":[5476,5510]},"callee":null},"189:10":{"kind":"call","span":{"start":[189,10],"end":[189,53],"bytes":[5542,5585]},"callee":null},"189:23":{"kind":"call","span":{"start":[189,23],"end":[189,52],"bytes":[5555,5584]},"callee":null},"191:10":{"kind":"call","span":{"start":[191,10],"end":[191,50],"bytes":[5615,5655]},"callee":null},"191:23":{"kind":"call","span":{"start":[191,23],"end":[191,49],"bytes":[5628,5654]},"callee":null},"193:10":{"kind":"call","span":{"start":[193,10],"end":[193,61],"bytes":[5709,5760]},"callee":null},"193:23":{"kind":"call","span":{"start":[193,23],"end":[193,60],"bytes":[5722,5759]},"callee":null},"195:10":{"kind":"call","span":{"start":[195,10],"end":[195,43],"bytes":[5791,5824]},"callee":null},"195:23":{"kind":"call","span":{"start":[195,23],"end":[195,42],"bytes":[5804,5823]},"callee":null},"199:10":{"kind":"call","span":{"start":[199,10],"end":[199,56],"bytes":[5877,5923]},"callee":null},"199:23":{"kind":"call","span":{"start":[199,23],"end":[199,55],"bytes":[5890,5922]},"callee":null},"204:10":{"kind":"call","span":{"start":[204,10],"end":[204,37],"bytes":[5971,5998]},"callee":null},"204:23":{"kind":"call","span":{"start":[204,23],"end":[204,36],"bytes":[5984,5997]},"callee":null},"208:10":{"kind":"call","span":{"start":[208,10],"end":[208,66],"bytes":[6058,6114]},"callee":null},"208:23":{"kind":"call","span":{"start":[208,23],"end":[208,65],"bytes":[6071,6113]},"callee":null},"211:5":{"kind":"call","span":{"start":[211,5],"end":[211,19],"bytes":[6123,6137]},"callee":null},"212:10":{"kind":"call","span":{"start":[212,10],"end":[212,50],"bytes":[6153,6193]},"callee":null},"212:23":{"kind":"call","span":{"start":[212,23],"end":[212,49],"bytes":[6166,6192]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ReplicaClient.parseLTXPath":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.parseLTXPath","kind":"method","span":{"start":[255,1],"end":[280,2],"bytes":[7270,8155]},"signature":"github.com/benbjohnson/litestream/nats.ReplicaClient.parseLTXPath","parameters":[{"name":"objPath","type":"string","span":{"start":[255,1],"end":[255,105],"bytes":[7270,7374]}}],"return_type":"(int, github.com/superfly/ltx.TXID, github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"257:21":{"kind":"call","span":{"start":[257,21],"end":[257,59],"bytes":[7438,7476]},"callee":null},"258:13":{"kind":"call","span":{"start":[258,13],"end":[258,52],"bytes":[7491,7530]},"callee":null},"262:11":{"kind":"call","span":{"start":[262,11],"end":[262,38],"bytes":[7604,7631]},"callee":null},"263:5":{"kind":"call","span":{"start":[263,5],"end":[263,15],"bytes":[7636,7646]},"callee":null},"264:19":{"kind":"call","span":{"start":[264,19],"end":[264,62],"bytes":[7692,7735]},"callee":null},"268:18":{"kind":"call","span":{"start":[268,18],"end":[268,40],"bytes":[7773,7795]},"callee":null},"269:19":{"kind":"call","span":{"start":[269,19],"end":[269,75],"bytes":[7828,7884]},"callee":null},"274:33":{"kind":"call","span":{"start":[274,33],"end":[274,60],"bytes":[7984,8011]},"callee":null},"276:19":{"kind":"call","span":{"start":[276,19],"end":[276,78],"bytes":[8047,8106]},"callee":null}}}},"fields":{"BucketName":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/BucketName","kind":"field","type":"string","span":{"start":[50,1],"end":[50,49],"bytes":[1057,1105]}},"ClientCert":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/ClientCert","kind":"field","type":"string","span":{"start":[61,1],"end":[61,53],"bytes":[1604,1656]}},"ClientKey":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/ClientKey","kind":"field","type":"string","span":{"start":[62,1],"end":[62,45],"bytes":[1657,1701]}},"Creds":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Creds","kind":"field","type":"string","span":{"start":[54,1],"end":[54,46],"bytes":[1277,1322]}},"JWT":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/JWT","kind":"field","type":"string","span":{"start":[52,1],"end":[52,53],"bytes":[1172,1224]}},"MaxPingsOut":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/MaxPingsOut","kind":"field","type":"int","span":{"start":[73,1],"end":[73,91],"bytes":[2264,2354]}},"MaxReconnects":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/MaxReconnects","kind":"field","type":"int","span":{"start":[68,1],"end":[68,99],"bytes":[1861,1959]}},"NKey":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/NKey","kind":"field","type":"string","span":{"start":[55,1],"end":[55,48],"bytes":[1323,1370]}},"Password":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Password","kind":"field","type":"string","span":{"start":[57,1],"end":[57,52],"bytes":[1423,1474]}},"Path":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[51,1],"end":[51,66],"bytes":[1106,1171]}},"PingInterval":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/PingInterval","kind":"field","type":"time.Duration","span":{"start":[72,1],"end":[72,64],"bytes":[2200,2263]}},"ReconnectBufSize":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/ReconnectBufSize","kind":"field","type":"int","span":{"start":[74,1],"end":[74,75],"bytes":[2355,2429]}},"ReconnectJitter":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/ReconnectJitter","kind":"field","type":"time.Duration","span":{"start":[70,1],"end":[70,81],"bytes":[2050,2130]}},"ReconnectWait":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/ReconnectWait","kind":"field","type":"time.Duration","span":{"start":[69,1],"end":[69,90],"bytes":[1960,2049]}},"RootCAs":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/RootCAs","kind":"field","type":"[]string","span":{"start":[60,1],"end":[60,45],"bytes":[1559,1603]}},"Seed":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Seed","kind":"field","type":"string","span":{"start":[53,1],"end":[53,52],"bytes":[1225,1276]}},"SigCB":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/SigCB","kind":"field","type":"func([]byte) ([]byte, error)","span":{"start":[76,1],"end":[76,69],"bytes":[2493,2561]}},"TLS":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/TLS","kind":"field","type":"bool","span":{"start":[59,1],"end":[59,35],"bytes":[1524,1558]}},"Timeout":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Timeout","kind":"field","type":"time.Duration","span":{"start":[71,1],"end":[71,69],"bytes":[2131,2199]}},"Token":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Token","kind":"field","type":"string","span":{"start":[58,1],"end":[58,49],"bytes":[1475,1523]}},"URL":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/URL","kind":"field","type":"string","span":{"start":[49,1],"end":[49,40],"bytes":[1017,1056]}},"UserJWT":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/UserJWT","kind":"field","type":"func() (string, error)","span":{"start":[75,1],"end":[75,63],"bytes":[2430,2492]}},"Username":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/Username","kind":"field","type":"string","span":{"start":[56,1],"end":[56,52],"bytes":[1371,1422]}},"js":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/js","kind":"field","type":"github.com/nats-io/nats.go/jetstream.JetStream","span":{"start":[45,1],"end":[45,33],"bytes":[930,962]}},"logger":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[41,1],"end":[41,21],"bytes":[842,862]}},"mu":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[40,1],"end":[40,19],"bytes":[823,841]}},"nc":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/nc","kind":"field","type":"*github.com/nats-io/nats.go.Conn","span":{"start":[44,1],"end":[44,24],"bytes":[906,929]}},"objectStore":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/objectStore","kind":"field","type":"github.com/nats-io/nats.go/jetstream.ObjectStore","span":{"start":[46,1],"end":[46,35],"bytes":[963,997]}}}},"ltxFileIterator":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator","kind":"struct","span":{"start":[492,1],"end":[496,2],"bytes":[14755,14833]},"callables":{"github.com/benbjohnson/litestream/nats.ltxFileIterator.Close":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/github.com/benbjohnson/litestream/nats.ltxFileIterator.Close","kind":"method","span":{"start":[518,1],"end":[520,2],"bytes":[15366,15427]},"signature":"github.com/benbjohnson/litestream/nats.ltxFileIterator.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/nats.ltxFileIterator.Err":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/github.com/benbjohnson/litestream/nats.ltxFileIterator.Err","kind":"method","span":{"start":[513,1],"end":[515,2],"bytes":[15222,15281]},"signature":"github.com/benbjohnson/litestream/nats.ltxFileIterator.Err","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/nats.ltxFileIterator.Item":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/github.com/benbjohnson/litestream/nats.ltxFileIterator.Item","kind":"method","span":{"start":[505,1],"end":[510,2],"bytes":[15015,15163]},"signature":"github.com/benbjohnson/litestream/nats.ltxFileIterator.Item","parameters":[],"return_type":"*github.com/superfly/ltx.FileInfo","metrics":{"cyclomatic":2},"body":{"506:35":{"kind":"call","span":{"start":[506,35],"end":[506,49],"bytes":[15100,15114]},"callee":null}}},"github.com/benbjohnson/litestream/nats.ltxFileIterator.Next":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/github.com/benbjohnson/litestream/nats.ltxFileIterator.Next","kind":"method","span":{"start":[499,1],"end":[502,2],"bytes":[14883,14974]},"signature":"github.com/benbjohnson/litestream/nats.ltxFileIterator.Next","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"501:21":{"kind":"call","span":{"start":[501,21],"end":[501,35],"bytes":[14958,14972]},"callee":null}}}},"fields":{"err":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/err","kind":"field","type":"error","span":{"start":[495,1],"end":[495,13],"bytes":[14819,14831]}},"files":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/files","kind":"field","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[493,1],"end":[493,23],"bytes":[14785,14807]}},"index":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ltxFileIterator/index","kind":"field","type":"int","span":{"start":[494,1],"end":[494,11],"bytes":[14808,14818]}}}}},"functions":{"github.com/benbjohnson/litestream/nats.NewReplicaClient":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient","kind":"function","span":{"start":[80,1],"end":[90,2],"bytes":[2626,2976]},"signature":"github.com/benbjohnson/litestream/nats.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/nats.ReplicaClient","metrics":{"cyclomatic":1},"body":{"82:21":{"kind":"call","span":{"start":[82,21],"end":[82,35],"bytes":[2711,2725]},"callee":null}}},"github.com/benbjohnson/litestream/nats.NewReplicaClientFromURL":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClientFromURL","kind":"function","span":{"start":[99,1],"end":[121,2],"bytes":[3275,3917]},"signature":"github.com/benbjohnson/litestream/nats.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[99,1],"end":[99,137],"bytes":[3275,3411]}},{"name":"host","type":"string","span":{"start":[99,1],"end":[99,137],"bytes":[3275,3411]}},{"name":"urlPath","type":"string","span":{"start":[99,1],"end":[99,137],"bytes":[3275,3411]}},{"name":"query","type":"net/url.Values","span":{"start":[99,1],"end":[99,137],"bytes":[3275,3411]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[99,1],"end":[99,137],"bytes":[3275,3411]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"100:12":{"kind":"call","span":{"start":[100,12],"end":[100,30],"bytes":[3423,3441]},"callee":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient"},"104:16":{"kind":"call","span":{"start":[104,16],"end":[104,46],"bytes":[3515,3545]},"callee":null},"109:21":{"kind":"call","span":{"start":[109,21],"end":[109,40],"bytes":[3641,3660]},"callee":null},"110:24":{"kind":"call","span":{"start":[110,24],"end":[110,43],"bytes":[3684,3703]},"callee":null},"114:12":{"kind":"call","span":{"start":[114,12],"end":[114,38],"bytes":[3753,3779]},"callee":null},"116:15":{"kind":"call","span":{"start":[116,15],"end":[116,65],"bytes":[3813,3863]},"callee":null}}},"github.com/benbjohnson/litestream/nats.init":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.init","kind":"function","span":{"start":[26,1],"end":[28,2],"bytes":[326,415]},"signature":"github.com/benbjohnson/litestream/nats.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"27:2":{"kind":"call","span":{"start":[27,2],"end":[27,74],"bytes":[341,413]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}},"github.com/benbjohnson/litestream/nats.isNotFoundError":{"id":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError","kind":"function","span":{"start":[487,1],"end":[489,2],"bytes":[14529,14683]},"signature":"github.com/benbjohnson/litestream/nats.isNotFoundError","parameters":[{"name":"err","type":"error","span":{"start":[487,1],"end":[487,39],"bytes":[14529,14567]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"488:24":{"kind":"call","span":{"start":[488,24],"end":[488,67],"bytes":[14591,14634]},"callee":null},"488:71":{"kind":"call","span":{"start":[488,71],"end":[488,113],"bytes":[14638,14680]},"callee":null},"488:88":{"kind":"call","span":{"start":[488,88],"end":[488,99],"bytes":[14655,14666]},"callee":null}}}},"content_hash":"f98e6196bb9a1f560d754c595e7899192c063306a4efe6165f2801aa222ba8ec"},"oss/replica_client.go":{"id":"can://go/litestream/oss/replica_client.go","kind":"module","span":{"start":[1,1],"end":[727,1],"bytes":[0,19595]},"package":"oss","source":"package oss\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"regexp\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss\"\n\t\"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials\"\n\t\"github.com/superfly/ltx\"\n\t\"golang.org/x/sync/errgroup\"\n\t\"golang.org/x/sync/semaphore\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"oss\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"oss\"\n\n// MetadataKeyTimestamp is the metadata key for storing LTX file timestamps in OSS.\n// Note: OSS SDK automatically adds \"x-oss-meta-\" prefix when setting metadata.\nconst MetadataKeyTimestamp = \"litestream-timestamp\"\n\n// MaxKeys is the number of keys OSS can operate on per batch.\nconst MaxKeys = 1000\n\n// DefaultRegion is the region used if one is not specified.\nconst DefaultRegion = \"cn-hangzhou\"\n\n// DefaultMetadataConcurrency is the default number of concurrent HeadObject calls\n// for fetching accurate timestamps during timestamp-based restore.\nconst DefaultMetadataConcurrency = 50\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files to Alibaba Cloud OSS.\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\tclient *oss.Client\n\tuploader *oss.Uploader\n\tlogger *slog.Logger\n\n\t// Alibaba Cloud authentication keys.\n\tAccessKeyID string\n\tAccessKeySecret string\n\n\t// OSS bucket information\n\tRegion string\n\tBucket string\n\tPath string\n\tEndpoint string\n\n\t// Upload configuration\n\tPartSize int64 // Part size for multipart uploads (default: 5MB)\n\tConcurrency int // Number of concurrent parts to upload (default: 3)\n\n\t// MetadataConcurrency controls parallel HeadObject calls for timestamp-based restore.\n\t// Higher values improve restore speed for large backup histories.\n\t// Default: 50\n\tMetadataConcurrency int\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\n// URL format: oss://bucket[.oss-region.aliyuncs.com]/path\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tclient := NewReplicaClient()\n\n\tbucket, region, _ := ParseHost(host)\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for oss replica URL\")\n\t}\n\n\tclient.Bucket = bucket\n\tclient.Region = region\n\tclient.Path = urlPath\n\n\treturn client, nil\n}\n\n// Type returns \"oss\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init initializes the connection to OSS. No-op if already initialized.\nfunc (c *ReplicaClient) Init(ctx context.Context) (err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.client != nil {\n\t\treturn nil\n\t}\n\n\t// Validate required configuration\n\tif c.Bucket == \"\" {\n\t\treturn fmt.Errorf(\"oss: bucket name is required\")\n\t}\n\n\t// Use default region if not specified\n\tregion := c.Region\n\tif region == \"\" {\n\t\tregion = DefaultRegion\n\t}\n\n\t// Build configuration\n\tcfg := oss.LoadDefaultConfig()\n\n\t// Configure credentials\n\tif c.AccessKeyID != \"\" \u0026\u0026 c.AccessKeySecret != \"\" {\n\t\tcfg = cfg.WithCredentialsProvider(\n\t\t\tcredentials.NewStaticCredentialsProvider(c.AccessKeyID, c.AccessKeySecret),\n\t\t)\n\t} else {\n\t\t// Use environment variable credentials provider\n\t\tcfg = cfg.WithCredentialsProvider(\n\t\t\tcredentials.NewEnvironmentVariableCredentialsProvider(),\n\t\t)\n\t}\n\n\t// Configure region\n\tcfg = cfg.WithRegion(region)\n\n\t// Configure custom endpoint if specified\n\tif c.Endpoint != \"\" {\n\t\tendpoint := c.Endpoint\n\t\t// Add scheme if not present\n\t\tif !strings.HasPrefix(endpoint, \"http://\") \u0026\u0026 !strings.HasPrefix(endpoint, \"https://\") {\n\t\t\tendpoint = \"https://\" + endpoint\n\t\t}\n\t\tcfg = cfg.WithEndpoint(endpoint)\n\t}\n\n\t// Create OSS client\n\tc.client = oss.NewClient(cfg)\n\n\t// Create uploader with configurable part size and concurrency\n\tuploaderOpts := []func(*oss.UploaderOptions){}\n\tif c.PartSize \u003e 0 {\n\t\tuploaderOpts = append(uploaderOpts, func(o *oss.UploaderOptions) {\n\t\t\to.PartSize = c.PartSize\n\t\t})\n\t}\n\tif c.Concurrency \u003e 0 {\n\t\tuploaderOpts = append(uploaderOpts, func(o *oss.UploaderOptions) {\n\t\t\to.ParallelNum = c.Concurrency\n\t\t})\n\t}\n\tc.uploader = c.client.NewUploader(uploaderOpts...)\n\n\treturn nil\n}\n\n// LTXFiles returns an iterator over all LTX files on the replica for the given level.\n// When useMetadata is true, fetches accurate timestamps from OSS metadata via HeadObject.\n// This uses parallel batched requests (controlled by MetadataConcurrency) to avoid hangs\n// with large backup histories (see issue #930).\n// When false, uses fast LastModified timestamps from LIST operation.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newFileIterator(ctx, c, level, seek, useMetadata), nil\n}\n\n// OpenLTXFile returns a reader for an LTX file.\n// Returns os.ErrNotExist if no matching file is found.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Build the key from the file info\n\tfilename := ltx.FormatFilename(minTXID, maxTXID)\n\tkey := c.ltxPath(level, filename)\n\n\trequest := \u0026oss.GetObjectRequest{\n\t\tBucket: oss.Ptr(c.Bucket),\n\t\tKey: oss.Ptr(key),\n\t}\n\n\t// Set range header if offset is specified\n\tif size \u003e 0 {\n\t\trequest.RangeBehavior = oss.Ptr(\"standard\")\n\t\trequest.Range = oss.Ptr(fmt.Sprintf(\"bytes=%d-%d\", offset, offset+size-1))\n\t} else if offset \u003e 0 {\n\t\trequest.RangeBehavior = oss.Ptr(\"standard\")\n\t\trequest.Range = oss.Ptr(fmt.Sprintf(\"bytes=%d-\", offset))\n\t}\n\n\tresult, err := c.client.GetObject(ctx, request)\n\tif err != nil {\n\t\tif isNotExists(err) {\n\t\t\treturn nil, os.ErrNotExist\n\t\t}\n\t\treturn nil, fmt.Errorf(\"oss: get object %s: %w\", key, err)\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Inc()\n\n\treturn result.Body, nil\n}\n\n// WriteLTXFile writes an LTX file to the replica.\n// Extracts timestamp from LTX header and stores it in OSS metadata to preserve original creation time.\n// Uses multipart upload for large files via the uploader.\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, r io.Reader) (*ltx.FileInfo, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(r, \u0026buf)\n\n\t// Extract timestamp from LTX header\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Combine buffered data with rest of reader\n\trc := internal.NewReadCounter(io.MultiReader(\u0026buf, r))\n\n\tfilename := ltx.FormatFilename(minTXID, maxTXID)\n\tkey := c.ltxPath(level, filename)\n\n\t// Store timestamp in OSS metadata for accurate timestamp retrieval\n\tmetadata := map[string]string{\n\t\tMetadataKeyTimestamp: timestamp.Format(time.RFC3339Nano),\n\t}\n\n\t// Use uploader for automatic multipart handling (files \u003e5GB)\n\tresult, err := c.uploader.UploadFrom(ctx, \u0026oss.PutObjectRequest{\n\t\tBucket: oss.Ptr(c.Bucket),\n\t\tKey: oss.Ptr(key),\n\t\tMetadata: metadata,\n\t}, rc)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oss: upload to %s: %w\", key, err)\n\t}\n\n\t// Build file info from the uploaded file\n\tinfo := \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: rc.N(),\n\t\tCreatedAt: timestamp,\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(rc.N()))\n\n\t// ETag indicates successful upload\n\tif result.ETag == nil || *result.ETag == \"\" {\n\t\treturn nil, fmt.Errorf(\"oss: upload failed: no ETag returned\")\n\t}\n\n\treturn info, nil\n}\n\n// DeleteLTXFiles deletes one or more LTX files.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tif len(a) == 0 {\n\t\treturn nil\n\t}\n\n\t// Convert file infos to object identifiers\n\tobjects := make([]oss.DeleteObject, 0, len(a))\n\tfor _, info := range a {\n\t\tfilename := ltx.FormatFilename(info.MinTXID, info.MaxTXID)\n\t\tkey := c.ltxPath(info.Level, filename)\n\t\tobjects = append(objects, oss.DeleteObject{Key: oss.Ptr(key)})\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"key\", key)\n\t}\n\n\t// Delete in batches\n\tfor len(objects) \u003e 0 {\n\t\tn := min(len(objects), MaxKeys)\n\t\tbatch := objects[:n]\n\n\t\trequest := \u0026oss.DeleteMultipleObjectsRequest{\n\t\t\tBucket: oss.Ptr(c.Bucket),\n\t\t\tObjects: batch,\n\t\t}\n\n\t\tout, err := c.client.DeleteMultipleObjects(ctx, request)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"oss: delete batch of %d objects: %w\", n, err)\n\t\t} else if err := deleteResultError(batch, out); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\n\t\tobjects = objects[n:]\n\t}\n\n\treturn nil\n}\n\n// DeleteAll deletes all files.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tvar objects []oss.DeleteObject\n\n\t// Create paginator for listing objects\n\tprefix := c.Path + \"/\"\n\tpaginator := c.client.NewListObjectsV2Paginator(\u0026oss.ListObjectsV2Request{\n\t\tBucket: oss.Ptr(c.Bucket),\n\t\tPrefix: oss.Ptr(prefix),\n\t})\n\n\t// Iterate through all pages\n\tfor paginator.HasNext() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"oss: list objects page: %w\", err)\n\t\t}\n\n\t\t// Collect object identifiers\n\t\tfor _, obj := range page.Contents {\n\t\t\tif obj.Key != nil {\n\t\t\t\tobjects = append(objects, oss.DeleteObject{Key: obj.Key})\n\t\t\t}\n\t\t}\n\t}\n\n\t// Delete all collected objects in batches\n\tfor len(objects) \u003e 0 {\n\t\tn := min(len(objects), MaxKeys)\n\t\tbatch := objects[:n]\n\n\t\trequest := \u0026oss.DeleteMultipleObjectsRequest{\n\t\t\tBucket: oss.Ptr(c.Bucket),\n\t\t\tObjects: batch,\n\t\t}\n\n\t\tout, err := c.client.DeleteMultipleObjects(ctx, request)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"oss: delete all batch of %d objects: %w\", n, err)\n\t\t} else if err := deleteResultError(batch, out); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tobjects = objects[n:]\n\t}\n\n\treturn nil\n}\n\n// ltxPath returns the full path to an LTX file.\nfunc (c *ReplicaClient) ltxPath(level int, filename string) string {\n\treturn c.Path + \"/\" + fmt.Sprintf(\"%04x/%s\", level, filename)\n}\n\n// fileIterator represents an iterator over LTX files in OSS.\ntype fileIterator struct {\n\tctx context.Context\n\tcancel context.CancelFunc\n\tclient *ReplicaClient\n\tlevel int\n\tseek ltx.TXID\n\n\tuseMetadata bool // When true, fetch accurate timestamps from metadata\n\tmetadataCache map[string]time.Time // key -\u003e timestamp cache for batch fetches\n\n\tpaginator *oss.ListObjectsV2Paginator\n\tpage *oss.ListObjectsV2Result\n\tpageIndex int\n\tinitialized bool\n\n\tclosed bool\n\terr error\n\tinfo *ltx.FileInfo\n}\n\nfunc newFileIterator(ctx context.Context, client *ReplicaClient, level int, seek ltx.TXID, useMetadata bool) *fileIterator {\n\tctx, cancel := context.WithCancel(ctx)\n\n\titr := \u0026fileIterator{\n\t\tctx: ctx,\n\t\tcancel: cancel,\n\t\tclient: client,\n\t\tlevel: level,\n\t\tseek: seek,\n\t\tuseMetadata: useMetadata,\n\t\tmetadataCache: make(map[string]time.Time),\n\t}\n\n\treturn itr\n}\n\n// fetchMetadataBatch fetches timestamps from OSS metadata for a batch of keys in parallel.\nfunc (itr *fileIterator) fetchMetadataBatch(keys []string) error {\n\tif len(keys) == 0 {\n\t\treturn nil\n\t}\n\n\t// Determine concurrency limit\n\tconcurrency := itr.client.MetadataConcurrency\n\tif concurrency \u003c= 0 {\n\t\tconcurrency = DefaultMetadataConcurrency\n\t}\n\n\t// Pre-allocate results map to avoid lock contention during writes\n\tresults := make(map[string]time.Time, len(keys))\n\tvar mu sync.Mutex\n\n\t// Use x/sync/semaphore for precise concurrency control with context support\n\tsem := semaphore.NewWeighted(int64(concurrency))\n\tg, ctx := errgroup.WithContext(itr.ctx)\n\n\tfor _, key := range keys {\n\t\tkey := key // capture for goroutine\n\n\t\tg.Go(func() error {\n\t\t\t// Acquire semaphore slot (blocking with context cancellation)\n\t\t\tif err := sem.Acquire(ctx, 1); err != nil {\n\t\t\t\treturn err // context cancelled\n\t\t\t}\n\t\t\tdefer sem.Release(1)\n\n\t\t\thead, err := itr.client.client.HeadObject(ctx, \u0026oss.HeadObjectRequest{\n\t\t\t\tBucket: oss.Ptr(itr.client.Bucket),\n\t\t\t\tKey: oss.Ptr(key),\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\t// Non-fatal: file might not have metadata, use LastModified\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif head.Metadata != nil {\n\t\t\t\tif ts, ok := head.Metadata[MetadataKeyTimestamp]; ok {\n\t\t\t\t\tif parsed, err := time.Parse(time.RFC3339Nano, ts); err == nil {\n\t\t\t\t\t\tmu.Lock()\n\t\t\t\t\t\tresults[key] = parsed\n\t\t\t\t\t\tmu.Unlock()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t}\n\n\tif err := g.Wait(); err != nil {\n\t\treturn err\n\t}\n\n\t// Merge results into cache\n\tfor k, v := range results {\n\t\titr.metadataCache[k] = v\n\t}\n\treturn nil\n}\n\n// initPaginator initializes the paginator lazily.\nfunc (itr *fileIterator) initPaginator() {\n\tif itr.initialized {\n\t\treturn\n\t}\n\titr.initialized = true\n\n\t// Create paginator for listing objects with level prefix\n\tprefix := itr.client.ltxPath(itr.level, \"\")\n\titr.paginator = itr.client.client.NewListObjectsV2Paginator(\u0026oss.ListObjectsV2Request{\n\t\tBucket: oss.Ptr(itr.client.Bucket),\n\t\tPrefix: oss.Ptr(prefix),\n\t})\n}\n\n// Close stops iteration and returns any error that occurred during iteration.\nfunc (itr *fileIterator) Close() (err error) {\n\titr.closed = true\n\titr.cancel()\n\treturn itr.err\n}\n\n// Next returns the next file. Returns false when no more files are available.\nfunc (itr *fileIterator) Next() bool {\n\tif itr.closed || itr.err != nil {\n\t\treturn false\n\t}\n\n\t// Initialize paginator on first call\n\titr.initPaginator()\n\n\t// Process objects until we find a valid LTX file\n\tfor {\n\t\t// Load next page if needed\n\t\tif itr.page == nil || itr.pageIndex \u003e= len(itr.page.Contents) {\n\t\t\tif !itr.paginator.HasNext() {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tvar err error\n\t\t\titr.page, err = itr.paginator.NextPage(itr.ctx)\n\t\t\tif err != nil {\n\t\t\t\titr.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\titr.pageIndex = 0\n\n\t\t\t// Batch fetch metadata for the entire page when useMetadata is true.\n\t\t\t// This uses parallel HeadObject calls controlled by MetadataConcurrency\n\t\t\t// to avoid the O(N) sequential calls that caused restore hangs (issue #930).\n\t\t\tif itr.useMetadata \u0026\u0026 len(itr.page.Contents) \u003e 0 {\n\t\t\t\tkeys := make([]string, 0, len(itr.page.Contents))\n\t\t\t\tfor _, obj := range itr.page.Contents {\n\t\t\t\t\tif obj.Key != nil {\n\t\t\t\t\t\tkeys = append(keys, *obj.Key)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif err := itr.fetchMetadataBatch(keys); err != nil {\n\t\t\t\t\titr.err = err\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Process current object\n\t\tif itr.pageIndex \u003c len(itr.page.Contents) {\n\t\t\tobj := itr.page.Contents[itr.pageIndex]\n\t\t\titr.pageIndex++\n\n\t\t\tif obj.Key == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Extract file info from key\n\t\t\tfullKey := *obj.Key\n\t\t\tkey := path.Base(fullKey)\n\t\t\tminTXID, maxTXID, err := ltx.ParseFilename(key)\n\t\t\tif err != nil {\n\t\t\t\tcontinue // Skip non-LTX files\n\t\t\t}\n\n\t\t\t// Build file info\n\t\t\tinfo := \u0026ltx.FileInfo{\n\t\t\t\tLevel: itr.level,\n\t\t\t\tMinTXID: minTXID,\n\t\t\t\tMaxTXID: maxTXID,\n\t\t\t}\n\n\t\t\t// Skip if below seek TXID\n\t\t\tif info.MinTXID \u003c itr.seek {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Set file info\n\t\t\tinfo.Size = obj.Size\n\n\t\t\t// Use cached metadata timestamp if available (from batch fetch),\n\t\t\t// otherwise fallback to LastModified from LIST operation.\n\t\t\tif itr.useMetadata {\n\t\t\t\tif ts, ok := itr.metadataCache[fullKey]; ok {\n\t\t\t\t\tinfo.CreatedAt = ts\n\t\t\t\t} else if obj.LastModified != nil {\n\t\t\t\t\tinfo.CreatedAt = obj.LastModified.UTC()\n\t\t\t\t} else {\n\t\t\t\t\tinfo.CreatedAt = time.Now().UTC()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif obj.LastModified != nil {\n\t\t\t\t\tinfo.CreatedAt = obj.LastModified.UTC()\n\t\t\t\t} else {\n\t\t\t\t\tinfo.CreatedAt = time.Now().UTC()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titr.info = info\n\t\t\treturn true\n\t\t}\n\t}\n}\n\n// Item returns the metadata for the current file.\nfunc (itr *fileIterator) Item() *ltx.FileInfo {\n\treturn itr.info\n}\n\n// Err returns any error that occurred during iteration.\nfunc (itr *fileIterator) Err() error {\n\treturn itr.err\n}\n\n// ParseURL parses an OSS URL into its host and path parts.\nfunc ParseURL(s string) (bucket, region, key string, err error) {\n\tu, err := url.Parse(s)\n\tif err != nil {\n\t\treturn \"\", \"\", \"\", err\n\t}\n\n\tif u.Scheme != \"oss\" {\n\t\treturn \"\", \"\", \"\", fmt.Errorf(\"oss: invalid url scheme\")\n\t}\n\n\t// Parse host to extract bucket and region\n\tbucket, region, _ = ParseHost(u.Host)\n\tif bucket == \"\" {\n\t\tbucket = u.Host\n\t}\n\n\tkey = strings.TrimPrefix(u.Path, \"/\")\n\treturn bucket, region, key, nil\n}\n\n// ParseHost parses the host/endpoint for an OSS storage system.\n// Supports formats like:\n// - bucket.oss-cn-hangzhou.aliyuncs.com\n// - bucket.oss-cn-hangzhou-internal.aliyuncs.com\n// - bucket (just bucket name)\nfunc ParseHost(host string) (bucket, region, endpoint string) {\n\t// Check for internal OSS URL format first (more specific pattern)\n\tif a := ossInternalRegex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tbucket = a[1]\n\t\tif len(a) \u003e 2 \u0026\u0026 a[2] != \"\" {\n\t\t\tregion = a[2]\n\t\t}\n\t\treturn bucket, region, \"\"\n\t}\n\n\t// Check for standard OSS URL format\n\tif a := ossRegex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tbucket = a[1]\n\t\tif len(a) \u003e 2 \u0026\u0026 a[2] != \"\" {\n\t\t\tregion = a[2]\n\t\t}\n\t\treturn bucket, region, \"\"\n\t}\n\n\t// For other hosts, assume it's just the bucket name\n\treturn host, \"\", \"\"\n}\n\nvar (\n\t// oss-cn-hangzhou.aliyuncs.com or bucket.oss-cn-hangzhou.aliyuncs.com\n\tossRegex = regexp.MustCompile(`^(?:([^.]+)\\.)?oss-([^.]+)\\.aliyuncs\\.com$`)\n\t// oss-cn-hangzhou-internal.aliyuncs.com or bucket.oss-cn-hangzhou-internal.aliyuncs.com\n\t// Uses non-greedy .+? to correctly extract region without -internal suffix\n\tossInternalRegex = regexp.MustCompile(`^(?:([^.]+)\\.)?oss-(.+?)-internal\\.aliyuncs\\.com$`)\n)\n\nfunc isNotExists(err error) bool {\n\tvar serviceErr *oss.ServiceError\n\tif errors.As(err, \u0026serviceErr) {\n\t\treturn serviceErr.Code == \"NoSuchKey\"\n\t}\n\treturn false\n}\n\n// deleteResultError checks if all requested objects were deleted.\n// OSS SDK doesn't have explicit per-object error reporting like S3, so we verify\n// all requested keys appear in the deleted list.\nfunc deleteResultError(requested []oss.DeleteObject, out *oss.DeleteMultipleObjectsResult) error {\n\tif out == nil {\n\t\treturn nil\n\t}\n\n\t// Build set of deleted keys for quick lookup\n\tdeleted := make(map[string]struct{}, len(out.DeletedObjects))\n\tfor _, obj := range out.DeletedObjects {\n\t\tif obj.Key != nil {\n\t\t\tdeleted[*obj.Key] = struct{}{}\n\t\t}\n\t}\n\n\t// Check that all requested keys were deleted\n\tvar failed []string\n\tfor _, obj := range requested {\n\t\tif obj.Key == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := deleted[*obj.Key]; !ok {\n\t\t\tfailed = append(failed, *obj.Key)\n\t\t}\n\t}\n\n\tif len(failed) == 0 {\n\t\treturn nil\n\t}\n\n\t// Build error message listing failed keys\n\tvar b strings.Builder\n\tb.WriteString(\"oss: failed to delete files:\")\n\tfor _, key := range failed {\n\t\tfmt.Fprintf(\u0026b, \"\\n%s\", key)\n\t}\n\treturn errors.New(b.String())\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[22,30]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[31,41]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[42,51]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[52,58]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[59,64]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[65,76]}},{"name":"url","path":"net/url","span":{"start":[10,1],"end":[10,11],"bytes":[77,87]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[88,93]}},{"name":"path","path":"path","span":{"start":[12,1],"end":[12,8],"bytes":[94,101]}},{"name":"regexp","path":"regexp","span":{"start":[13,1],"end":[13,10],"bytes":[102,111]}},{"name":"strings","path":"strings","span":{"start":[14,1],"end":[14,11],"bytes":[112,122]}},{"name":"sync","path":"sync","span":{"start":[15,1],"end":[15,8],"bytes":[123,130]}},{"name":"time","path":"time","span":{"start":[16,1],"end":[16,8],"bytes":[131,138]}},{"name":"oss","path":"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss","span":{"start":[18,1],"end":[18,52],"bytes":[140,191]}},{"name":"credentials","path":"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials","span":{"start":[19,1],"end":[19,64],"bytes":[192,255]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[20,1],"end":[20,27],"bytes":[256,282]}},{"name":"errgroup","path":"golang.org/x/sync/errgroup","span":{"start":[21,1],"end":[21,30],"bytes":[283,312]}},{"name":"semaphore","path":"golang.org/x/sync/semaphore","span":{"start":[22,1],"end":[22,31],"bytes":[313,343]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[24,1],"end":[24,37],"bytes":[345,381]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[25,1],"end":[25,46],"bytes":[382,427]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient","kind":"struct","span":{"start":[52,1],"end":[76,2],"bytes":[1331,1999]},"callables":{"github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteAll":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteAll","kind":"method","span":{"start":[336,1],"end":[386,2],"bytes":[9636,10832]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[336,1],"end":[336,63],"bytes":[9636,9698]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"337:12":{"kind":"call","span":{"start":[337,12],"end":[337,23],"bytes":[9710,9721]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init"},"345:15":{"kind":"call","span":{"start":[345,15],"end":[348,4],"bytes":[9865,9986]},"callee":null},"346:11":{"kind":"call","span":{"start":[346,11],"end":[346,28],"bytes":[9937,9954]},"callee":null},"347:11":{"kind":"call","span":{"start":[347,11],"end":[347,26],"bytes":[9966,9981]},"callee":null},"351:6":{"kind":"call","span":{"start":[351,6],"end":[351,25],"bytes":[10023,10042]},"callee":null},"352:16":{"kind":"call","span":{"start":[352,16],"end":[352,39],"bytes":[10060,10083]},"callee":null},"354:11":{"kind":"call","span":{"start":[354,11],"end":[354,56],"bytes":[10112,10157]},"callee":null},"360:15":{"kind":"call","span":{"start":[360,15],"end":[360,62],"bytes":[10270,10317]},"callee":null},"366:6":{"kind":"call","span":{"start":[366,6],"end":[366,18],"bytes":[10380,10392]},"callee":null},"367:12":{"kind":"call","span":{"start":[367,12],"end":[367,24],"bytes":[10410,10422]},"callee":null},"367:8":{"kind":"call","span":{"start":[367,8],"end":[367,34],"bytes":[10406,10432]},"callee":null},"371:13":{"kind":"call","span":{"start":[371,13],"end":[371,30],"bytes":[10517,10534]},"callee":null},"375:15":{"kind":"call","span":{"start":[375,15],"end":[375,59],"bytes":[10574,10618]},"callee":null},"377:11":{"kind":"call","span":{"start":[377,11],"end":[377,72],"bytes":[10647,10708]},"callee":null},"378:20":{"kind":"call","span":{"start":[378,20],"end":[378,49],"bytes":[10728,10757]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.deleteResultError"}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[291,1],"end":[333,2],"bytes":[8451,9602]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[291,1],"end":[291,87],"bytes":[8451,8537]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[291,1],"end":[291,87],"bytes":[8451,8537]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"292:12":{"kind":"call","span":{"start":[292,12],"end":[292,23],"bytes":[8549,8560]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init"},"296:5":{"kind":"call","span":{"start":[296,5],"end":[296,11],"bytes":[8596,8602]},"callee":null},"301:13":{"kind":"call","span":{"start":[301,13],"end":[301,48],"bytes":[8684,8719]},"callee":null},"301:41":{"kind":"call","span":{"start":[301,41],"end":[301,47],"bytes":[8712,8718]},"callee":null},"303:15":{"kind":"call","span":{"start":[303,15],"end":[303,61],"bytes":[8760,8806]},"callee":null},"304:10":{"kind":"call","span":{"start":[304,10],"end":[304,41],"bytes":[8816,8847]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath"},"305:13":{"kind":"call","span":{"start":[305,13],"end":[305,65],"bytes":[8860,8912]},"callee":null},"305:51":{"kind":"call","span":{"start":[305,51],"end":[305,63],"bytes":[8898,8910]},"callee":null},"307:3":{"kind":"call","span":{"start":[307,3],"end":[307,121],"bytes":[8916,9034]},"callee":null},"311:6":{"kind":"call","span":{"start":[311,6],"end":[311,18],"bytes":[9066,9078]},"callee":null},"312:12":{"kind":"call","span":{"start":[312,12],"end":[312,24],"bytes":[9096,9108]},"callee":null},"312:8":{"kind":"call","span":{"start":[312,8],"end":[312,34],"bytes":[9092,9118]},"callee":null},"316:13":{"kind":"call","span":{"start":[316,13],"end":[316,30],"bytes":[9203,9220]},"callee":null},"320:15":{"kind":"call","span":{"start":[320,15],"end":[320,59],"bytes":[9260,9304]},"callee":null},"322:11":{"kind":"call","span":{"start":[322,11],"end":[322,68],"bytes":[9333,9390]},"callee":null},"323:20":{"kind":"call","span":{"start":[323,20],"end":[323,49],"bytes":[9410,9439]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.deleteResultError"},"327:3":{"kind":"call","span":{"start":[327,3],"end":[327,81],"bytes":[9475,9553]},"callee":null}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.Init":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init","kind":"method","span":{"start":[113,1],"end":[178,2],"bytes":[3063,4679]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[113,1],"end":[113,64],"bytes":[3063,3126]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"114:2":{"kind":"call","span":{"start":[114,2],"end":[114,13],"bytes":[3128,3139]},"callee":null},"115:8":{"kind":"call","span":{"start":[115,8],"end":[115,21],"bytes":[3147,3160]},"callee":null},"123:10":{"kind":"call","span":{"start":[123,10],"end":[123,52],"bytes":[3267,3309]},"callee":null},"133:9":{"kind":"call","span":{"start":[133,9],"end":[133,32],"bytes":[3454,3477]},"callee":null},"137:9":{"kind":"call","span":{"start":[137,9],"end":[139,4],"bytes":[3566,3677]},"callee":null},"138:4":{"kind":"call","span":{"start":[138,4],"end":[138,78],"bytes":[3598,3672]},"callee":null},"142:9":{"kind":"call","span":{"start":[142,9],"end":[144,4],"bytes":[3747,3839]},"callee":null},"143:4":{"kind":"call","span":{"start":[143,4],"end":[143,59],"bytes":[3779,3834]},"callee":null},"148:8":{"kind":"call","span":{"start":[148,8],"end":[148,30],"bytes":[3872,3894]},"callee":null},"154:50":{"kind":"call","span":{"start":[154,50],"end":[154,89],"bytes":[4067,4106]},"callee":null},"154:7":{"kind":"call","span":{"start":[154,7],"end":[154,45],"bytes":[4024,4062]},"callee":null},"157:9":{"kind":"call","span":{"start":[157,9],"end":[157,35],"bytes":[4157,4183]},"callee":null},"161:13":{"kind":"call","span":{"start":[161,13],"end":[161,31],"bytes":[4222,4240]},"callee":null},"166:18":{"kind":"call","span":{"start":[166,18],"end":[168,5],"bytes":[4392,4475]},"callee":null},"171:18":{"kind":"call","span":{"start":[171,18],"end":[173,5],"bytes":[4520,4609]},"callee":null},"175:15":{"kind":"call","span":{"start":[175,15],"end":[175,52],"bytes":[4627,4664]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init/github.com/benbjohnson/litestream/oss.ReplicaClient.Init.closure_1","kind":"function","span":{"start":[166,1],"end":[168,5],"bytes":[4375,4475]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.Init.closure_1","parameters":[{"name":"o","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.UploaderOptions","span":{"start":[166,1],"end":[166,69],"bytes":[4375,4443]}}],"body":{}},"closure_2":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init/github.com/benbjohnson/litestream/oss.ReplicaClient.Init.closure_2","kind":"function","span":{"start":[171,1],"end":[173,5],"bytes":[4503,4609]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.Init.closure_2","parameters":[{"name":"o","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.UploaderOptions","span":{"start":[171,1],"end":[171,69],"bytes":[4503,4571]}}],"body":{}}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.LTXFiles":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.LTXFiles","kind":"method","span":{"start":[185,1],"end":[190,2],"bytes":[5068,5316]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[185,1],"end":[185,126],"bytes":[5068,5193]}},{"name":"level","type":"int","span":{"start":[185,1],"end":[185,126],"bytes":[5068,5193]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[185,1],"end":[185,126],"bytes":[5068,5193]}},{"name":"useMetadata","type":"bool","span":{"start":[185,1],"end":[185,126],"bytes":[5068,5193]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"186:12":{"kind":"call","span":{"start":[186,12],"end":[186,23],"bytes":[5205,5216]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init"},"189:9":{"kind":"call","span":{"start":[189,9],"end":[189,58],"bytes":[5260,5309]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.newFileIterator"}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[194,1],"end":[228,2],"bytes":[5423,6452]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[194,1],"end":[194,140],"bytes":[5423,5562]}},{"name":"level","type":"int","span":{"start":[194,1],"end":[194,140],"bytes":[5423,5562]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[194,1],"end":[194,140],"bytes":[5423,5562]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[194,1],"end":[194,140],"bytes":[5423,5562]}},{"name":"offset","type":"int64","span":{"start":[194,1],"end":[194,140],"bytes":[5423,5562]}},{"name":"size","type":"int64","span":{"start":[194,1],"end":[194,140],"bytes":[5423,5562]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"195:12":{"kind":"call","span":{"start":[195,12],"end":[195,23],"bytes":[5574,5585]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init"},"200:14":{"kind":"call","span":{"start":[200,14],"end":[200,50],"bytes":[5672,5708]},"callee":null},"201:9":{"kind":"call","span":{"start":[201,9],"end":[201,35],"bytes":[5717,5743]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath"},"204:11":{"kind":"call","span":{"start":[204,11],"end":[204,28],"bytes":[5790,5807]},"callee":null},"205:11":{"kind":"call","span":{"start":[205,11],"end":[205,23],"bytes":[5819,5831]},"callee":null},"210:27":{"kind":"call","span":{"start":[210,27],"end":[210,46],"bytes":[5922,5941]},"callee":null},"211:19":{"kind":"call","span":{"start":[211,19],"end":[211,77],"bytes":[5960,6018]},"callee":null},"211:27":{"kind":"call","span":{"start":[211,27],"end":[211,76],"bytes":[5968,6017]},"callee":null},"213:27":{"kind":"call","span":{"start":[213,27],"end":[213,46],"bytes":[6069,6088]},"callee":null},"214:19":{"kind":"call","span":{"start":[214,19],"end":[214,60],"bytes":[6107,6148]},"callee":null},"214:27":{"kind":"call","span":{"start":[214,27],"end":[214,59],"bytes":[6115,6147]},"callee":null},"217:17":{"kind":"call","span":{"start":[217,17],"end":[217,49],"bytes":[6169,6201]},"callee":null},"219:6":{"kind":"call","span":{"start":[219,6],"end":[219,22],"bytes":[6224,6240]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.isNotExists"},"222:15":{"kind":"call","span":{"start":[222,15],"end":[222,61],"bytes":[6291,6337]},"callee":null},"225:2":{"kind":"call","span":{"start":[225,2],"end":[225,77],"bytes":[6343,6418]},"callee":null}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.SetLogger":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.SetLogger","kind":"method","span":{"start":[85,1],"end":[87,2],"bytes":[2188,2294]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[85,1],"end":[85,57],"bytes":[2188,2244]}}],"metrics":{"cyclomatic":1},"body":{"86:13":{"kind":"call","span":{"start":[86,13],"end":[86,48],"bytes":[2257,2292]},"callee":null}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.Type":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Type","kind":"method","span":{"start":[108,1],"end":[110,2],"bytes":[2921,2988]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[233,1],"end":[288,2],"bytes":[6668,8400]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[233,1],"end":[233,134],"bytes":[6668,6801]}},{"name":"level","type":"int","span":{"start":[233,1],"end":[233,134],"bytes":[6668,6801]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[233,1],"end":[233,134],"bytes":[6668,6801]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[233,1],"end":[233,134],"bytes":[6668,6801]}},{"name":"r","type":"io.Reader","span":{"start":[233,1],"end":[233,134],"bytes":[6668,6801]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"234:12":{"kind":"call","span":{"start":[234,12],"end":[234,23],"bytes":[6813,6824]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init"},"240:15":{"kind":"call","span":{"start":[240,15],"end":[240,36],"bytes":[6970,6991]},"callee":null},"243:17":{"kind":"call","span":{"start":[243,17],"end":[243,42],"bytes":[7047,7072]},"callee":null},"245:15":{"kind":"call","span":{"start":[245,15],"end":[245,71],"bytes":[7104,7160]},"callee":null},"247:15":{"kind":"call","span":{"start":[247,15],"end":[247,44],"bytes":[7178,7207]},"callee":null},"250:32":{"kind":"call","span":{"start":[250,32],"end":[250,55],"bytes":[7292,7315]},"callee":null},"250:8":{"kind":"call","span":{"start":[250,8],"end":[250,56],"bytes":[7268,7316]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter"},"252:14":{"kind":"call","span":{"start":[252,14],"end":[252,50],"bytes":[7331,7367]},"callee":null},"253:9":{"kind":"call","span":{"start":[253,9],"end":[253,35],"bytes":[7376,7402]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath"},"257:25":{"kind":"call","span":{"start":[257,25],"end":[257,59],"bytes":[7529,7563]},"callee":null},"261:17":{"kind":"call","span":{"start":[261,17],"end":[265,8],"bytes":[7648,7784]},"callee":null},"262:13":{"kind":"call","span":{"start":[262,13],"end":[262,30],"bytes":[7710,7727]},"callee":null},"263:13":{"kind":"call","span":{"start":[263,13],"end":[263,25],"bytes":[7741,7753]},"callee":null},"267:15":{"kind":"call","span":{"start":[267,15],"end":[267,60],"bytes":[7816,7861]},"callee":null},"275:14":{"kind":"call","span":{"start":[275,14],"end":[275,20],"bytes":[8010,8016]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N"},"279:2":{"kind":"call","span":{"start":[279,2],"end":[279,77],"bytes":[8047,8122]},"callee":null},"280:2":{"kind":"call","span":{"start":[280,2],"end":[280,77],"bytes":[8130,8205]},"callee":null},"280:82":{"kind":"call","span":{"start":[280,82],"end":[280,97],"bytes":[8210,8225]},"callee":null},"280:90":{"kind":"call","span":{"start":[280,90],"end":[280,96],"bytes":[8218,8224]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N"},"284:15":{"kind":"call","span":{"start":[284,15],"end":[284,65],"bytes":[8326,8376]},"callee":null}}},"github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath","kind":"method","span":{"start":[389,1],"end":[391,2],"bytes":[10883,11016]},"signature":"github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath","parameters":[{"name":"level","type":"int","span":{"start":[389,1],"end":[389,69],"bytes":[10883,10951]}},{"name":"filename","type":"string","span":{"start":[389,1],"end":[389,69],"bytes":[10883,10951]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"390:24":{"kind":"call","span":{"start":[390,24],"end":[390,63],"bytes":[10975,11014]},"callee":null}}}},"fields":{"AccessKeyID":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/AccessKeyID","kind":"field","type":"string","span":{"start":[59,1],"end":[59,24],"bytes":[1489,1512]}},"AccessKeySecret":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/AccessKeySecret","kind":"field","type":"string","span":{"start":[60,1],"end":[60,24],"bytes":[1513,1536]}},"Bucket":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/Bucket","kind":"field","type":"string","span":{"start":[64,1],"end":[64,17],"bytes":[1582,1598]}},"Concurrency":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/Concurrency","kind":"field","type":"int","span":{"start":[70,1],"end":[70,72],"bytes":[1728,1799]}},"Endpoint":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/Endpoint","kind":"field","type":"string","span":{"start":[66,1],"end":[66,17],"bytes":[1616,1632]}},"MetadataConcurrency":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/MetadataConcurrency","kind":"field","type":"int","span":{"start":[75,1],"end":[75,25],"bytes":[1973,1997]}},"PartSize":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/PartSize","kind":"field","type":"int64","span":{"start":[69,1],"end":[69,69],"bytes":[1659,1727]}},"Path":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[65,1],"end":[65,17],"bytes":[1599,1615]}},"Region":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/Region","kind":"field","type":"string","span":{"start":[63,1],"end":[63,17],"bytes":[1565,1581]}},"client":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/client","kind":"field","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.Client","span":{"start":[54,1],"end":[54,22],"bytes":[1380,1401]}},"logger":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[56,1],"end":[56,23],"bytes":[1426,1448]}},"mu":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[53,1],"end":[53,21],"bytes":[1359,1379]}},"uploader":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/uploader","kind":"field","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.Uploader","span":{"start":[55,1],"end":[55,24],"bytes":[1402,1425]}}}},"fileIterator":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator","kind":"struct","span":{"start":[394,1],"end":[412,2],"bytes":[11080,11547]},"callables":{"github.com/benbjohnson/litestream/oss.fileIterator.Close":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.Close","kind":"method","span":{"start":[509,1],"end":[513,2],"bytes":[14035,14132]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"511:2":{"kind":"call","span":{"start":[511,2],"end":[511,14],"bytes":[14102,14114]},"callee":null}}},"github.com/benbjohnson/litestream/oss.fileIterator.Err":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.Err","kind":"method","span":{"start":[619,1],"end":[621,2],"bytes":[16662,16718]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.Err","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/oss.fileIterator.Item":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.Item","kind":"method","span":{"start":[614,1],"end":[616,2],"bytes":[16537,16603]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.Item","parameters":[],"return_type":"*github.com/superfly/ltx.FileInfo","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/oss.fileIterator.Next":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.Next","kind":"method","span":{"start":[516,1],"end":[611,2],"bytes":[14213,16484]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.Next","parameters":[],"return_type":"bool","metrics":{"cyclomatic":18},"body":{"522:2":{"kind":"call","span":{"start":[522,2],"end":[522,21],"bytes":[14346,14365]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.initPaginator"},"527:42":{"kind":"call","span":{"start":[527,42],"end":[527,64],"bytes":[14496,14518]},"callee":null},"528:8":{"kind":"call","span":{"start":[528,8],"end":[528,31],"bytes":[14528,14551]},"callee":null},"533:20":{"kind":"call","span":{"start":[533,20],"end":[533,51],"bytes":[14613,14644]},"callee":null},"543:26":{"kind":"call","span":{"start":[543,26],"end":[543,48],"bytes":[14981,15003]},"callee":null},"544:13":{"kind":"call","span":{"start":[544,13],"end":[544,54],"bytes":[15022,15063]},"callee":null},"544:31":{"kind":"call","span":{"start":[544,31],"end":[544,53],"bytes":[15040,15062]},"callee":null},"547:14":{"kind":"call","span":{"start":[547,14],"end":[547,36],"bytes":[15146,15168]},"callee":null},"550:15":{"kind":"call","span":{"start":[550,15],"end":[550,43],"bytes":[15196,15224]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch"},"558:22":{"kind":"call","span":{"start":[558,22],"end":[558,44],"bytes":[15341,15363]},"callee":null},"568:11":{"kind":"call","span":{"start":[568,11],"end":[568,29],"bytes":[15537,15555]},"callee":null},"569:29":{"kind":"call","span":{"start":[569,29],"end":[569,51],"bytes":[15584,15606]},"callee":null},"595:23":{"kind":"call","span":{"start":[595,23],"end":[595,45],"bytes":[16207,16229]},"callee":null},"597:23":{"kind":"call","span":{"start":[597,23],"end":[597,33],"bytes":[16265,16275]},"callee":null},"601:23":{"kind":"call","span":{"start":[601,23],"end":[601,45],"bytes":[16355,16377]},"callee":null},"603:23":{"kind":"call","span":{"start":[603,23],"end":[603,33],"bytes":[16413,16423]},"callee":null}}},"github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch","kind":"method","span":{"start":[431,1],"end":[491,2],"bytes":[12043,13537]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch","parameters":[{"name":"keys","type":"[]string","span":{"start":[431,1],"end":[431,67],"bytes":[12043,12109]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"432:5":{"kind":"call","span":{"start":[432,5],"end":[432,14],"bytes":[12114,12123]},"callee":null},"443:13":{"kind":"call","span":{"start":[443,13],"end":[443,50],"bytes":[12377,12414]},"callee":null},"443:40":{"kind":"call","span":{"start":[443,40],"end":[443,49],"bytes":[12404,12413]},"callee":null},"447:31":{"kind":"call","span":{"start":[447,31],"end":[447,49],"bytes":[12543,12561]},"callee":null},"447:9":{"kind":"call","span":{"start":[447,9],"end":[447,50],"bytes":[12521,12562]},"callee":null},"448:12":{"kind":"call","span":{"start":[448,12],"end":[448,41],"bytes":[12574,12603]},"callee":null},"453:3":{"kind":"call","span":{"start":[453,3],"end":[479,5],"bytes":[12674,13380]},"callee":null},"482:12":{"kind":"call","span":{"start":[482,12],"end":[482,20],"bytes":[13396,13404]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch/github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch.closure_1","kind":"function","span":{"start":[453,1],"end":[479,5],"bytes":[12672,13380]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch.closure_1","parameters":[],"return_type":"error","error_channel":["error"],"body":{"455:14":{"kind":"call","span":{"start":[455,14],"end":[455,33],"bytes":[12773,12792]},"callee":null},"458:10":{"kind":"call","span":{"start":[458,10],"end":[458,24],"bytes":[12857,12871]},"callee":null},"460:17":{"kind":"call","span":{"start":[460,17],"end":[463,6],"bytes":[12889,13018]},"callee":null},"461:13":{"kind":"call","span":{"start":[461,13],"end":[461,39],"bytes":[12959,12985]},"callee":null},"462:13":{"kind":"call","span":{"start":[462,13],"end":[462,25],"bytes":[12999,13011]},"callee":null},"471:24":{"kind":"call","span":{"start":[471,24],"end":[471,56],"bytes":[13235,13267]},"callee":null},"472:7":{"kind":"call","span":{"start":[472,7],"end":[472,16],"bytes":[13288,13297]},"callee":null},"474:7":{"kind":"call","span":{"start":[474,7],"end":[474,18],"bytes":[13332,13343]},"callee":null}}}}},"github.com/benbjohnson/litestream/oss.fileIterator.initPaginator":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.initPaginator","kind":"method","span":{"start":[494,1],"end":[506,2],"bytes":[13590,13954]},"signature":"github.com/benbjohnson/litestream/oss.fileIterator.initPaginator","parameters":[],"metrics":{"cyclomatic":2},"body":{"501:12":{"kind":"call","span":{"start":[501,12],"end":[501,45],"bytes":[13762,13795]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath"},"502:18":{"kind":"call","span":{"start":[502,18],"end":[505,4],"bytes":[13813,13952]},"callee":null},"503:11":{"kind":"call","span":{"start":[503,11],"end":[503,37],"bytes":[13894,13920]},"callee":null},"504:11":{"kind":"call","span":{"start":[504,11],"end":[504,26],"bytes":[13932,13947]},"callee":null}}}},"fields":{"cancel":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/cancel","kind":"field","type":"context.CancelFunc","span":{"start":[396,1],"end":[396,27],"bytes":[11131,11157]}},"client":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/client","kind":"field","type":"*github.com/benbjohnson/litestream/oss.ReplicaClient","span":{"start":[397,1],"end":[397,23],"bytes":[11158,11180]}},"closed":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/closed","kind":"field","type":"bool","span":{"start":[409,1],"end":[409,13],"bytes":[11497,11509]}},"ctx":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/ctx","kind":"field","type":"context.Context","span":{"start":[395,1],"end":[395,24],"bytes":[11107,11130]}},"err":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/err","kind":"field","type":"error","span":{"start":[410,1],"end":[410,14],"bytes":[11510,11523]}},"info":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/info","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[411,1],"end":[411,22],"bytes":[11524,11545]}},"initialized":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/initialized","kind":"field","type":"bool","span":{"start":[407,1],"end":[407,18],"bytes":[11478,11495]}},"level":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/level","kind":"field","type":"int","span":{"start":[398,1],"end":[398,12],"bytes":[11181,11192]}},"metadataCache":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/metadataCache","kind":"field","type":"map[string]time.Time","span":{"start":[402,1],"end":[402,80],"bytes":[11301,11380]}},"page":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/page","kind":"field","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.ListObjectsV2Result","span":{"start":[405,1],"end":[405,38],"bytes":[11423,11460]}},"pageIndex":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/pageIndex","kind":"field","type":"int","span":{"start":[406,1],"end":[406,17],"bytes":[11461,11477]}},"paginator":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/paginator","kind":"field","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.ListObjectsV2Paginator","span":{"start":[404,1],"end":[404,41],"bytes":[11382,11422]}},"seek":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/seek","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[399,1],"end":[399,17],"bytes":[11193,11209]}},"useMetadata":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/useMetadata","kind":"field","type":"bool","span":{"start":[401,1],"end":[401,90],"bytes":[11211,11300]}}}}},"functions":{"github.com/benbjohnson/litestream/oss.NewReplicaClient":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient","kind":"function","span":{"start":[79,1],"end":[83,2],"bytes":[2062,2186]},"signature":"github.com/benbjohnson/litestream/oss.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/oss.ReplicaClient","metrics":{"cyclomatic":1},"body":{"81:11":{"kind":"call","span":{"start":[81,11],"end":[81,25],"bytes":[2137,2151]},"callee":null}}},"github.com/benbjohnson/litestream/oss.NewReplicaClientFromURL":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClientFromURL","kind":"function","span":{"start":[92,1],"end":[105,2],"bytes":[2491,2877]},"signature":"github.com/benbjohnson/litestream/oss.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[92,1],"end":[92,137],"bytes":[2491,2627]}},{"name":"host","type":"string","span":{"start":[92,1],"end":[92,137],"bytes":[2491,2627]}},{"name":"urlPath","type":"string","span":{"start":[92,1],"end":[92,137],"bytes":[2491,2627]}},{"name":"query","type":"net/url.Values","span":{"start":[92,1],"end":[92,137],"bytes":[2491,2627]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[92,1],"end":[92,137],"bytes":[2491,2627]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"93:12":{"kind":"call","span":{"start":[93,12],"end":[93,30],"bytes":[2639,2657]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient"},"95:23":{"kind":"call","span":{"start":[95,23],"end":[95,38],"bytes":[2681,2696]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost"},"97:15":{"kind":"call","span":{"start":[97,15],"end":[97,64],"bytes":[2730,2779]},"callee":null}}},"github.com/benbjohnson/litestream/oss.ParseHost":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost","kind":"function","span":{"start":[649,1],"end":[670,2],"bytes":[17421,17991]},"signature":"github.com/benbjohnson/litestream/oss.ParseHost","parameters":[{"name":"host","type":"string","span":{"start":[649,1],"end":[649,64],"bytes":[17421,17484]}}],"return_type":"(string, string, string)","metrics":{"cyclomatic":5},"body":{"651:10":{"kind":"call","span":{"start":[651,10],"end":[651,51],"bytes":[17562,17603]},"callee":null},"651:53":{"kind":"call","span":{"start":[651,53],"end":[651,59],"bytes":[17605,17611]},"callee":null},"653:6":{"kind":"call","span":{"start":[653,6],"end":[653,12],"bytes":[17639,17645]},"callee":null},"660:10":{"kind":"call","span":{"start":[660,10],"end":[660,43],"bytes":[17766,17799]},"callee":null},"660:45":{"kind":"call","span":{"start":[660,45],"end":[660,51],"bytes":[17801,17807]},"callee":null},"662:6":{"kind":"call","span":{"start":[662,6],"end":[662,12],"bytes":[17835,17841]},"callee":null}}},"github.com/benbjohnson/litestream/oss.ParseURL":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseURL","kind":"function","span":{"start":[624,1],"end":[642,2],"bytes":[16780,17200]},"signature":"github.com/benbjohnson/litestream/oss.ParseURL","parameters":[{"name":"s","type":"string","span":{"start":[624,1],"end":[624,66],"bytes":[16780,16845]}}],"return_type":"(string, string, string, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"625:12":{"kind":"call","span":{"start":[625,12],"end":[625,24],"bytes":[16857,16869]},"callee":null},"631:22":{"kind":"call","span":{"start":[631,22],"end":[631,59],"bytes":[16961,16998]},"callee":null},"635:22":{"kind":"call","span":{"start":[635,22],"end":[635,39],"bytes":[17068,17085]},"callee":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost"},"640:8":{"kind":"call","span":{"start":[640,8],"end":[640,39],"bytes":[17134,17165]},"callee":null}}},"github.com/benbjohnson/litestream/oss.deleteResultError":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.deleteResultError","kind":"function","span":{"start":[691,1],"end":[726,2],"bytes":[18772,19594]},"signature":"github.com/benbjohnson/litestream/oss.deleteResultError","parameters":[{"name":"requested","type":"[]github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.DeleteObject","span":{"start":[691,1],"end":[691,99],"bytes":[18772,18870]}},{"name":"out","type":"*github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss.DeleteMultipleObjectsResult","span":{"start":[691,1],"end":[691,99],"bytes":[18772,18870]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"697:13":{"kind":"call","span":{"start":[697,13],"end":[697,63],"bytes":[18964,19014]},"callee":null},"697:39":{"kind":"call","span":{"start":[697,39],"end":[697,62],"bytes":[18990,19013]},"callee":null},"711:13":{"kind":"call","span":{"start":[711,13],"end":[711,37],"bytes":[19311,19335]},"callee":null},"715:5":{"kind":"call","span":{"start":[715,5],"end":[715,16],"bytes":[19348,19359]},"callee":null},"721:2":{"kind":"call","span":{"start":[721,2],"end":[721,47],"bytes":[19452,19497]},"callee":null},"723:3":{"kind":"call","span":{"start":[723,3],"end":[723,31],"bytes":[19530,19558]},"callee":null},"725:20":{"kind":"call","span":{"start":[725,20],"end":[725,30],"bytes":[19581,19591]},"callee":null},"725:9":{"kind":"call","span":{"start":[725,9],"end":[725,31],"bytes":[19570,19592]},"callee":null}}},"github.com/benbjohnson/litestream/oss.init":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.init","kind":"function","span":{"start":[28,1],"end":[30,2],"bytes":[431,519]},"signature":"github.com/benbjohnson/litestream/oss.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"29:2":{"kind":"call","span":{"start":[29,2],"end":[29,73],"bytes":[446,517]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}},"github.com/benbjohnson/litestream/oss.isNotExists":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.isNotExists","kind":"function","span":{"start":[680,1],"end":[686,2],"bytes":[18410,18571]},"signature":"github.com/benbjohnson/litestream/oss.isNotExists","parameters":[{"name":"err","type":"error","span":{"start":[680,1],"end":[680,35],"bytes":[18410,18444]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"682:5":{"kind":"call","span":{"start":[682,5],"end":[682,32],"bytes":[18483,18510]},"callee":null}}},"github.com/benbjohnson/litestream/oss.newFileIterator":{"id":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.newFileIterator","kind":"function","span":{"start":[414,1],"end":[428,2],"bytes":[11549,11949]},"signature":"github.com/benbjohnson/litestream/oss.newFileIterator","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[414,1],"end":[414,125],"bytes":[11549,11673]}},{"name":"client","type":"*github.com/benbjohnson/litestream/oss.ReplicaClient","span":{"start":[414,1],"end":[414,125],"bytes":[11549,11673]}},{"name":"level","type":"int","span":{"start":[414,1],"end":[414,125],"bytes":[11549,11673]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[414,1],"end":[414,125],"bytes":[11549,11673]}},{"name":"useMetadata","type":"bool","span":{"start":[414,1],"end":[414,125],"bytes":[11549,11673]}}],"return_type":"*github.com/benbjohnson/litestream/oss.fileIterator","metrics":{"cyclomatic":1},"body":{"415:17":{"kind":"call","span":{"start":[415,17],"end":[415,40],"bytes":[11690,11713]},"callee":null},"424:18":{"kind":"call","span":{"start":[424,18],"end":[424,44],"bytes":[11904,11930]},"callee":null}}}},"content_hash":"c4aa5689e4bfc9330f1ff5f76ce0208a37895f43f5de7ca9427f243d3f037e17"},"replica.go":{"id":"can://go/litestream/replica.go","kind":"module","span":{"start":[1,1],"end":[1847,1],"bytes":[0,54263]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"crypto/rand\"\n\t\"database/sql\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/superfly/ltx\"\n\t\"golang.org/x/sync/semaphore\"\n\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\n// Default replica settings.\nconst (\n\tDefaultSyncInterval = 1 * time.Second\n\tDefaultMaxSyncLTXFiles = 256\n)\n\nvar errReplicaWaitForData = errors.New(\"no position, waiting for data\")\n\n// Replica connects a database to a replication destination via a ReplicaClient.\n// The replica manages periodic synchronization and maintaining the current\n// replica position.\ntype Replica struct {\n\tdb *DB\n\n\tmu sync.RWMutex\n\tpos ltx.Pos // current replicated position\n\n\tsyncSem *semaphore.Weighted\n\tsyncWaiters atomic.Int64 // diagnostic instrumentation: goroutines queued on syncSem\n\n\tmuf sync.Mutex\n\tf *os.File // long-running file descriptor to avoid non-OFD lock issues\n\n\twg sync.WaitGroup\n\tcancel func()\n\n\t// Client used to connect to the remote replica.\n\tClient ReplicaClient\n\n\t// Time between syncs with the shadow WAL.\n\tSyncInterval time.Duration\n\n\t// Maximum L0 files to upload in a single monitor sync batch.\n\t// Set to zero to process all pending L0 files in one batch.\n\tMaxSyncLTXFiles int\n\n\t// If true, replica monitors database for changes automatically.\n\t// Set to false if replica is being used synchronously (such as in tests).\n\tMonitorEnabled bool\n\n\t// If true, automatically reset local state when LTX errors are detected.\n\t// This allows recovery from corrupted/missing LTX files by resetting\n\t// the position file and removing local LTX files, forcing a fresh sync.\n\t// Disabled by default to prevent silent data loss scenarios.\n\tAutoRecoverEnabled bool\n}\n\nfunc NewReplica(db *DB) *Replica {\n\tr := \u0026Replica{\n\t\tdb: db,\n\t\tsyncSem: semaphore.NewWeighted(1),\n\t\tcancel: func() {},\n\n\t\tSyncInterval: DefaultSyncInterval,\n\t\tMaxSyncLTXFiles: DefaultMaxSyncLTXFiles,\n\t\tMonitorEnabled: true,\n\t}\n\n\treturn r\n}\n\nfunc NewReplicaWithClient(db *DB, client ReplicaClient) *Replica {\n\tr := NewReplica(db)\n\tr.Client = client\n\treturn r\n}\n\n// Logger returns the DB sub-logger for this replica.\nfunc (r *Replica) Logger() *slog.Logger {\n\tlogger := slog.Default()\n\tif r.db != nil {\n\t\tlogger = r.db.Logger\n\t}\n\treturn logger.With(\"replica\", r.Client.Type())\n}\n\n// DB returns a reference to the database the replica is attached to, if any.\nfunc (r *Replica) DB() *DB { return r.db }\n\n// Starts replicating in a background goroutine.\nfunc (r *Replica) Start(ctx context.Context) error {\n\t// Ignore if replica is being used sychronously.\n\tif !r.MonitorEnabled {\n\t\treturn nil\n\t}\n\n\t// Stop previous replication.\n\tr.Stop(false)\n\n\t// Wrap context with cancelation.\n\tctx, r.cancel = context.WithCancel(ctx)\n\n\t// Start goroutine to replicate data.\n\tr.wg.Add(1)\n\tgo func() { defer r.wg.Done(); r.monitor(ctx) }()\n\n\treturn nil\n}\n\n// Stop cancels any outstanding replication and blocks until finished.\n//\n// Performing a hard stop will close the DB file descriptor which could release\n// locks on per-process locks. Hard stops should only be performed when\n// stopping the entire process.\nfunc (r *Replica) Stop(hard bool) (err error) {\n\tr.cancel()\n\tr.wg.Wait()\n\n\tr.muf.Lock()\n\tdefer r.muf.Unlock()\n\tif hard \u0026\u0026 r.f != nil {\n\t\tif e := r.f.Close(); e != nil \u0026\u0026 err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\treturn err\n}\n\n// Sync copies new WAL frames from the shadow WAL to the replica client.\n// Only one Sync can run at a time to prevent concurrent uploads of the same file.\nfunc (r *Replica) Sync(ctx context.Context) (err error) {\n\treturn r.sync(ctx, 0)\n}\n\nfunc (r *Replica) sync(ctx context.Context, maxSyncLTXFiles int) error {\n\tfor {\n\t\tresult, err := r.syncOnce(ctx, maxSyncLTXFiles)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t} else if !result.limited {\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\ntype replicaSyncResult struct {\n\tsynced bool\n\tlimited bool\n}\n\nfunc (r *Replica) syncOnce(ctx context.Context, maxSyncLTXFiles int) (result replicaSyncResult, err error) {\n\tif err := r.lockSync(ctx); err != nil {\n\t\treturn result, err\n\t}\n\tdefer r.syncSem.Release(1)\n\n\t// Clear last position if if an error occurs during sync.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tr.mu.Lock()\n\t\t\tr.pos = ltx.Pos{}\n\t\t\tr.mu.Unlock()\n\t\t}\n\t}()\n\n\tif err := ctx.Err(); err != nil {\n\t\treturn result, context.Cause(ctx)\n\t}\n\n\t// Calculate current replica position, if unknown.\n\tif r.Pos().IsZero() {\n\t\tpos, err := r.calcPos(ctx)\n\t\tif err != nil {\n\t\t\treturn result, fmt.Errorf(\"calc pos: %w\", err)\n\t\t}\n\t\tr.SetPos(pos)\n\t}\n\n\t// Find current position of database.\n\tdpos, err := r.db.Pos()\n\tif err != nil {\n\t\treturn result, fmt.Errorf(\"cannot determine current position: %w\", err)\n\t} else if dpos.IsZero() {\n\t\treturn result, errReplicaWaitForData\n\t}\n\n\tr.Logger().Debug(\"replica sync\",\n\t\tslog.Group(\"txid\",\n\t\t\tslog.String(\"replica\", r.Pos().TXID.String()),\n\t\t\tslog.String(\"db\", dpos.TXID.String()),\n\t\t))\n\n\t// Replicate all L0 LTX files since last replica position.\n\tfor txID, syncedFileN := r.Pos().TXID+1, 0; txID \u003c= dpos.TXID; txID = r.Pos().TXID + 1 {\n\t\tif maxSyncLTXFiles \u003e 0 \u0026\u0026 syncedFileN \u003e= maxSyncLTXFiles {\n\t\t\tresult.limited = true\n\t\t\t// Uploads succeeded, so record sync health; otherwise a\n\t\t\t// sustained backlog reads as unhealthy while progressing.\n\t\t\tr.db.RecordSuccessfulSync()\n\t\t\tr.Logger().Debug(\"replica sync limited\",\n\t\t\t\t\"synced_files\", syncedFileN,\n\t\t\t\t\"db_txid\", dpos.TXID.String(),\n\t\t\t\t\"replica_txid\", r.Pos().TXID.String())\n\t\t\treturn result, nil\n\t\t}\n\t\tif err := ctx.Err(); err != nil {\n\t\t\treturn result, context.Cause(ctx)\n\t\t}\n\t\tif err := r.uploadLTXFile(ctx, 0, txID, txID); err != nil {\n\t\t\treturn result, err\n\t\t}\n\t\tr.SetPos(ltx.Pos{TXID: txID})\n\t\tresult.synced = true\n\t\tsyncedFileN++\n\t}\n\n\t// Record successful sync for heartbeat monitoring.\n\tr.db.RecordSuccessfulSync()\n\n\treturn result, nil\n}\n\nfunc (r *Replica) lockSync(ctx context.Context) error {\n\tif r.syncSem.TryAcquire(1) {\n\t\treturn nil\n\t}\n\tr.syncWaiters.Add(1)\n\tdefer r.syncWaiters.Add(-1)\n\tif err := r.syncSem.Acquire(ctx, 1); err != nil {\n\t\treturn fmt.Errorf(\"wait for replica sync: %w\", context.Cause(ctx))\n\t}\n\treturn nil\n}\n\nfunc (r *Replica) uploadLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID) (err error) {\n\tfilename := r.db.LTXPath(level, minTXID, maxTXID)\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn NewLTXError(\"open\", filename, level, uint64(minTXID), uint64(maxTXID), err)\n\t}\n\tdefer func() { _ = f.Close() }()\n\n\tinfo, err := r.Client.WriteLTXFile(ctx, level, minTXID, maxTXID, f)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"write ltx file: %w\", err)\n\t}\n\tr.Logger().Debug(\"ltx file uploaded\",\n\t\t\"level\", info.Level,\n\t\t\"minTXID\", info.MinTXID,\n\t\t\"maxTXID\", info.MaxTXID,\n\t\t\"size\", info.Size)\n\n\t// Track current position\n\t//replicaWALIndexGaugeVec.WithLabelValues(r.db.Path(), r.Name()).Set(float64(rd.Pos().Index))\n\t//replicaWALOffsetGaugeVec.WithLabelValues(r.db.Path(), r.Name()).Set(float64(rd.Pos().Offset))\n\n\treturn nil\n}\n\n// calcPos returns the last position saved to the replica for level 0.\nfunc (r *Replica) calcPos(ctx context.Context) (pos ltx.Pos, err error) {\n\tinfo, err := r.MaxLTXFileInfo(ctx, 0)\n\tif err != nil {\n\t\treturn pos, fmt.Errorf(\"max ltx file: %w\", err)\n\t}\n\treturn ltx.Pos{TXID: info.MaxTXID}, nil\n}\n\n// MaxLTXFileInfo returns metadata about the last LTX file for a given level.\n// Returns nil if no files exist for the level.\nfunc (r *Replica) MaxLTXFileInfo(ctx context.Context, level int) (info ltx.FileInfo, err error) {\n\t// Normal operation - use fast timestamps\n\titr, err := r.Client.LTXFiles(ctx, level, 0, false)\n\tif err != nil {\n\t\treturn info, err\n\t}\n\tdefer itr.Close()\n\n\tfor itr.Next() {\n\t\titem := itr.Item()\n\t\tif item.MaxTXID \u003e info.MaxTXID {\n\t\t\tinfo = *item\n\t\t}\n\t}\n\treturn info, itr.Close()\n}\n\n// Pos returns the current replicated position.\n// Returns a zero value if the current position cannot be determined.\nfunc (r *Replica) Pos() ltx.Pos {\n\tr.mu.RLock()\n\tdefer r.mu.RUnlock()\n\treturn r.pos\n}\n\n// SetPos sets the current replicated position.\nfunc (r *Replica) SetPos(pos ltx.Pos) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tr.pos = pos\n}\n\n// EnforceRetention forces a new snapshot once the retention interval has passed.\n// Older snapshots and WAL files are then removed.\nfunc (r *Replica) EnforceRetention(ctx context.Context) (err error) {\n\tpanic(\"TODO(ltx): Re-implement after multi-level compaction\")\n\n\t/*\n\t\t// Obtain list of snapshots that are within the retention period.\n\t\tsnapshots, err := r.Snapshots(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"snapshots: %w\", err)\n\t\t}\n\t\tretained := FilterSnapshotsAfter(snapshots, time.Now().Add(-r.Retention))\n\n\t\t// If no retained snapshots exist, create a new snapshot.\n\t\tif len(retained) == 0 {\n\t\t\tsnapshot, err := r.Snapshot(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"snapshot: %w\", err)\n\t\t\t}\n\t\t\tretained = append(retained, snapshot)\n\t\t}\n\n\t\t// Delete unretained snapshots \u0026 WAL files.\n\t\tsnapshot := FindMinSnapshot(retained)\n\n\t\t// Otherwise remove all earlier snapshots \u0026 WAL segments.\n\t\tif err := r.deleteSnapshotsBeforeIndex(ctx, snapshot.Index); err != nil {\n\t\t\treturn fmt.Errorf(\"delete snapshots before index: %w\", err)\n\t\t} else if err := r.deleteWALSegmentsBeforeIndex(ctx, snapshot.Index); err != nil {\n\t\t\treturn fmt.Errorf(\"delete wal segments before index: %w\", err)\n\t\t}\n\n\t\treturn nil\n\t*/\n}\n\n/*\nfunc (r *Replica) deleteBeforeTXID(ctx context.Context, level int, txID ltx.TXID) error {\n\titr, err := r.Client.LTXFiles(ctx, level)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fetch ltx files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar a []*ltx.FileInfo\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\t\tif info.MinTXID \u003e= txID {\n\t\t\tcontinue\n\t\t}\n\t\ta = append(a, info)\n\t}\n\tif err := itr.Close(); err != nil {\n\t\treturn err\n\t}\n\n\tif len(a) == 0 {\n\t\treturn nil\n\t}\n\n\tif err := r.Client.DeleteLTXFiles(ctx, a); err != nil {\n\t\treturn fmt.Errorf(\"delete wal segments: %w\", err)\n\t}\n\n\tr.Logger().Info(\"ltx files deleted before\",\n\t\tslog.Int(\"level\", level),\n\t\tslog.String(\"txID\", txID.String()),\n\t\tslog.Int(\"n\", len(a)))\n\n\treturn nil\n}\n*/\n\n// monitor runs in a separate goroutine and continuously replicates the DB.\n// Implements exponential backoff on repeated sync errors to prevent log spam\n// and reduce load when persistent errors occur. See issue #927.\nfunc (r *Replica) monitor(ctx context.Context) {\n\tticker := time.NewTicker(r.SyncInterval)\n\tdefer ticker.Stop()\n\n\tnotify := r.db.Notify()\n\n\tvar backoff time.Duration\n\tvar lastLogTime time.Time\n\tvar consecutiveErrs int\n\n\tfor initial := true; ; initial = false {\n\t\t// Enforce a minimum time between synchronization.\n\t\tif !initial {\n\t\t\tselect {\n\t\t\tcase \u003c-ctx.Done():\n\t\t\t\treturn\n\t\t\tcase \u003c-ticker.C:\n\t\t\t}\n\t\t}\n\n\t\t// If in backoff mode, wait additional time before retrying.\n\t\tif backoff \u003e 0 {\n\t\t\tselect {\n\t\t\tcase \u003c-ctx.Done():\n\t\t\t\treturn\n\t\t\tcase \u003c-time.After(backoff):\n\t\t\t}\n\t\t}\n\n\t\t// If the position is unavailable, skip the wait so Sync() surfaces\n\t\t// the error to the backoff \u0026 auto-recovery handling below.\n\t\tif pos, err := r.db.Pos(); err == nil \u0026\u0026 pos.TXID \u003c= r.Pos().TXID {\n\t\t\t// Wait for new data, but still sync on an interval so idle\n\t\t\t// databases continue recording sync health for heartbeats.\n\t\t\tselect {\n\t\t\tcase \u003c-ctx.Done():\n\t\t\t\treturn\n\t\t\tcase \u003c-ticker.C:\n\t\t\tcase \u003c-notify:\n\t\t\t}\n\t\t} else if ctx.Err() != nil {\n\t\t\treturn\n\t\t}\n\n\t\t// Fetch new notify channel before replicating data.\n\t\tnotify = r.db.Notify()\n\n\t\t// Synchronize the shadow wal into the replication directory.\n\t\tif err := r.sync(ctx, r.MaxSyncLTXFiles); err != nil {\n\t\t\tif errors.Is(err, errReplicaWaitForData) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Don't log context cancellation errors during shutdown\n\t\t\tif !isShutdownError(ctx, err) {\n\t\t\t\tconsecutiveErrs++\n\n\t\t\t\t// Exponential backoff: SyncInterval -\u003e 2x -\u003e 4x -\u003e ... -\u003e max\n\t\t\t\tif backoff == 0 {\n\t\t\t\t\tbackoff = r.SyncInterval\n\t\t\t\t} else {\n\t\t\t\t\tbackoff *= 2\n\t\t\t\t\tif backoff \u003e DefaultSyncBackoffMax {\n\t\t\t\t\t\tbackoff = DefaultSyncBackoffMax\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check for LTX errors and include recovery hints\n\t\t\t\tvar ltxErr *LTXError\n\t\t\t\tif errors.As(err, \u0026ltxErr) {\n\t\t\t\t\t// Log with rate limiting to avoid log spam during persistent errors.\n\t\t\t\t\tif time.Since(lastLogTime) \u003e= SyncErrorLogInterval {\n\t\t\t\t\t\tif ltxErr.Hint != \"\" {\n\t\t\t\t\t\t\tr.Logger().Error(\"monitor error\",\n\t\t\t\t\t\t\t\t\"error\", err,\n\t\t\t\t\t\t\t\t\"path\", ltxErr.Path,\n\t\t\t\t\t\t\t\t\"hint\", ltxErr.Hint,\n\t\t\t\t\t\t\t\t\"consecutive_errors\", consecutiveErrs,\n\t\t\t\t\t\t\t\t\"backoff\", backoff)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tr.Logger().Error(\"monitor error\",\n\t\t\t\t\t\t\t\t\"error\", err,\n\t\t\t\t\t\t\t\t\"path\", ltxErr.Path,\n\t\t\t\t\t\t\t\t\"consecutive_errors\", consecutiveErrs,\n\t\t\t\t\t\t\t\t\"backoff\", backoff)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastLogTime = time.Now()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt auto-recovery only for missing/corrupt LTX files.\n\t\t\t\t\t// Transient OS errors (EMFILE, EIO, EACCES) should retry\n\t\t\t\t\t// with backoff rather than destructively resetting state.\n\t\t\t\t\tif r.AutoRecoverEnabled \u0026\u0026 ltxErr.IsAutoRecoverable() {\n\t\t\t\t\t\tr.Logger().Warn(\"auto-recovery enabled, resetting local state\")\n\t\t\t\t\t\tif resetErr := r.db.ResetLocalState(ctx); resetErr != nil {\n\t\t\t\t\t\t\tr.Logger().Error(\"auto-recovery failed\", \"error\", resetErr)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tr.Logger().Info(\"auto-recovery complete, resuming replication\")\n\t\t\t\t\t\t\t// Reset backoff after successful recovery\n\t\t\t\t\t\t\tbackoff = 0\n\t\t\t\t\t\t\tconsecutiveErrs = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Log with rate limiting to avoid log spam during persistent errors.\n\t\t\t\t\tif time.Since(lastLogTime) \u003e= SyncErrorLogInterval {\n\t\t\t\t\t\tr.Logger().Error(\"monitor error\",\n\t\t\t\t\t\t\t\"error\", err,\n\t\t\t\t\t\t\t\"consecutive_errors\", consecutiveErrs,\n\t\t\t\t\t\t\t\"backoff\", backoff)\n\t\t\t\t\t\tlastLogTime = time.Now()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Success - reset backoff and error counter.\n\t\tif consecutiveErrs \u003e 0 {\n\t\t\tr.Logger().Info(\"replica sync recovered\", \"previous_errors\", consecutiveErrs)\n\t\t}\n\t\tbackoff = 0\n\t\tconsecutiveErrs = 0\n\t}\n}\n\n// CreatedAt returns the earliest creation time of any LTX file.\n// Returns zero time if no LTX files exist.\nfunc (r *Replica) CreatedAt(ctx context.Context) (time.Time, error) {\n\tvar min time.Time\n\n\t// Normal operation - use fast timestamps\n\titr, err := r.Client.LTXFiles(ctx, 0, 0, false)\n\tif err != nil {\n\t\treturn min, err\n\t}\n\tdefer itr.Close()\n\n\tif itr.Next() {\n\t\tmin = itr.Item().CreatedAt\n\t}\n\treturn min, itr.Close()\n}\n\n// TimeBounds returns the creation time \u0026 last updated time.\n// Returns zero time if no LTX files exist.\nfunc (r *Replica) TimeBounds(ctx context.Context) (createdAt, updatedAt time.Time, err error) {\n\tfor level := SnapshotLevel; level \u003e= 0; level-- {\n\t\titr, err := r.Client.LTXFiles(ctx, level, 0, false)\n\t\tif err != nil {\n\t\t\treturn createdAt, updatedAt, err\n\t\t}\n\n\t\tfor itr.Next() {\n\t\t\tinfo := itr.Item()\n\t\t\tif createdAt.IsZero() || info.CreatedAt.Before(createdAt) {\n\t\t\t\tcreatedAt = info.CreatedAt\n\t\t\t}\n\t\t\tif updatedAt.IsZero() || info.CreatedAt.After(updatedAt) {\n\t\t\t\tupdatedAt = info.CreatedAt\n\t\t\t}\n\t\t}\n\t\tif err := itr.Close(); err != nil {\n\t\t\treturn createdAt, updatedAt, err\n\t\t}\n\t}\n\treturn createdAt, updatedAt, nil\n}\n\n// CalcRestoreTarget returns a target time restore from.\nfunc (r *Replica) CalcRestoreTarget(ctx context.Context, opt RestoreOptions) (updatedAt time.Time, err error) {\n\t// Determine the replicated time bounds from LTX files.\n\tcreatedAt, updatedAt, err := r.TimeBounds(ctx)\n\tif err != nil {\n\t\treturn time.Time{}, fmt.Errorf(\"created at: %w\", err)\n\t}\n\n\t// Also check v0.3.x time bounds if client supports it.\n\tif client, ok := r.Client.(ReplicaClientV3); ok {\n\t\tv3CreatedAt, v3UpdatedAt, err := r.TimeBoundsV3(ctx, client)\n\t\tif err != nil {\n\t\t\treturn time.Time{}, fmt.Errorf(\"v0.3.x time bounds: %w\", err)\n\t\t}\n\t\t// Extend time bounds to include v0.3.x backups.\n\t\tif !v3CreatedAt.IsZero() \u0026\u0026 (createdAt.IsZero() || v3CreatedAt.Before(createdAt)) {\n\t\t\tcreatedAt = v3CreatedAt\n\t\t}\n\t\tif !v3UpdatedAt.IsZero() \u0026\u0026 (updatedAt.IsZero() || v3UpdatedAt.After(updatedAt)) {\n\t\t\tupdatedAt = v3UpdatedAt\n\t\t}\n\t}\n\n\t// Skip if it does not contain timestamp.\n\tif !opt.Timestamp.IsZero() {\n\t\tif createdAt.IsZero() \u0026\u0026 updatedAt.IsZero() {\n\t\t\treturn time.Time{}, fmt.Errorf(\"no backups found\")\n\t\t}\n\t\tif opt.Timestamp.Before(createdAt) || opt.Timestamp.After(updatedAt) {\n\t\t\treturn time.Time{}, fmt.Errorf(\"timestamp does not exist\")\n\t\t}\n\t}\n\n\treturn updatedAt, nil\n}\n\n// Replica restores the database from a replica based on the options given.\n// This method will restore into opt.OutputPath, if specified, or into the\n// DB's original database path. It can optionally restore from a specific\n// replica or it will automatically choose the best one. Finally,\n// a timestamp can be specified to restore the database to a specific\n// point-in-time.\n//\n// When the replica contains both v0.3.x and LTX format backups, this method\n// compares snapshots from both formats and uses whichever has the better backup:\n// - With timestamp: uses the format with the most recent snapshot before timestamp\n// - Without timestamp: uses the format with the most recent backup overall\nfunc (r *Replica) Restore(ctx context.Context, opt RestoreOptions) (err error) {\n\t// Validate options.\n\tif opt.OutputPath == \"\" {\n\t\treturn fmt.Errorf(\"output path required\")\n\t} else if opt.TXID != 0 \u0026\u0026 !opt.Timestamp.IsZero() {\n\t\treturn fmt.Errorf(\"cannot specify index \u0026 timestamp to restore\")\n\t} else if opt.Follow \u0026\u0026 opt.TXID != 0 {\n\t\treturn fmt.Errorf(\"cannot use follow mode with -txid\")\n\t} else if opt.Follow \u0026\u0026 !opt.Timestamp.IsZero() {\n\t\treturn fmt.Errorf(\"cannot use follow mode with -timestamp\")\n\t} else if opt.IntegrityCheck != IntegrityCheckNone \u0026\u0026 opt.IntegrityCheck != IntegrityCheckQuick \u0026\u0026 opt.IntegrityCheck != IntegrityCheckFull {\n\t\treturn fmt.Errorf(\"unsupported integrity check mode: %d\", opt.IntegrityCheck)\n\t}\n\n\t// In follow mode, if the database already exists, attempt crash recovery\n\t// by reading the last applied TXID from the sidecar file.\n\tif opt.Follow {\n\t\tif _, statErr := os.Stat(opt.OutputPath); statErr == nil {\n\t\t\ttxid, readErr := ReadTXIDFile(opt.OutputPath)\n\t\t\tif readErr != nil {\n\t\t\t\treturn fmt.Errorf(\"read txid file for crash recovery: %w\", readErr)\n\t\t\t}\n\t\t\tif txid == 0 {\n\t\t\t\treturn fmt.Errorf(\"cannot resume follow mode: database exists but no -txid file found; delete the database to re-restore: %s\", opt.OutputPath)\n\t\t\t}\n\t\t\t// Validate saved TXID is still reachable. If the earliest snapshot\n\t\t\t// starts after our saved TXID, retention has pruned the history\n\t\t\t// and we can't catch up incrementally.\n\t\t\tsnapshotItr, itrErr := r.Client.LTXFiles(ctx, SnapshotLevel, 0, false)\n\t\t\tif itrErr != nil {\n\t\t\t\treturn fmt.Errorf(\"cannot validate saved TXID for crash recovery: %w\", itrErr)\n\t\t\t}\n\n\t\t\tvar latestSnapshot *ltx.FileInfo\n\t\t\tfor snapshotItr.Next() {\n\t\t\t\tlatestSnapshot = snapshotItr.Item()\n\t\t\t}\n\t\t\tif err := snapshotItr.Err(); err != nil {\n\t\t\t\t_ = snapshotItr.Close()\n\t\t\t\treturn fmt.Errorf(\"iterate snapshots for crash recovery validation: %w\", err)\n\t\t\t}\n\t\t\t_ = snapshotItr.Close()\n\n\t\t\tif latestSnapshot != nil {\n\t\t\t\tif latestSnapshot.MinTXID \u003e txid {\n\t\t\t\t\treturn fmt.Errorf(\"cannot resume follow mode: saved TXID %s is behind the earliest snapshot (min TXID %s); replica history has been pruned -- delete %s and %s-txid to re-restore\", txid, latestSnapshot.MinTXID, opt.OutputPath, opt.OutputPath)\n\t\t\t\t}\n\t\t\t\tif txid \u003e latestSnapshot.MaxTXID {\n\t\t\t\t\treturn fmt.Errorf(\"cannot resume follow mode: saved TXID %s is ahead of latest snapshot (max TXID %s); delete %s and %s-txid to re-restore\", txid, latestSnapshot.MaxTXID, opt.OutputPath, opt.OutputPath)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tr.Logger().Info(\"resuming follow mode from crash recovery\", \"txid\", txid, \"output\", opt.OutputPath)\n\t\t\treturn r.follow(ctx, opt.OutputPath, txid, opt.FollowInterval)\n\t\t}\n\t}\n\n\t// Ensure output path does not already exist.\n\tif _, err := os.Stat(opt.OutputPath); err == nil {\n\t\treturn fmt.Errorf(\"cannot restore, output path already exists: %s\", opt.OutputPath)\n\t} else if !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\t// Compare v0.3.x and LTX formats to find the best backup (unless TXID is specified).\n\t// Skip V3 format when follow mode is enabled (V3 doesn't support incremental following).\n\tif opt.TXID == 0 \u0026\u0026 !opt.Follow {\n\t\tif client, ok := r.Client.(ReplicaClientV3); ok {\n\t\t\tuseV3, err := r.shouldUseV3Restore(ctx, client, opt.Timestamp)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif useV3 {\n\t\t\t\treturn r.RestoreV3(ctx, opt)\n\t\t\t}\n\t\t}\n\t}\n\n\tinfos, err := CalcRestorePlan(ctx, r.Client, opt.TXID, opt.Timestamp, r.Logger())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot calc restore plan: %w\", err)\n\t}\n\n\tr.Logger().Debug(\"restore plan\", \"n\", len(infos), \"txid\", infos[len(infos)-1].MaxTXID, \"timestamp\", infos[len(infos)-1].CreatedAt)\n\n\trdrs := make([]io.Reader, 0, len(infos))\n\tdefer func() {\n\t\tfor _, rd := range rdrs {\n\t\t\tif closer, ok := rd.(io.Closer); ok {\n\t\t\t\t_ = closer.Close()\n\t\t\t}\n\t\t}\n\t}()\n\n\tfor _, info := range infos {\n\t\t// Validate file size - must be at least header size to be readable\n\t\tif info.Size \u003c ltx.HeaderSize {\n\t\t\treturn fmt.Errorf(\"invalid ltx file: level=%d min=%s max=%s has size %d bytes (minimum %d)\",\n\t\t\t\tinfo.Level, info.MinTXID, info.MaxTXID, info.Size, ltx.HeaderSize)\n\t\t}\n\n\t\tr.Logger().Debug(\"opening ltx file for restore\", \"level\", info.Level, \"min\", info.MinTXID, \"max\", info.MaxTXID)\n\n\t\trdrs = append(rdrs, internal.NewResumableReader(ctx, r.Client, info.Level, info.MinTXID, info.MaxTXID, info.Size, nil, r.Logger()))\n\t}\n\n\tif len(rdrs) == 0 {\n\t\treturn fmt.Errorf(\"no matching backup files available\")\n\t}\n\n\t// Create parent directory if it doesn't exist.\n\tvar dirInfo os.FileInfo\n\tif db := r.DB(); db != nil {\n\t\tdirInfo = db.dirInfo\n\t}\n\tif err := internal.MkdirAll(filepath.Dir(opt.OutputPath), dirInfo); err != nil {\n\t\treturn fmt.Errorf(\"create parent directory: %w\", err)\n\t}\n\n\t// Output to temp file \u0026 atomically rename.\n\ttmpOutputPath := opt.OutputPath + \".tmp\"\n\tr.Logger().Debug(\"compacting into database\", \"path\", tmpOutputPath, \"n\", len(rdrs))\n\tdefer func() { _ = os.Remove(tmpOutputPath) }()\n\n\tf, err := os.Create(tmpOutputPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create temp database path: %w\", err)\n\t}\n\tdefer func() { _ = f.Close() }()\n\n\tpr, pw := io.Pipe()\n\n\tgo func() {\n\t\tc, err := ltx.NewCompactor(pw, rdrs)\n\t\tif err != nil {\n\t\t\tpw.CloseWithError(fmt.Errorf(\"new ltx compactor: %w\", err))\n\t\t\treturn\n\t\t}\n\t\tc.HeaderFlags = ltx.HeaderFlagNoChecksum\n\t\t_ = pw.CloseWithError(c.Compact(ctx))\n\t}()\n\n\tdec := ltx.NewDecoder(pr)\n\tif err := dec.DecodeDatabaseTo(f); err != nil {\n\t\treturn fmt.Errorf(\"decode database: %w\", err)\n\t}\n\n\tif err := f.Sync(); err != nil {\n\t\treturn err\n\t} else if err := f.Close(); err != nil {\n\t\treturn err\n\t}\n\n\t// Copy file to final location.\n\tr.Logger().Debug(\"renaming database from temporary location\")\n\tif err := os.Rename(tmpOutputPath, opt.OutputPath); err != nil {\n\t\treturn err\n\t}\n\tif err := internal.FsyncDir(filepath.Dir(opt.OutputPath)); err != nil {\n\t\treturn fmt.Errorf(\"sync restore output dir: %w\", err)\n\t}\n\n\tif opt.IntegrityCheck != IntegrityCheckNone {\n\t\tif err := checkIntegrity(ctx, opt.OutputPath, opt.IntegrityCheck); err != nil {\n\t\t\tif ctx.Err() == nil {\n\t\t\t\t_ = os.Remove(opt.OutputPath)\n\t\t\t\t_ = os.Remove(opt.OutputPath + \"-shm\")\n\t\t\t\t_ = os.Remove(opt.OutputPath + \"-wal\")\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"post-restore integrity check: %w\", err)\n\t\t}\n\t\tr.Logger().Info(\"post-restore integrity check passed\")\n\t}\n\n\t// Enter follow mode if enabled, continuously applying new LTX files.\n\tif opt.Follow {\n\t\tfor _, rd := range rdrs {\n\t\t\tif closer, ok := rd.(io.Closer); ok {\n\t\t\t\t_ = closer.Close()\n\t\t\t}\n\t\t}\n\t\trdrs = nil\n\n\t\tmaxTXID := infos[len(infos)-1].MaxTXID\n\t\tif err := WriteTXIDFile(opt.OutputPath, maxTXID); err != nil {\n\t\t\treturn fmt.Errorf(\"write initial txid file: %w\", err)\n\t\t}\n\t\treturn r.follow(ctx, opt.OutputPath, maxTXID, opt.FollowInterval)\n\t}\n\n\treturn nil\n}\n\n// follow enters a continuous restore loop, polling for new LTX files and\n// applying them to the restored database. It blocks until the context is\n// cancelled (e.g. Ctrl+C). Returns nil on clean shutdown.\nfunc (r *Replica) follow(ctx context.Context, outputPath string, lastTXID ltx.TXID, interval time.Duration) error {\n\tf, err := os.OpenFile(outputPath, os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open database for follow: %w\", err)\n\t}\n\tdefer func() {\n\t\t_ = f.Sync()\n\t\t_ = f.Close()\n\t}()\n\n\t// Read page size from SQLite header (offset 16, 2 bytes, big-endian).\n\tvar buf [2]byte\n\tif _, err := f.ReadAt(buf[:], 16); err != nil {\n\t\treturn fmt.Errorf(\"read page size from database header: %w\", err)\n\t}\n\tpageSize := uint32(buf[0])\u003c\u003c8 | uint32(buf[1])\n\tif pageSize == 1 {\n\t\tpageSize = 65536\n\t}\n\n\tif interval \u003c= 0 {\n\t\tinterval = DefaultFollowInterval\n\t}\n\n\tr.Logger().Info(\"entering follow mode\", \"output\", outputPath, \"txid\", lastTXID, \"interval\", interval)\n\n\tticker := time.NewTicker(interval)\n\tdefer ticker.Stop()\n\n\tvar consecutiveErrors int\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\tr.Logger().Info(\"follow mode stopped\")\n\t\t\treturn nil\n\t\tcase \u003c-ticker.C:\n\t\t\tnewTXID, err := r.applyNewLTXFiles(ctx, f, lastTXID, pageSize)\n\t\t\tif err != nil {\n\t\t\t\tif ctx.Err() != nil {\n\t\t\t\t\tr.Logger().Info(\"follow mode stopped\")\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tconsecutiveErrors++\n\t\t\t\tr.Logger().Error(\"follow: error applying updates\", \"err\", err, \"consecutive_errors\", consecutiveErrors)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif newTXID \u003e lastTXID {\n\t\t\t\tif err := WriteTXIDFile(outputPath, newTXID); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"write txid file: %w\", err)\n\t\t\t\t}\n\t\t\t\tr.Logger().Info(\"follow: applied updates\", \"from_txid\", lastTXID, \"to_txid\", newTXID)\n\t\t\t\tlastTXID = newTXID\n\t\t\t\tconsecutiveErrors = 0\n\t\t\t}\n\t\t}\n\t}\n}\n\n// applyNewLTXFiles polls for new LTX files and applies them to the database.\n// It starts from level 0 and falls back to higher levels if there are gaps\n// (e.g., level 0 files were compacted away).\nfunc (r *Replica) applyNewLTXFiles(ctx context.Context, f *os.File, afterTXID ltx.TXID, pageSize uint32) (ltx.TXID, error) {\n\tcurrentTXID := afterTXID\n\n\t// Poll level 0 for the most recent incremental files.\n\titr, err := r.Client.LTXFiles(ctx, 0, currentTXID+1, false)\n\tif err != nil {\n\t\treturn currentTXID, fmt.Errorf(\"list level 0 ltx files: %w\", err)\n\t}\n\tcloseLevel0 := func(retErr error) (ltx.TXID, error) {\n\t\tif closeErr := itr.Close(); closeErr != nil {\n\t\t\tcloseErr = fmt.Errorf(\"close level 0 ltx iterator: %w\", closeErr)\n\t\t\tif retErr != nil {\n\t\t\t\treturn currentTXID, errors.Join(retErr, closeErr)\n\t\t\t}\n\t\t\treturn currentTXID, closeErr\n\t\t}\n\t\treturn currentTXID, retErr\n\t}\n\n\tvar sawLevel0 bool\n\tfor itr.Next() {\n\t\tsawLevel0 = true\n\t\tinfo := itr.Item()\n\n\t\t// If there's a gap, try to fill it from higher compaction levels.\n\t\tif info.MinTXID \u003e currentTXID+1 {\n\t\t\tbridgedTXID, err := r.fillFollowGap(ctx, f, currentTXID, info.MinTXID, pageSize)\n\t\t\tif err != nil {\n\t\t\t\treturn closeLevel0(err)\n\t\t\t}\n\t\t\tcurrentTXID = bridgedTXID\n\n\t\t\t// Re-check if this file is still needed after bridging.\n\t\t\tif info.MaxTXID \u003c= currentTXID {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif info.MinTXID \u003e currentTXID+1 {\n\t\t\t\treturn closeLevel0(nil)\n\t\t\t}\n\t\t}\n\n\t\t// Skip if already covered by a higher-level file.\n\t\tif info.MaxTXID \u003c= currentTXID {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := r.applyLTXFile(ctx, f, info, pageSize); err != nil {\n\t\t\treturn closeLevel0(fmt.Errorf(\n\t\t\t\t\"apply ltx file (level=%d, min=%s, max=%s): %w\",\n\t\t\t\tinfo.Level, info.MinTXID, info.MaxTXID, err,\n\t\t\t))\n\t\t}\n\t\tcurrentTXID = info.MaxTXID\n\t}\n\n\tif iterErr := itr.Err(); iterErr != nil {\n\t\treturn closeLevel0(fmt.Errorf(\"iterate level 0 ltx files: %w\", iterErr))\n\t}\n\tif _, err := closeLevel0(nil); err != nil {\n\t\treturn currentTXID, err\n\t}\n\n\tif !sawLevel0 {\n\t\tbridgedTXID, err := r.fillFollowGap(ctx, f, currentTXID, currentTXID+1, pageSize)\n\t\tif err != nil {\n\t\t\treturn currentTXID, err\n\t\t}\n\t\tcurrentTXID = bridgedTXID\n\t}\n\n\treturn currentTXID, nil\n}\n\n// applyLTXFile applies a single LTX file's pages to the database file.\n// This follows the same pattern as Hydrator.ApplyLTX (vfs.go:712-747).\n//\n// To prevent concurrent SQLite readers from seeing partial updates, we acquire\n// an exclusive file lock before writing. We also rewrite the SQLite header\n// (bytes 18-19) to indicate DELETE journal mode instead of WAL mode, and\n// randomize the schema change counter (bytes 24-27) to invalidate cached\n// schemas in other connections.\nfunc (r *Replica) applyLTXFile(ctx context.Context, f *os.File, info *ltx.FileInfo, pageSize uint32) error {\n\trc, err := r.Client.OpenLTXFile(ctx, info.Level, info.MinTXID, info.MaxTXID, 0, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open ltx file: %w\", err)\n\t}\n\tdefer rc.Close()\n\n\tdec := ltx.NewDecoder(rc)\n\tif err := dec.DecodeHeader(); err != nil {\n\t\treturn fmt.Errorf(\"decode header: %w\", err)\n\t}\n\n\thdr := dec.Header()\n\n\tif err := internal.LockFileExclusive(f); err != nil {\n\t\treturn fmt.Errorf(\"acquire exclusive lock: %w\", err)\n\t}\n\tdefer internal.UnlockFile(f)\n\n\tfor {\n\t\tvar phdr ltx.PageHeader\n\t\tdata := make([]byte, pageSize)\n\t\tif err := dec.DecodePage(\u0026phdr, data); err == io.EOF {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn fmt.Errorf(\"decode page: %w\", err)\n\t\t}\n\n\t\tif phdr.Pgno == 1 \u0026\u0026 len(data) \u003e= 28 {\n\t\t\tdata[18], data[19] = 0x01, 0x01\n\t\t\t_, _ = rand.Read(data[24:28])\n\t\t}\n\n\t\toff := int64(phdr.Pgno-1) * int64(pageSize)\n\t\tif _, err := f.WriteAt(data, off); err != nil {\n\t\t\treturn fmt.Errorf(\"write page %d: %w\", phdr.Pgno, err)\n\t\t}\n\t}\n\n\tif hdr.Commit \u003e 0 {\n\t\tif err := f.Sync(); err != nil {\n\t\t\treturn fmt.Errorf(\"sync before truncate: %w\", err)\n\t\t}\n\t\tnewSize := int64(hdr.Commit) * int64(pageSize)\n\t\tif err := f.Truncate(newSize); err != nil {\n\t\t\treturn fmt.Errorf(\"truncate: %w\", err)\n\t\t}\n\t}\n\n\tif err := dec.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close decoder: %w\", err)\n\t}\n\n\treturn f.Sync()\n}\n\n// fillFollowGap attempts to bridge a gap in level 0 files by searching\n// higher compaction levels for a file that covers the missing TXID range.\nfunc (r *Replica) fillFollowGap(ctx context.Context, f *os.File, afterTXID ltx.TXID, gapMinTXID ltx.TXID, pageSize uint32) (ltx.TXID, error) {\n\tcurrentTXID := afterTXID\n\n\tfor level := 1; level \u003c SnapshotLevel; level++ {\n\t\titr, err := r.Client.LTXFiles(ctx, level, 0, false)\n\t\tif err != nil {\n\t\t\treturn currentTXID, fmt.Errorf(\"list level %d ltx files: %w\", level, err)\n\t\t}\n\t\tcloseLevel := func(retErr error) (ltx.TXID, error) {\n\t\t\tif closeErr := itr.Close(); closeErr != nil {\n\t\t\t\tcloseErr = fmt.Errorf(\"close level %d ltx iterator: %w\", level, closeErr)\n\t\t\t\tif retErr != nil {\n\t\t\t\t\treturn currentTXID, errors.Join(retErr, closeErr)\n\t\t\t\t}\n\t\t\t\treturn currentTXID, closeErr\n\t\t\t}\n\t\t\treturn currentTXID, retErr\n\t\t}\n\n\t\tfor itr.Next() {\n\t\t\tinfo := itr.Item()\n\n\t\t\t// Skip if there's a gap at this level too.\n\t\t\tif info.MinTXID \u003e currentTXID+1 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Skip if already covered.\n\t\t\tif info.MaxTXID \u003c= currentTXID {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif err := r.applyLTXFile(ctx, f, info, pageSize); err != nil {\n\t\t\t\treturn closeLevel(fmt.Errorf(\n\t\t\t\t\t\"apply gap-fill ltx file (level=%d, min=%s, max=%s): %w\",\n\t\t\t\t\tinfo.Level, info.MinTXID, info.MaxTXID, err,\n\t\t\t\t))\n\t\t\t}\n\t\t\tcurrentTXID = info.MaxTXID\n\n\t\t\t// If we've bridged past the gap, we're done.\n\t\t\tif currentTXID+1 \u003e= gapMinTXID {\n\t\t\t\treturn closeLevel(nil)\n\t\t\t}\n\t\t}\n\n\t\tif iterErr := itr.Err(); iterErr != nil {\n\t\t\treturn closeLevel(fmt.Errorf(\"iterate level %d ltx files: %w\", level, iterErr))\n\t\t}\n\t\tif _, err := closeLevel(nil); err != nil {\n\t\t\treturn currentTXID, err\n\t\t}\n\n\t\t// If we made progress at this level, restart from level 1.\n\t\tif currentTXID \u003e afterTXID {\n\t\t\treturn currentTXID, nil\n\t\t}\n\t}\n\n\treturn currentTXID, nil\n}\n\n// RestoreV3 restores from a v0.3.x format backup.\nfunc (r *Replica) RestoreV3(ctx context.Context, opt RestoreOptions) error {\n\tclient, ok := r.Client.(ReplicaClientV3)\n\tif !ok {\n\t\treturn fmt.Errorf(\"replica client does not support v0.3.x restore\")\n\t}\n\n\t// Validate options.\n\tif opt.OutputPath == \"\" {\n\t\treturn fmt.Errorf(\"output path required\")\n\t} else if opt.IntegrityCheck != IntegrityCheckNone \u0026\u0026 opt.IntegrityCheck != IntegrityCheckQuick \u0026\u0026 opt.IntegrityCheck != IntegrityCheckFull {\n\t\treturn fmt.Errorf(\"unsupported integrity check mode: %d\", opt.IntegrityCheck)\n\t}\n\n\t// Ensure output path does not already exist.\n\tif _, err := os.Stat(opt.OutputPath); err == nil {\n\t\treturn fmt.Errorf(\"cannot restore, output path already exists: %s\", opt.OutputPath)\n\t} else if !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\t// Find all generations.\n\tgenerations, err := client.GenerationsV3(ctx)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"list generations: %w\", err)\n\t}\n\tif len(generations) == 0 {\n\t\treturn ErrNoSnapshots\n\t}\n\n\t// Collect all snapshots across all generations.\n\tvar allSnapshots []SnapshotInfoV3\n\tfor _, gen := range generations {\n\t\tsnapshots, err := client.SnapshotsV3(ctx, gen)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"list snapshots for generation %s: %w\", gen, err)\n\t\t}\n\t\tallSnapshots = append(allSnapshots, snapshots...)\n\t}\n\tif len(allSnapshots) == 0 {\n\t\treturn ErrNoSnapshots\n\t}\n\n\t// Sort all snapshots by CreatedAt for timestamp-based selection.\n\tsortSnapshotsV3ByCreatedAt(allSnapshots)\n\n\t// Find best snapshot across all generations (latest, or before timestamp if specified).\n\tsnapshot := findBestSnapshotV3(allSnapshots, opt.Timestamp)\n\tif snapshot == nil {\n\t\treturn ErrNoSnapshots\n\t}\n\n\tr.Logger().Debug(\"selected v0.3.x snapshot\",\n\t\t\"generation\", snapshot.Generation,\n\t\t\"index\", snapshot.Index,\n\t\t\"created_at\", snapshot.CreatedAt)\n\n\t// Get WAL segments for the snapshot's generation.\n\tsegments, err := client.WALSegmentsV3(ctx, snapshot.Generation)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"list WAL segments: %w\", err)\n\t}\n\tsegments = filterWALSegmentsV3(segments, snapshot.Index, opt.Timestamp)\n\n\tr.Logger().Debug(\"found v0.3.x WAL segments\", \"n\", len(segments))\n\n\t// Create parent directory if it doesn't exist.\n\tvar dirInfo os.FileInfo\n\tif db := r.DB(); db != nil {\n\t\tdirInfo = db.DirInfo()\n\t}\n\tif err := internal.MkdirAll(filepath.Dir(opt.OutputPath), dirInfo); err != nil {\n\t\treturn fmt.Errorf(\"create parent directory: %w\", err)\n\t}\n\n\t// Create temp file for restore.\n\ttmpPath := opt.OutputPath + \".tmp\"\n\tdefer func() { _ = os.Remove(tmpPath) }()\n\n\t// Download and decompress snapshot.\n\tif err := r.downloadSnapshotV3(ctx, client, snapshot.Generation, snapshot.Index, tmpPath); err != nil {\n\t\treturn fmt.Errorf(\"download snapshot: %w\", err)\n\t}\n\n\t// Apply WAL segments.\n\tif err := r.applyWALSegmentsV3(ctx, client, snapshot.Generation, snapshot.Index, segments, tmpPath); err != nil {\n\t\treturn fmt.Errorf(\"apply WAL segments: %w\", err)\n\t}\n\n\t// Rename to final path.\n\tif err := os.Rename(tmpPath, opt.OutputPath); err != nil {\n\t\treturn fmt.Errorf(\"rename to output path: %w\", err)\n\t}\n\tif err := internal.FsyncDir(filepath.Dir(opt.OutputPath)); err != nil {\n\t\treturn fmt.Errorf(\"sync restore output dir: %w\", err)\n\t}\n\n\tif opt.IntegrityCheck != IntegrityCheckNone {\n\t\tif err := checkIntegrity(ctx, opt.OutputPath, opt.IntegrityCheck); err != nil {\n\t\t\tif ctx.Err() == nil {\n\t\t\t\t_ = os.Remove(opt.OutputPath)\n\t\t\t\t_ = os.Remove(opt.OutputPath + \"-shm\")\n\t\t\t\t_ = os.Remove(opt.OutputPath + \"-wal\")\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"post-restore integrity check: %w\", err)\n\t\t}\n\t\tr.Logger().Info(\"post-restore integrity check passed\")\n\t}\n\n\treturn nil\n}\n\n// sortSnapshotsV3ByCreatedAt sorts snapshots by creation time in ascending order.\nfunc sortSnapshotsV3ByCreatedAt(snapshots []SnapshotInfoV3) {\n\tfor i := 0; i \u003c len(snapshots)-1; i++ {\n\t\tfor j := i + 1; j \u003c len(snapshots); j++ {\n\t\t\tif snapshots[i].CreatedAt.After(snapshots[j].CreatedAt) {\n\t\t\t\tsnapshots[i], snapshots[j] = snapshots[j], snapshots[i]\n\t\t\t}\n\t\t}\n\t}\n}\n\n// findBestSnapshotV3 finds the best snapshot for restore.\n// If timestamp is zero, returns the latest snapshot.\n// Otherwise, returns the latest snapshot created before or at the timestamp.\nfunc findBestSnapshotV3(snapshots []SnapshotInfoV3, timestamp time.Time) *SnapshotInfoV3 {\n\tif len(snapshots) == 0 {\n\t\treturn nil\n\t}\n\tif timestamp.IsZero() {\n\t\treturn \u0026snapshots[len(snapshots)-1]\n\t}\n\tfor i := len(snapshots) - 1; i \u003e= 0; i-- {\n\t\tif !snapshots[i].CreatedAt.After(timestamp) {\n\t\t\treturn \u0026snapshots[i]\n\t\t}\n\t}\n\treturn nil\n}\n\n// filterWALSegmentsV3 filters WAL segments to those at or after the snapshot index\n// and optionally before the timestamp.\nfunc filterWALSegmentsV3(segments []WALSegmentInfoV3, snapshotIndex int, timestamp time.Time) []WALSegmentInfoV3 {\n\tvar result []WALSegmentInfoV3\n\tfor _, seg := range segments {\n\t\tif seg.Index \u003c snapshotIndex {\n\t\t\tcontinue\n\t\t}\n\t\tif !timestamp.IsZero() \u0026\u0026 seg.CreatedAt.After(timestamp) {\n\t\t\tcontinue\n\t\t}\n\t\tresult = append(result, seg)\n\t}\n\treturn result\n}\n\n// downloadSnapshotV3 downloads and decompresses a v0.3.x snapshot to the destination path.\nfunc (r *Replica) downloadSnapshotV3(ctx context.Context, client ReplicaClientV3, generation string, index int, destPath string) error {\n\trc, err := client.OpenSnapshotV3(ctx, generation, index)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() { _ = rc.Close() }()\n\n\tf, err := os.Create(destPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() { _ = f.Close() }()\n\n\tif _, err := io.Copy(f, rc); err != nil {\n\t\treturn err\n\t}\n\treturn f.Sync()\n}\n\n// applyWALSegmentsV3 applies WAL segments to the database file.\nfunc (r *Replica) applyWALSegmentsV3(ctx context.Context, client ReplicaClientV3, generation string, snapshotIndex int, segments []WALSegmentInfoV3, dbPath string) error {\n\tif len(segments) == 0 {\n\t\treturn nil\n\t}\n\n\t// Write all WAL segments to the WAL file.\n\twalPath := dbPath + \"-wal\"\n\tvar f *os.File\n\tvar err error\n\texpectedIndex := snapshotIndex\n\toffset := int64(0)\n\n\tdefer func() {\n\t\tif f != nil {\n\t\t\t_ = f.Close()\n\t\t}\n\t}()\n\n\tapplyLastWalFile := func() error {\n\t\tif f == nil {\n\t\t\treturn nil\n\t\t} else if err = f.Close(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tf = nil\n\t\tif err = checkpointV3(dbPath); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.Logger().Debug(\"applied WAL index\", \"generation\", generation, \"index\", expectedIndex-1, \"bytes\", offset)\n\t\treturn nil\n\t}\n\n\t// Reconstruct each wal file, appending non-zero offsets, and apply them\n\t// to the db.\n\tfor _, seg := range segments {\n\t\tif seg.Offset == 0 {\n\t\t\t// Apply the last WAL file, if any\n\t\t\tif err = applyLastWalFile(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif seg.Index != expectedIndex {\n\t\t\t\treturn fmt.Errorf(\"missing WAL index: expected %d/0, got %d/%d\", expectedIndex, seg.Index, seg.Offset)\n\t\t\t}\n\t\t\toffset = 0\n\t\t\t// Open a new WAL file\n\t\t\tif f, err = os.OpenFile(walPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\texpectedIndex++\n\t\t} else if seg.Offset != offset {\n\t\t\treturn fmt.Errorf(\"missing WAL segment: expected %d/%d, got %d/%d\", seg.Index, offset, seg.Index, seg.Offset)\n\t\t}\n\t\tif n, err := r.appendWALSegmentV3(ctx, client, generation, seg, f); err != nil {\n\t\t\treturn fmt.Errorf(\"write WAL segment %d/%d: %w\", seg.Index, seg.Offset, err)\n\t\t} else {\n\t\t\toffset += n\n\t\t\tr.Logger().Debug(\"wrote WAL segment\", \"generation\", generation, \"index\", seg.Index, \"offset\", seg.Offset, \"bytes\", n)\n\t\t}\n\t}\n\n\treturn applyLastWalFile()\n}\n\n// appendWALSegmentV3 appends the specified segment to an open WAL file f.\nfunc (r *Replica) appendWALSegmentV3(ctx context.Context, client ReplicaClientV3, generation string, seg WALSegmentInfoV3, f *os.File) (int64, error) {\n\t// Download WAL segment.\n\trc, err := client.OpenWALSegmentV3(ctx, generation, seg.Index, seg.Offset)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer func() { _ = rc.Close() }()\n\n\treturn io.Copy(f, rc)\n}\n\n// checkpointV3 checkpoints the WAL file into the database.\nfunc checkpointV3(dbPath string) error {\n\tdb, err := sql.Open(\"sqlite\", dbPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() { _ = db.Close() }()\n\n\t_, err = db.Exec(\"PRAGMA wal_checkpoint(TRUNCATE)\")\n\treturn err\n}\n\n// checkIntegrity runs a SQLite integrity check on the database at dbPath.\nfunc checkIntegrity(ctx context.Context, dbPath string, mode IntegrityCheckMode) error {\n\tif mode == IntegrityCheckNone {\n\t\treturn nil\n\t}\n\n\tdb, err := sql.Open(\"sqlite\", dbPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open database for integrity check: %w\", err)\n\t}\n\tdefer func() { _ = db.Close() }()\n\n\tvar pragma string\n\tswitch mode {\n\tcase IntegrityCheckQuick:\n\t\tpragma = \"quick_check\"\n\tcase IntegrityCheckFull:\n\t\tpragma = \"integrity_check\"\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported integrity check mode: %d\", mode)\n\t}\n\n\tvar result string\n\tif err := db.QueryRowContext(ctx, \"PRAGMA \"+pragma).Scan(\u0026result); err != nil {\n\t\treturn fmt.Errorf(\"integrity check: %w\", err)\n\t}\n\tif result != \"ok\" {\n\t\treturn fmt.Errorf(\"integrity check failed: %s\", result)\n\t}\n\n\t// Clean up -shm and -wal files that SQLite may create during the PRAGMA.\n\t_ = os.Remove(dbPath + \"-shm\")\n\t_ = os.Remove(dbPath + \"-wal\")\n\n\treturn nil\n}\n\n// findBestV3SnapshotForTimestamp returns the best v0.3.x snapshot for the given timestamp.\n// Returns nil if no suitable snapshot exists.\nfunc (r *Replica) findBestV3SnapshotForTimestamp(ctx context.Context, client ReplicaClientV3, timestamp time.Time) (*SnapshotInfoV3, error) {\n\tgenerations, err := client.GenerationsV3(ctx)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"list v0.3.x generations: %w\", err)\n\t}\n\tif len(generations) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tvar allSnapshots []SnapshotInfoV3\n\tfor _, gen := range generations {\n\t\tsnapshots, err := client.SnapshotsV3(ctx, gen)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"list v0.3.x snapshots for generation %s: %w\", gen, err)\n\t\t}\n\t\tallSnapshots = append(allSnapshots, snapshots...)\n\t}\n\n\tif len(allSnapshots) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sort by CreatedAt for timestamp-based selection.\n\tsortSnapshotsV3ByCreatedAt(allSnapshots)\n\n\treturn findBestSnapshotV3(allSnapshots, timestamp), nil\n}\n\n// shouldUseV3Restore determines whether to use v0.3.x restore instead of LTX.\n// Returns true if v0.3.x has a better backup for the given options.\nfunc (r *Replica) shouldUseV3Restore(ctx context.Context, client ReplicaClientV3, timestamp time.Time) (bool, error) {\n\t// Get v0.3.x time bounds.\n\t_, v3UpdatedAt, err := r.TimeBoundsV3(ctx, client)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"get v0.3.x time bounds: %w\", err)\n\t}\n\n\t// Get LTX time bounds.\n\t_, ltxUpdatedAt, err := r.TimeBounds(ctx)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"get LTX time bounds: %w\", err)\n\t}\n\n\t// If no v0.3.x backups exist, use LTX.\n\tif v3UpdatedAt.IsZero() {\n\t\treturn false, nil\n\t}\n\n\t// If no LTX backups exist, use v0.3.x.\n\tif ltxUpdatedAt.IsZero() {\n\t\tr.Logger().Debug(\"using v0.3.x restore (no LTX backups)\")\n\t\treturn true, nil\n\t}\n\n\t// Both formats have backups - compare based on timestamp or latest.\n\tif !timestamp.IsZero() {\n\t\t// With timestamp: use format with best snapshot before timestamp.\n\t\tv3Snapshot, err := r.findBestV3SnapshotForTimestamp(ctx, client, timestamp)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"find v0.3.x snapshot: %w\", err)\n\t\t}\n\n\t\tltxSnapshot, err := r.findBestLTXSnapshotForTimestamp(ctx, timestamp)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"find LTX snapshot: %w\", err)\n\t\t}\n\n\t\tif v3Snapshot != nil \u0026\u0026 (ltxSnapshot == nil || v3Snapshot.CreatedAt.After(ltxSnapshot.CreatedAt)) {\n\t\t\tr.Logger().Debug(\"using v0.3.x restore (better snapshot for timestamp)\",\n\t\t\t\t\"v3_snapshot\", v3Snapshot.CreatedAt,\n\t\t\t\t\"ltx_snapshot\", ltxSnapshot)\n\t\t\treturn true, nil\n\t\t}\n\t} else {\n\t\t// Without timestamp: use format with most recent backup.\n\t\tif v3UpdatedAt.After(ltxUpdatedAt) {\n\t\t\tr.Logger().Debug(\"using v0.3.x restore (more recent backup)\",\n\t\t\t\t\"v3_updated_at\", v3UpdatedAt,\n\t\t\t\t\"ltx_updated_at\", ltxUpdatedAt)\n\t\t\treturn true, nil\n\t\t}\n\t}\n\n\treturn false, nil\n}\n\n// TimeBoundsV3 returns the time bounds of v0.3.x backups.\n// Returns zero times if no v0.3.x backups exist.\nfunc (r *Replica) TimeBoundsV3(ctx context.Context, client ReplicaClientV3) (createdAt, updatedAt time.Time, err error) {\n\tgenerations, err := client.GenerationsV3(ctx)\n\tif err != nil {\n\t\treturn time.Time{}, time.Time{}, err\n\t}\n\n\tfor _, gen := range generations {\n\t\tsnapshots, err := client.SnapshotsV3(ctx, gen)\n\t\tif err != nil {\n\t\t\treturn time.Time{}, time.Time{}, err\n\t\t}\n\t\tfor _, snap := range snapshots {\n\t\t\tif createdAt.IsZero() || snap.CreatedAt.Before(createdAt) {\n\t\t\t\tcreatedAt = snap.CreatedAt\n\t\t\t}\n\t\t\tif updatedAt.IsZero() || snap.CreatedAt.After(updatedAt) {\n\t\t\t\tupdatedAt = snap.CreatedAt\n\t\t\t}\n\t\t}\n\n\t\tsegments, err := client.WALSegmentsV3(ctx, gen)\n\t\tif err != nil {\n\t\t\treturn time.Time{}, time.Time{}, err\n\t\t}\n\t\tfor _, seg := range segments {\n\t\t\tif createdAt.IsZero() || seg.CreatedAt.Before(createdAt) {\n\t\t\t\tcreatedAt = seg.CreatedAt\n\t\t\t}\n\t\t\tif updatedAt.IsZero() || seg.CreatedAt.After(updatedAt) {\n\t\t\t\tupdatedAt = seg.CreatedAt\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createdAt, updatedAt, nil\n}\n\n// findBestLTXSnapshotForTimestamp returns the best LTX snapshot for the given timestamp.\n// Returns nil if no suitable snapshot exists.\nfunc (r *Replica) findBestLTXSnapshotForTimestamp(ctx context.Context, timestamp time.Time) (*ltx.FileInfo, error) {\n\t// Find snapshots at the snapshot level that are before the timestamp.\n\tsnapshots, err := FindLTXFiles(ctx, r.Client, SnapshotLevel, true, func(info *ltx.FileInfo) (bool, error) {\n\t\treturn info.CreatedAt.Before(timestamp), nil\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"find LTX snapshots: %w\", err)\n\t}\n\tif len(snapshots) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Return the latest snapshot before the timestamp (last in the sorted list).\n\treturn snapshots[len(snapshots)-1], nil\n}\n\n// CalcRestorePlan returns a list of storage paths to restore a snapshot at the given TXID.\nfunc CalcRestorePlan(ctx context.Context, client ReplicaClient, txID ltx.TXID, timestamp time.Time, logger *slog.Logger) ([]*ltx.FileInfo, error) {\n\tif txID != 0 \u0026\u0026 !timestamp.IsZero() {\n\t\treturn nil, fmt.Errorf(\"cannot specify both TXID \u0026 timestamp to restore\")\n\t}\n\n\tvar infos ltx.FileInfoSlice\n\tlogger = logger.With(\"target\", txID)\n\n\t// Start with latest snapshot before target TXID or timestamp.\n\t// Pass useMetadata flag to enable accurate timestamp fetching for timestamp-based restore.\n\tvar snapshot *ltx.FileInfo\n\tsnapshotItr, err := client.LTXFiles(ctx, SnapshotLevel, 0, !timestamp.IsZero())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor snapshotItr.Next() {\n\t\tinfo := snapshotItr.Item()\n\t\tlogger.Debug(\"finding snapshot before target TXID or timestamp\", \"snapshot\", info.MaxTXID)\n\t\tif txID != 0 \u0026\u0026 info.MaxTXID \u003e txID {\n\t\t\tcontinue\n\t\t}\n\t\tif !timestamp.IsZero() \u0026\u0026 !info.CreatedAt.Before(timestamp) {\n\t\t\tcontinue\n\t\t}\n\t\tsnapshot = info\n\t}\n\tif err := snapshotItr.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\tif snapshot != nil {\n\t\tlogger.Debug(\"found snapshot before target TXID or timestamp\", \"snapshot\", snapshot.MaxTXID)\n\t\tinfos = append(infos, snapshot)\n\t}\n\n\t// Collect candidates across all compaction levels and pick the next file\n\t// from any level that extends the longest contiguous TXID range.\n\tconst maxLevel = SnapshotLevel - 1\n\tstartTXID := infos.MaxTXID()\n\tcurrentMax := startTXID\n\tif txID != 0 \u0026\u0026 currentMax \u003e= txID {\n\t\treturn infos, nil\n\t}\n\n\tcursors := make([]*restoreLevelCursor, 0, maxLevel+1)\n\tfor level := maxLevel; level \u003e= 0; level-- {\n\t\tlogger.Debug(\"finding ltx files for level\", \"level\", level)\n\t\titr, err := client.LTXFiles(ctx, level, 0, !timestamp.IsZero())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcursors = append(cursors, \u0026restoreLevelCursor{\n\t\t\titr: itr,\n\t\t})\n\t}\n\tdefer func() {\n\t\tfor _, cursor := range cursors {\n\t\t\tif cursor != nil {\n\t\t\t\t_ = cursor.itr.Close()\n\t\t\t}\n\t\t}\n\t}()\n\n\tfor {\n\t\tvar next *restoreLevelCursor\n\t\tfor _, cursor := range cursors {\n\t\t\tif err := cursor.refresh(currentMax, txID, timestamp); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif cursor.candidate == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif next == nil || restoreCandidateBetter(next.candidate, cursor.candidate) {\n\t\t\t\tnext = cursor\n\t\t\t}\n\t\t}\n\n\t\tif next == nil || next.candidate == nil {\n\t\t\tbreak\n\t\t}\n\n\t\tif next.candidate.MaxTXID \u003c= currentMax {\n\t\t\tnext.candidate = nil\n\t\t\tcontinue\n\t\t}\n\n\t\tlogger.Debug(\"matching LTX file for restore\",\n\t\t\t\"filename\", ltx.FormatFilename(next.candidate.MinTXID, next.candidate.MaxTXID),\n\t\t\t\"level\", next.candidate.Level)\n\t\tinfos = append(infos, next.candidate)\n\t\tcurrentMax = next.candidate.MaxTXID\n\t\tnext.candidate = nil\n\n\t\tif txID != 0 \u0026\u0026 currentMax \u003e= txID {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif len(infos) \u003e 0 \u0026\u0026 txID == 0 \u0026\u0026 timestamp.IsZero() {\n\t\tfor _, cursor := range cursors {\n\t\t\tif err := cursor.ensureCurrent(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif cursor.current != nil \u0026\u0026 cursor.current.MinTXID \u003e currentMax+1 {\n\t\t\t\treturn nil, fmt.Errorf(\"non-contiguous ltx files: have up to %s but next file starts at %s\", currentMax, cursor.current.MinTXID)\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(infos) == 0 {\n\t\treturn nil, ErrTxNotAvailable\n\t}\n\tif txID != 0 \u0026\u0026 infos.MaxTXID() \u003c txID {\n\t\treturn nil, ErrTxNotAvailable\n\t}\n\n\treturn infos, nil\n}\n\ntype restoreLevelCursor struct {\n\t// itr streams LTX file infos for a single level in filename order.\n\titr ltx.FileIterator\n\t// current holds the last item read from itr but not yet evaluated.\n\tcurrent *ltx.FileInfo\n\t// candidate is the best eligible file at this level for the currentMax.\n\tcandidate *ltx.FileInfo\n\t// done indicates the iterator has been exhausted or errored.\n\tdone bool\n}\n\nfunc (c *restoreLevelCursor) refresh(currentMax, txID ltx.TXID, timestamp time.Time) error {\n\t// Advance the iterator until we've evaluated all files that could be\n\t// contiguous with currentMax. Keep the best eligible candidate.\n\tif c.done {\n\t\treturn nil\n\t}\n\tif c.candidate != nil \u0026\u0026 c.candidate.MaxTXID \u003c= currentMax {\n\t\tc.candidate = nil\n\t}\n\n\tfor {\n\t\tif err := c.ensureCurrent(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif c.done {\n\t\t\treturn nil\n\t\t}\n\n\t\tinfo := c.current\n\t\tif info.MinTXID \u003e currentMax+1 {\n\t\t\treturn nil\n\t\t}\n\t\tc.current = nil\n\n\t\tif info.MaxTXID \u003c= currentMax {\n\t\t\tcontinue\n\t\t}\n\t\tif txID != 0 \u0026\u0026 info.MaxTXID \u003e txID {\n\t\t\tcontinue\n\t\t}\n\t\tif !timestamp.IsZero() \u0026\u0026 !info.CreatedAt.Before(timestamp) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif c.candidate == nil || restoreCandidateBetter(c.candidate, info) {\n\t\t\tc.candidate = info\n\t\t}\n\t}\n}\n\nfunc (c *restoreLevelCursor) ensureCurrent() error {\n\t// Ensure current is populated with the next iterator item, or mark done.\n\tif c.done || c.current != nil {\n\t\treturn nil\n\t}\n\tif !c.itr.Next() {\n\t\tif err := c.itr.Err(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.done = true\n\t\treturn nil\n\t}\n\tc.current = c.itr.Item()\n\treturn nil\n}\n\nfunc restoreCandidateBetter(curr, next *ltx.FileInfo) bool {\n\tif next.MaxTXID != curr.MaxTXID {\n\t\treturn next.MaxTXID \u003e curr.MaxTXID\n\t}\n\tif next.MinTXID != curr.MinTXID {\n\t\treturn next.MinTXID \u003c curr.MinTXID\n\t}\n\tif next.Level != curr.Level {\n\t\treturn next.Level \u003e curr.Level\n\t}\n\treturn next.CreatedAt.Before(curr.CreatedAt)\n}\n\n// TXIDPath returns the path to the TXID sidecar file for the given database path.\n// Uses -txid suffix to match SQLite's naming convention for associated files (-wal, -shm).\nfunc TXIDPath(outputPath string) string {\n\treturn outputPath + \"-txid\"\n}\n\n// WriteTXIDFile atomically writes a TXID to a sidecar file at \u003coutputPath\u003e-txid.\n// Uses temp-file + fsync + rename for crash safety.\nfunc WriteTXIDFile(outputPath string, txid ltx.TXID) error {\n\ttxidPath := TXIDPath(outputPath)\n\ttmpPath := txidPath + \".tmp\"\n\n\tf, err := os.Create(tmpPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create txid temp file: %w\", err)\n\t}\n\tdefer f.Close()\n\tdefer os.Remove(tmpPath)\n\n\tif _, err := fmt.Fprintln(f, txid); err != nil {\n\t\treturn fmt.Errorf(\"write txid: %w\", err)\n\t}\n\n\tif err := f.Sync(); err != nil {\n\t\treturn fmt.Errorf(\"sync txid file: %w\", err)\n\t}\n\n\tif err := f.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close txid file: %w\", err)\n\t}\n\n\tif err := os.Rename(tmpPath, txidPath); err != nil {\n\t\treturn fmt.Errorf(\"rename txid file: %w\", err)\n\t}\n\n\tif err := internal.FsyncDir(filepath.Dir(txidPath)); err != nil {\n\t\treturn fmt.Errorf(\"sync txid dir: %w\", err)\n\t}\n\treturn nil\n}\n\n// ReadTXIDFile reads the TXID from a sidecar file at \u003coutputPath\u003e-txid.\n// Returns 0, nil if the file does not exist (first run).\nfunc ReadTXIDFile(outputPath string) (ltx.TXID, error) {\n\ttxidPath := TXIDPath(outputPath)\n\n\tdata, err := os.ReadFile(txidPath)\n\tif os.IsNotExist(err) {\n\t\treturn 0, nil\n\t} else if err != nil {\n\t\treturn 0, fmt.Errorf(\"read txid file: %w\", err)\n\t}\n\n\ttxid, err := ltx.ParseTXID(strings.TrimSpace(string(data)))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"parse txid file: %w\", err)\n\t}\n\n\treturn txid, nil\n}\n\n// ValidationError represents a single validation issue.\ntype ValidationError struct {\n\tLevel int // compaction level\n\tType string // \"gap\", \"overlap\", or \"unsorted\"\n\tMessage string // human-readable description\n\tPrevFile *ltx.FileInfo // previous file\n\tCurrFile *ltx.FileInfo // current file that caused error\n}\n\n// ValidateLevel checks LTX files at the given level are sorted and contiguous.\n// Returns a slice of validation errors (empty if valid).\nfunc (r *Replica) ValidateLevel(ctx context.Context, level int) ([]ValidationError, error) {\n\titr, err := r.Client.LTXFiles(ctx, level, 0, false)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fetch ltx files: %w\", err)\n\t}\n\tdefer itr.Close()\n\n\tvar errors []ValidationError\n\tvar prevInfo *ltx.FileInfo\n\n\tfor itr.Next() {\n\t\tinfo := itr.Item()\n\n\t\t// Skip first file - nothing to compare against\n\t\tif prevInfo == nil {\n\t\t\tprevInfo = info\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check for sort order: curr.MinTXID should be \u003e= prev.MinTXID\n\t\tif info.MinTXID \u003c prevInfo.MinTXID {\n\t\t\terrors = append(errors, ValidationError{\n\t\t\t\tLevel: level,\n\t\t\t\tType: \"unsorted\",\n\t\t\t\tMessage: fmt.Sprintf(\"files out of order: curr.MinTXID=%s \u003c prev.MinTXID=%s\", info.MinTXID, prevInfo.MinTXID),\n\t\t\t\tPrevFile: prevInfo,\n\t\t\t\tCurrFile: info,\n\t\t\t})\n\t\t\tprevInfo = info\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check for TXID contiguity: prev.MaxTXID + 1 should equal curr.MinTXID\n\t\texpectedMinTXID := prevInfo.MaxTXID + 1\n\t\tif info.MinTXID != expectedMinTXID {\n\t\t\tif info.MinTXID \u003e expectedMinTXID {\n\t\t\t\terrors = append(errors, ValidationError{\n\t\t\t\t\tLevel: level,\n\t\t\t\t\tType: \"gap\",\n\t\t\t\t\tMessage: fmt.Sprintf(\"TXID gap: prev.MaxTXID=%s, curr.MinTXID=%s (expected %s)\", prevInfo.MaxTXID, info.MinTXID, expectedMinTXID),\n\t\t\t\t\tPrevFile: prevInfo,\n\t\t\t\t\tCurrFile: info,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\terrors = append(errors, ValidationError{\n\t\t\t\t\tLevel: level,\n\t\t\t\t\tType: \"overlap\",\n\t\t\t\t\tMessage: fmt.Sprintf(\"TXID overlap: prev.MaxTXID=%s, curr.MinTXID=%s\", prevInfo.MaxTXID, info.MinTXID),\n\t\t\t\t\tPrevFile: prevInfo,\n\t\t\t\t\tCurrFile: info,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tprevInfo = info\n\t}\n\n\tif err := itr.Close(); err != nil {\n\t\treturn nil, fmt.Errorf(\"close iterator: %w\", err)\n\t}\n\n\treturn errors, nil\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"rand","path":"crypto/rand","span":{"start":[5,1],"end":[5,15],"bytes":[40,54]}},{"name":"sql","path":"database/sql","span":{"start":[6,1],"end":[6,16],"bytes":[55,70]}},{"name":"errors","path":"errors","span":{"start":[7,1],"end":[7,10],"bytes":[71,80]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[81,87]}},{"name":"io","path":"io","span":{"start":[9,1],"end":[9,6],"bytes":[88,93]}},{"name":"slog","path":"log/slog","span":{"start":[10,1],"end":[10,12],"bytes":[94,105]}},{"name":"os","path":"os","span":{"start":[11,1],"end":[11,6],"bytes":[106,111]}},{"name":"filepath","path":"path/filepath","span":{"start":[12,1],"end":[12,17],"bytes":[112,128]}},{"name":"strings","path":"strings","span":{"start":[13,1],"end":[13,11],"bytes":[129,139]}},{"name":"sync","path":"sync","span":{"start":[14,1],"end":[14,8],"bytes":[140,147]}},{"name":"atomic","path":"sync/atomic","span":{"start":[15,1],"end":[15,15],"bytes":[148,162]}},{"name":"time","path":"time","span":{"start":[16,1],"end":[16,8],"bytes":[163,170]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[18,1],"end":[18,27],"bytes":[172,198]}},{"name":"semaphore","path":"golang.org/x/sync/semaphore","span":{"start":[19,1],"end":[19,31],"bytes":[199,229]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[21,1],"end":[21,46],"bytes":[231,276]}}],"types":{"Replica":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica","kind":"struct","span":{"start":[35,1],"end":[69,2],"bytes":[643,1754]},"callables":{"github.com/benbjohnson/litestream.Replica.CalcRestoreTarget":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CalcRestoreTarget","kind":"method","span":{"start":[562,1],"end":[595,2],"bytes":[15010,16196]},"signature":"github.com/benbjohnson/litestream.Replica.CalcRestoreTarget","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[562,1],"end":[562,112],"bytes":[15010,15121]}},{"name":"opt","type":"github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[562,1],"end":[562,112],"bytes":[15010,15121]}}],"return_type":"(time.Time, error)","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"564:31":{"kind":"call","span":{"start":[564,31],"end":[564,48],"bytes":[15209,15226]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBounds"},"566:23":{"kind":"call","span":{"start":[566,23],"end":[566,56],"bytes":[15266,15299]},"callee":null},"571:36":{"kind":"call","span":{"start":[571,36],"end":[571,63],"bytes":[15447,15474]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3"},"573:24":{"kind":"call","span":{"start":[573,24],"end":[573,65],"bytes":[15516,15557]},"callee":null},"576:32":{"kind":"call","span":{"start":[576,32],"end":[576,50],"bytes":[15644,15662]},"callee":null},"576:54":{"kind":"call","span":{"start":[576,54],"end":[576,83],"bytes":[15666,15695]},"callee":null},"576:7":{"kind":"call","span":{"start":[576,7],"end":[576,27],"bytes":[15619,15639]},"callee":null},"579:32":{"kind":"call","span":{"start":[579,32],"end":[579,50],"bytes":[15761,15779]},"callee":null},"579:54":{"kind":"call","span":{"start":[579,54],"end":[579,82],"bytes":[15783,15811]},"callee":null},"579:7":{"kind":"call","span":{"start":[579,7],"end":[579,27],"bytes":[15736,15756]},"callee":null},"585:6":{"kind":"call","span":{"start":[585,6],"end":[585,28],"bytes":[15898,15920]},"callee":null},"586:28":{"kind":"call","span":{"start":[586,28],"end":[586,46],"bytes":[15950,15968]},"callee":null},"586:6":{"kind":"call","span":{"start":[586,6],"end":[586,24],"bytes":[15928,15946]},"callee":null},"587:24":{"kind":"call","span":{"start":[587,24],"end":[587,54],"bytes":[15994,16024]},"callee":null},"589:41":{"kind":"call","span":{"start":[589,41],"end":[589,71],"bytes":[16069,16099]},"callee":null},"589:6":{"kind":"call","span":{"start":[589,6],"end":[589,37],"bytes":[16034,16065]},"callee":null},"590:24":{"kind":"call","span":{"start":[590,24],"end":[590,62],"bytes":[16125,16163]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.CreatedAt":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CreatedAt","kind":"method","span":{"start":[520,1],"end":[534,2],"bytes":[13911,14226]},"signature":"github.com/benbjohnson/litestream.Replica.CreatedAt","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[520,1],"end":[520,70],"bytes":[13911,13980]}}],"return_type":"(time.Time, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"524:14":{"kind":"call","span":{"start":[524,14],"end":[524,49],"bytes":[14057,14092]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"528:8":{"kind":"call","span":{"start":[528,8],"end":[528,19],"bytes":[14138,14149]},"callee":null},"530:5":{"kind":"call","span":{"start":[530,5],"end":[530,15],"bytes":[14155,14165]},"callee":null},"531:9":{"kind":"call","span":{"start":[531,9],"end":[531,19],"bytes":[14176,14186]},"callee":null},"533:14":{"kind":"call","span":{"start":[533,14],"end":[533,25],"bytes":[14213,14224]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.DB":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB","kind":"method","span":{"start":[101,1],"end":[101,43],"bytes":[2422,2464]},"signature":"github.com/benbjohnson/litestream.Replica.DB","parameters":[],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.Replica.EnforceRetention":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.EnforceRetention","kind":"method","span":{"start":[318,1],"end":[350,2],"bytes":[8223,9303]},"signature":"github.com/benbjohnson/litestream.Replica.EnforceRetention","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[318,1],"end":[318,70],"bytes":[8223,8292]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"319:2":{"kind":"call","span":{"start":[319,2],"end":[319,63],"bytes":[8294,8355]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.Logger":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","kind":"method","span":{"start":[92,1],"end":[98,2],"bytes":[2181,2342]},"signature":"github.com/benbjohnson/litestream.Replica.Logger","parameters":[],"return_type":"*log/slog.Logger","metrics":{"cyclomatic":2},"body":{"93:12":{"kind":"call","span":{"start":[93,12],"end":[93,26],"bytes":[2234,2248]},"callee":null},"97:32":{"kind":"call","span":{"start":[97,32],"end":[97,47],"bytes":[2324,2339]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type"},"97:9":{"kind":"call","span":{"start":[97,9],"end":[97,48],"bytes":[2301,2340]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo","kind":"method","span":{"start":[284,1],"end":[299,2],"bytes":[7368,7745]},"signature":"github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[284,1],"end":[284,98],"bytes":[7368,7465]}},{"name":"level","type":"int","span":{"start":[284,1],"end":[284,98],"bytes":[7368,7465]}}],"return_type":"(github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"286:14":{"kind":"call","span":{"start":[286,14],"end":[286,53],"bytes":[7522,7561]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"290:8":{"kind":"call","span":{"start":[290,8],"end":[290,19],"bytes":[7608,7619]},"callee":null},"292:6":{"kind":"call","span":{"start":[292,6],"end":[292,16],"bytes":[7626,7636]},"callee":null},"293:11":{"kind":"call","span":{"start":[293,11],"end":[293,21],"bytes":[7649,7659]},"callee":null},"298:15":{"kind":"call","span":{"start":[298,15],"end":[298,26],"bytes":[7732,7743]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.Pos":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos","kind":"method","span":{"start":[303,1],"end":[307,2],"bytes":[7865,7950]},"signature":"github.com/benbjohnson/litestream.Replica.Pos","parameters":[],"return_type":"github.com/superfly/ltx.Pos","metrics":{"cyclomatic":1},"body":{"304:2":{"kind":"call","span":{"start":[304,2],"end":[304,14],"bytes":[7900,7912]},"callee":null},"305:8":{"kind":"call","span":{"start":[305,8],"end":[305,22],"bytes":[7920,7934]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.Restore":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","kind":"method","span":{"start":[608,1],"end":[799,2],"bytes":[16899,23659]},"signature":"github.com/benbjohnson/litestream.Replica.Restore","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[608,1],"end":[608,81],"bytes":[16899,16979]}},{"name":"opt","type":"github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[608,1],"end":[608,81],"bytes":[16899,16979]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":44},"body":{"611:10":{"kind":"call","span":{"start":[611,10],"end":[611,44],"bytes":[17038,17072]},"callee":null},"612:30":{"kind":"call","span":{"start":[612,30],"end":[612,52],"bytes":[17102,17124]},"callee":null},"613:10":{"kind":"call","span":{"start":[613,10],"end":[613,67],"bytes":[17136,17193]},"callee":null},"615:10":{"kind":"call","span":{"start":[615,10],"end":[615,57],"bytes":[17244,17291]},"callee":null},"616:27":{"kind":"call","span":{"start":[616,27],"end":[616,49],"bytes":[17318,17340]},"callee":null},"617:10":{"kind":"call","span":{"start":[617,10],"end":[617,62],"bytes":[17352,17404]},"callee":null},"619:10":{"kind":"call","span":{"start":[619,10],"end":[619,80],"bytes":[17557,17627]},"callee":null},"625:20":{"kind":"call","span":{"start":[625,20],"end":[625,43],"bytes":[17803,17826]},"callee":null},"626:21":{"kind":"call","span":{"start":[626,21],"end":[626,49],"bytes":[17865,17893]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ReadTXIDFile"},"628:12":{"kind":"call","span":{"start":[628,12],"end":[628,72],"bytes":[17928,17988]},"callee":null},"631:12":{"kind":"call","span":{"start":[631,12],"end":[631,147],"bytes":[18023,18158]},"callee":null},"636:27":{"kind":"call","span":{"start":[636,27],"end":[636,74],"bytes":[18372,18419]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"638:12":{"kind":"call","span":{"start":[638,12],"end":[638,83],"bytes":[18453,18524]},"callee":null},"642:8":{"kind":"call","span":{"start":[642,8],"end":[642,26],"bytes":[18574,18592]},"callee":null},"643:22":{"kind":"call","span":{"start":[643,22],"end":[643,40],"bytes":[18616,18634]},"callee":null},"645:14":{"kind":"call","span":{"start":[645,14],"end":[645,31],"bytes":[18653,18670]},"callee":null},"646:9":{"kind":"call","span":{"start":[646,9],"end":[646,28],"bytes":[18693,18712]},"callee":null},"647:12":{"kind":"call","span":{"start":[647,12],"end":[647,82],"bytes":[18724,18794]},"callee":null},"649:8":{"kind":"call","span":{"start":[649,8],"end":[649,27],"bytes":[18807,18826]},"callee":null},"653:13":{"kind":"call","span":{"start":[653,13],"end":[653,247],"bytes":[18909,19143]},"callee":null},"656:13":{"kind":"call","span":{"start":[656,13],"end":[656,208],"bytes":[19201,19396]},"callee":null},"660:4":{"kind":"call","span":{"start":[660,4],"end":[660,14],"bytes":[19412,19422]},"callee":null},"661:11":{"kind":"call","span":{"start":[661,11],"end":[661,66],"bytes":[19522,19577]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow"},"666:15":{"kind":"call","span":{"start":[666,15],"end":[666,38],"bytes":[19647,19670]},"callee":null},"667:10":{"kind":"call","span":{"start":[667,10],"end":[667,86],"bytes":[19694,19770]},"callee":null},"668:13":{"kind":"call","span":{"start":[668,13],"end":[668,31],"bytes":[19783,19801]},"callee":null},"676:18":{"kind":"call","span":{"start":[676,18],"end":[676,66],"bytes":[20103,20151]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore"},"681:12":{"kind":"call","span":{"start":[681,12],"end":[681,33],"bytes":[20216,20237]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3"},"686:16":{"kind":"call","span":{"start":[686,16],"end":[686,83],"bytes":[20266,20333]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan"},"686:72":{"kind":"call","span":{"start":[686,72],"end":[686,82],"bytes":[20322,20332]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger"},"688:10":{"kind":"call","span":{"start":[688,10],"end":[688,57],"bytes":[20360,20407]},"callee":null},"691:108":{"kind":"call","span":{"start":[691,108],"end":[691,118],"bytes":[20519,20529]},"callee":null},"691:2":{"kind":"call","span":{"start":[691,2],"end":[691,12],"bytes":[20413,20423]},"callee":null},"691:40":{"kind":"call","span":{"start":[691,40],"end":[691,50],"bytes":[20451,20461]},"callee":null},"691:66":{"kind":"call","span":{"start":[691,66],"end":[691,76],"bytes":[20477,20487]},"callee":null},"693:10":{"kind":"call","span":{"start":[693,10],"end":[693,42],"bytes":[20554,20586]},"callee":null},"693:31":{"kind":"call","span":{"start":[693,31],"end":[693,41],"bytes":[20575,20585]},"callee":null},"694:8":{"kind":"call","span":{"start":[694,8],"end":[700,5],"bytes":[20594,20708]},"callee":null},"705:11":{"kind":"call","span":{"start":[705,11],"end":[706,71],"bytes":[20854,21010]},"callee":null},"709:3":{"kind":"call","span":{"start":[709,3],"end":[709,13],"bytes":[21018,21028]},"callee":null},"711:10":{"kind":"call","span":{"start":[711,10],"end":[711,134],"bytes":[21140,21264]},"callee":null},"711:122":{"kind":"call","span":{"start":[711,122],"end":[711,132],"bytes":[21252,21262]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger"},"711:23":{"kind":"call","span":{"start":[711,23],"end":[711,133],"bytes":[21153,21263]},"callee":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.NewResumableReader"},"714:5":{"kind":"call","span":{"start":[714,5],"end":[714,14],"bytes":[21273,21282]},"callee":null},"715:10":{"kind":"call","span":{"start":[715,10],"end":[715,58],"bytes":[21299,21347]},"callee":null},"720:11":{"kind":"call","span":{"start":[720,11],"end":[720,17],"bytes":[21436,21442]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB"},"723:12":{"kind":"call","span":{"start":[723,12],"end":[723,68],"bytes":[21493,21549]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll"},"723:30":{"kind":"call","span":{"start":[723,30],"end":[723,58],"bytes":[21511,21539]},"callee":null},"724:10":{"kind":"call","span":{"start":[724,10],"end":[724,56],"bytes":[21573,21619]},"callee":null},"729:2":{"kind":"call","span":{"start":[729,2],"end":[729,12],"bytes":[21712,21722]},"callee":null},"729:75":{"kind":"call","span":{"start":[729,75],"end":[729,84],"bytes":[21785,21794]},"callee":null},"730:8":{"kind":"call","span":{"start":[730,8],"end":[730,49],"bytes":[21803,21844]},"callee":null},"732:12":{"kind":"call","span":{"start":[732,12],"end":[732,36],"bytes":[21857,21881]},"callee":null},"734:10":{"kind":"call","span":{"start":[734,10],"end":[734,58],"bytes":[21908,21956]},"callee":null},"736:8":{"kind":"call","span":{"start":[736,8],"end":[736,34],"bytes":[21967,21993]},"callee":null},"738:12":{"kind":"call","span":{"start":[738,12],"end":[738,21],"bytes":[22006,22015]},"callee":null},"740:5":{"kind":"call","span":{"start":[740,5],"end":[748,5],"bytes":[22021,22251]},"callee":null,"is_goroutine":true},"750:9":{"kind":"call","span":{"start":[750,9],"end":[750,27],"bytes":[22261,22279]},"callee":null},"751:12":{"kind":"call","span":{"start":[751,12],"end":[751,35],"bytes":[22291,22314]},"callee":null},"752:10":{"kind":"call","span":{"start":[752,10],"end":[752,48],"bytes":[22338,22376]},"callee":null},"755:12":{"kind":"call","span":{"start":[755,12],"end":[755,20],"bytes":[22392,22400]},"callee":null},"757:19":{"kind":"call","span":{"start":[757,19],"end":[757,28],"bytes":[22446,22455]},"callee":null},"762:2":{"kind":"call","span":{"start":[762,2],"end":[762,12],"bytes":[22521,22531]},"callee":null},"763:12":{"kind":"call","span":{"start":[763,12],"end":[763,52],"bytes":[22594,22634]},"callee":null},"766:12":{"kind":"call","span":{"start":[766,12],"end":[766,59],"bytes":[22676,22723]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir"},"766:30":{"kind":"call","span":{"start":[766,30],"end":[766,58],"bytes":[22694,22722]},"callee":null},"767:10":{"kind":"call","span":{"start":[767,10],"end":[767,56],"bytes":[22747,22793]},"callee":null},"771:13":{"kind":"call","span":{"start":[771,13],"end":[771,68],"bytes":[22857,22912]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkIntegrity"},"772:7":{"kind":"call","span":{"start":[772,7],"end":[772,16],"bytes":[22933,22942]},"callee":null},"773:9":{"kind":"call","span":{"start":[773,9],"end":[773,34],"bytes":[22960,22985]},"callee":null},"774:9":{"kind":"call","span":{"start":[774,9],"end":[774,43],"bytes":[22994,23028]},"callee":null},"775:9":{"kind":"call","span":{"start":[775,9],"end":[775,43],"bytes":[23037,23071]},"callee":null},"777:11":{"kind":"call","span":{"start":[777,11],"end":[777,62],"bytes":[23087,23138]},"callee":null},"779:3":{"kind":"call","span":{"start":[779,3],"end":[779,13],"bytes":[23145,23155]},"callee":null},"786:9":{"kind":"call","span":{"start":[786,9],"end":[786,23],"bytes":[23369,23383]},"callee":null},"791:20":{"kind":"call","span":{"start":[791,20],"end":[791,30],"bytes":[23426,23436]},"callee":null},"792:13":{"kind":"call","span":{"start":[792,13],"end":[792,51],"bytes":[23460,23498]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile"},"793:11":{"kind":"call","span":{"start":[793,11],"end":[793,57],"bytes":[23523,23569]},"callee":null},"795:10":{"kind":"call","span":{"start":[795,10],"end":[795,68],"bytes":[23583,23641]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow"}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore/github.com/benbjohnson/litestream.Replica.Restore.closure_1","kind":"function","span":{"start":[694,1],"end":[700,5],"bytes":[20587,20708]},"signature":"github.com/benbjohnson/litestream.Replica.Restore.closure_1","parameters":[],"body":{"697:9":{"kind":"call","span":{"start":[697,9],"end":[697,23],"bytes":[20680,20694]},"callee":null}}},"closure_2":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore/github.com/benbjohnson/litestream.Replica.Restore.closure_2","kind":"function","span":{"start":[730,1],"end":[730,49],"bytes":[21796,21844]},"signature":"github.com/benbjohnson/litestream.Replica.Restore.closure_2","parameters":[],"body":{"730:21":{"kind":"call","span":{"start":[730,21],"end":[730,45],"bytes":[21816,21840]},"callee":null}}},"closure_3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore/github.com/benbjohnson/litestream.Replica.Restore.closure_3","kind":"function","span":{"start":[736,1],"end":[736,34],"bytes":[21960,21993]},"signature":"github.com/benbjohnson/litestream.Replica.Restore.closure_3","parameters":[],"body":{"736:21":{"kind":"call","span":{"start":[736,21],"end":[736,30],"bytes":[21980,21989]},"callee":null}}},"closure_4":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore/github.com/benbjohnson/litestream.Replica.Restore.closure_4","kind":"function","span":{"start":[740,1],"end":[748,5],"bytes":[22017,22251]},"signature":"github.com/benbjohnson/litestream.Replica.Restore.closure_4","parameters":[],"body":{"741:13":{"kind":"call","span":{"start":[741,13],"end":[741,39],"bytes":[22042,22068]},"callee":null},"743:22":{"kind":"call","span":{"start":[743,22],"end":[743,62],"bytes":[22108,22148]},"callee":null},"743:4":{"kind":"call","span":{"start":[743,4],"end":[743,63],"bytes":[22090,22149]},"callee":null},"747:25":{"kind":"call","span":{"start":[747,25],"end":[747,39],"bytes":[22231,22245]},"callee":null},"747:7":{"kind":"call","span":{"start":[747,7],"end":[747,40],"bytes":[22213,22246]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.RestoreV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","kind":"method","span":{"start":[1067,1],"end":[1176,2],"bytes":[31404,34995]},"signature":"github.com/benbjohnson/litestream.Replica.RestoreV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1067,1],"end":[1067,77],"bytes":[31404,31480]}},{"name":"opt","type":"github.com/benbjohnson/litestream.RestoreOptions","span":{"start":[1067,1],"end":[1067,77],"bytes":[31404,31480]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":22},"body":{"1070:10":{"kind":"call","span":{"start":[1070,10],"end":[1070,70],"bytes":[31542,31602]},"callee":null},"1075:10":{"kind":"call","span":{"start":[1075,10],"end":[1075,44],"bytes":[31665,31699]},"callee":null},"1077:10":{"kind":"call","span":{"start":[1077,10],"end":[1077,80],"bytes":[31852,31922]},"callee":null},"1081:15":{"kind":"call","span":{"start":[1081,15],"end":[1081,38],"bytes":[31988,32011]},"callee":null},"1082:10":{"kind":"call","span":{"start":[1082,10],"end":[1082,86],"bytes":[32035,32111]},"callee":null},"1083:13":{"kind":"call","span":{"start":[1083,13],"end":[1083,31],"bytes":[32124,32142]},"callee":null},"1088:22":{"kind":"call","span":{"start":[1088,22],"end":[1088,47],"bytes":[32209,32234]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3"},"1090:10":{"kind":"call","span":{"start":[1090,10],"end":[1090,49],"bytes":[32261,32300]},"callee":null},"1092:5":{"kind":"call","span":{"start":[1092,5],"end":[1092,21],"bytes":[32308,32324]},"callee":null},"1099:21":{"kind":"call","span":{"start":[1099,21],"end":[1099,49],"bytes":[32500,32528]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3"},"1101:11":{"kind":"call","span":{"start":[1101,11],"end":[1101,71],"bytes":[32557,32617]},"callee":null},"1103:18":{"kind":"call","span":{"start":[1103,18],"end":[1103,52],"bytes":[32639,32673]},"callee":null},"1105:5":{"kind":"call","span":{"start":[1105,5],"end":[1105,22],"bytes":[32681,32698]},"callee":null},"1110:2":{"kind":"call","span":{"start":[1110,2],"end":[1110,42],"bytes":[32802,32842]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt"},"1113:14":{"kind":"call","span":{"start":[1113,14],"end":[1113,61],"bytes":[32947,32994]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.findBestSnapshotV3"},"1118:2":{"kind":"call","span":{"start":[1118,2],"end":[1118,12],"bytes":[33046,33056]},"callee":null},"1124:19":{"kind":"call","span":{"start":[1124,19],"end":[1124,65],"bytes":[33262,33308]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3"},"1126:10":{"kind":"call","span":{"start":[1126,10],"end":[1126,50],"bytes":[33335,33375]},"callee":null},"1128:13":{"kind":"call","span":{"start":[1128,13],"end":[1128,73],"bytes":[33391,33451]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.filterWALSegmentsV3"},"1130:2":{"kind":"call","span":{"start":[1130,2],"end":[1130,12],"bytes":[33454,33464]},"callee":null},"1130:53":{"kind":"call","span":{"start":[1130,53],"end":[1130,66],"bytes":[33505,33518]},"callee":null},"1134:11":{"kind":"call","span":{"start":[1134,11],"end":[1134,17],"bytes":[33605,33611]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB"},"1135:13":{"kind":"call","span":{"start":[1135,13],"end":[1135,25],"bytes":[33637,33649]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.DirInfo"},"1137:12":{"kind":"call","span":{"start":[1137,12],"end":[1137,68],"bytes":[33664,33720]},"callee":null},"1137:30":{"kind":"call","span":{"start":[1137,30],"end":[1137,58],"bytes":[33682,33710]},"callee":null},"1138:10":{"kind":"call","span":{"start":[1138,10],"end":[1138,56],"bytes":[33744,33790]},"callee":null},"1143:8":{"kind":"call","span":{"start":[1143,8],"end":[1143,43],"bytes":[33872,33907]},"callee":null},"1146:12":{"kind":"call","span":{"start":[1146,12],"end":[1146,91],"bytes":[33958,34037]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3"},"1147:10":{"kind":"call","span":{"start":[1147,10],"end":[1147,50],"bytes":[34061,34101]},"callee":null},"1151:12":{"kind":"call","span":{"start":[1151,12],"end":[1151,101],"bytes":[34141,34230]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3"},"1152:10":{"kind":"call","span":{"start":[1152,10],"end":[1152,51],"bytes":[34254,34295]},"callee":null},"1156:12":{"kind":"call","span":{"start":[1156,12],"end":[1156,46],"bytes":[34337,34371]},"callee":null},"1157:10":{"kind":"call","span":{"start":[1157,10],"end":[1157,54],"bytes":[34395,34439]},"callee":null},"1159:12":{"kind":"call","span":{"start":[1159,12],"end":[1159,59],"bytes":[34454,34501]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir"},"1159:30":{"kind":"call","span":{"start":[1159,30],"end":[1159,58],"bytes":[34472,34500]},"callee":null},"1160:10":{"kind":"call","span":{"start":[1160,10],"end":[1160,56],"bytes":[34525,34571]},"callee":null},"1164:13":{"kind":"call","span":{"start":[1164,13],"end":[1164,68],"bytes":[34635,34690]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkIntegrity"},"1165:7":{"kind":"call","span":{"start":[1165,7],"end":[1165,16],"bytes":[34711,34720]},"callee":null},"1166:9":{"kind":"call","span":{"start":[1166,9],"end":[1166,34],"bytes":[34738,34763]},"callee":null},"1167:9":{"kind":"call","span":{"start":[1167,9],"end":[1167,43],"bytes":[34772,34806]},"callee":null},"1168:9":{"kind":"call","span":{"start":[1168,9],"end":[1168,43],"bytes":[34815,34849]},"callee":null},"1170:11":{"kind":"call","span":{"start":[1170,11],"end":[1170,62],"bytes":[34865,34916]},"callee":null},"1172:3":{"kind":"call","span":{"start":[1172,3],"end":[1172,13],"bytes":[34923,34933]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3/github.com/benbjohnson/litestream.Replica.RestoreV3.closure_1","kind":"function","span":{"start":[1143,1],"end":[1143,43],"bytes":[33865,33907]},"signature":"github.com/benbjohnson/litestream.Replica.RestoreV3.closure_1","parameters":[],"body":{"1143:21":{"kind":"call","span":{"start":[1143,21],"end":[1143,39],"bytes":[33885,33903]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.SetPos":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.SetPos","kind":"method","span":{"start":[310,1],"end":[314,2],"bytes":[8000,8088]},"signature":"github.com/benbjohnson/litestream.Replica.SetPos","parameters":[{"name":"pos","type":"github.com/superfly/ltx.Pos","span":{"start":[310,1],"end":[310,40],"bytes":[8000,8039]}}],"metrics":{"cyclomatic":1},"body":{"311:2":{"kind":"call","span":{"start":[311,2],"end":[311,13],"bytes":[8041,8052]},"callee":null},"312:8":{"kind":"call","span":{"start":[312,8],"end":[312,21],"bytes":[8060,8073]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.Start":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Start","kind":"method","span":{"start":[104,1],"end":[121,2],"bytes":[2515,2900]},"signature":"github.com/benbjohnson/litestream.Replica.Start","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[104,1],"end":[104,53],"bytes":[2515,2567]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"111:2":{"kind":"call","span":{"start":[111,2],"end":[111,15],"bytes":[2691,2704]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Stop"},"114:18":{"kind":"call","span":{"start":[114,18],"end":[114,41],"bytes":[2758,2781]},"callee":null},"117:2":{"kind":"call","span":{"start":[117,2],"end":[117,13],"bytes":[2823,2834]},"callee":null},"118:5":{"kind":"call","span":{"start":[118,5],"end":[118,51],"bytes":[2839,2885]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Start/github.com/benbjohnson/litestream.Replica.Start.closure_1","kind":"function","span":{"start":[118,1],"end":[118,51],"bytes":[2835,2885]},"signature":"github.com/benbjohnson/litestream.Replica.Start.closure_1","parameters":[],"body":{"118:20":{"kind":"call","span":{"start":[118,20],"end":[118,31],"bytes":[2854,2865]},"callee":null},"118:33":{"kind":"call","span":{"start":[118,33],"end":[118,47],"bytes":[2867,2881]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.Stop":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Stop","kind":"method","span":{"start":[128,1],"end":[140,2],"bytes":[3160,3374]},"signature":"github.com/benbjohnson/litestream.Replica.Stop","parameters":[{"name":"hard","type":"bool","span":{"start":[128,1],"end":[128,48],"bytes":[3160,3207]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"129:2":{"kind":"call","span":{"start":[129,2],"end":[129,12],"bytes":[3209,3219]},"callee":null},"130:2":{"kind":"call","span":{"start":[130,2],"end":[130,13],"bytes":[3221,3232]},"callee":null},"132:2":{"kind":"call","span":{"start":[132,2],"end":[132,14],"bytes":[3235,3247]},"callee":null},"133:8":{"kind":"call","span":{"start":[133,8],"end":[133,22],"bytes":[3255,3269]},"callee":null},"135:11":{"kind":"call","span":{"start":[135,11],"end":[135,22],"bytes":[3305,3316]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.Sync":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync","kind":"method","span":{"start":[144,1],"end":[146,2],"bytes":[3532,3614]},"signature":"github.com/benbjohnson/litestream.Replica.Sync","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[144,1],"end":[144,58],"bytes":[3532,3589]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"145:9":{"kind":"call","span":{"start":[145,9],"end":[145,23],"bytes":[3598,3612]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.sync"}}},"github.com/benbjohnson/litestream.Replica.TimeBounds":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBounds","kind":"method","span":{"start":[538,1],"end":[559,2],"bytes":[14333,14951]},"signature":"github.com/benbjohnson/litestream.Replica.TimeBounds","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[538,1],"end":[538,96],"bytes":[14333,14428]}}],"return_type":"(time.Time, time.Time, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"540:15":{"kind":"call","span":{"start":[540,15],"end":[540,54],"bytes":[14494,14533]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"545:7":{"kind":"call","span":{"start":[545,7],"end":[545,17],"bytes":[14599,14609]},"callee":null},"546:12":{"kind":"call","span":{"start":[546,12],"end":[546,22],"bytes":[14623,14633]},"callee":null},"547:29":{"kind":"call","span":{"start":[547,29],"end":[547,61],"bytes":[14662,14694]},"callee":null},"547:7":{"kind":"call","span":{"start":[547,7],"end":[547,25],"bytes":[14640,14658]},"callee":null},"550:29":{"kind":"call","span":{"start":[550,29],"end":[550,60],"bytes":[14761,14792]},"callee":null},"550:7":{"kind":"call","span":{"start":[550,7],"end":[550,25],"bytes":[14739,14757]},"callee":null},"554:13":{"kind":"call","span":{"start":[554,13],"end":[554,24],"bytes":[14847,14858]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.TimeBoundsV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3","kind":"method","span":{"start":[1458,1],"end":[1493,2],"bytes":[43406,44399]},"signature":"github.com/benbjohnson/litestream.Replica.TimeBoundsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1458,1],"end":[1458,122],"bytes":[43406,43527]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClientV3","span":{"start":[1458,1],"end":[1458,122],"bytes":[43406,43527]}}],"return_type":"(time.Time, time.Time, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"1459:22":{"kind":"call","span":{"start":[1459,22],"end":[1459,47],"bytes":[43549,43574]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3"},"1465:21":{"kind":"call","span":{"start":[1465,21],"end":[1465,49],"bytes":[43690,43718]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3"},"1470:29":{"kind":"call","span":{"start":[1470,29],"end":[1470,61],"bytes":[43844,43876]},"callee":null},"1470:7":{"kind":"call","span":{"start":[1470,7],"end":[1470,25],"bytes":[43822,43840]},"callee":null},"1473:29":{"kind":"call","span":{"start":[1473,29],"end":[1473,60],"bytes":[43943,43974]},"callee":null},"1473:7":{"kind":"call","span":{"start":[1473,7],"end":[1473,25],"bytes":[43921,43939]},"callee":null},"1478:20":{"kind":"call","span":{"start":[1478,20],"end":[1478,50],"bytes":[44037,44067]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3"},"1483:29":{"kind":"call","span":{"start":[1483,29],"end":[1483,60],"bytes":[44191,44222]},"callee":null},"1483:7":{"kind":"call","span":{"start":[1483,7],"end":[1483,25],"bytes":[44169,44187]},"callee":null},"1486:29":{"kind":"call","span":{"start":[1486,29],"end":[1486,59],"bytes":[44288,44318]},"callee":null},"1486:7":{"kind":"call","span":{"start":[1486,7],"end":[1486,25],"bytes":[44266,44284]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.ValidateLevel":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.ValidateLevel","kind":"method","span":{"start":[1784,1],"end":[1846,2],"bytes":[52529,54262]},"signature":"github.com/benbjohnson/litestream.Replica.ValidateLevel","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1784,1],"end":[1784,93],"bytes":[52529,52621]}},{"name":"level","type":"int","span":{"start":[1784,1],"end":[1784,93],"bytes":[52529,52621]}}],"return_type":"([]github.com/benbjohnson/litestream.ValidationError, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"1785:14":{"kind":"call","span":{"start":[1785,14],"end":[1785,53],"bytes":[52635,52674]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"1787:15":{"kind":"call","span":{"start":[1787,15],"end":[1787,53],"bytes":[52706,52744]},"callee":null},"1789:8":{"kind":"call","span":{"start":[1789,8],"end":[1789,19],"bytes":[52755,52766]},"callee":null},"1794:6":{"kind":"call","span":{"start":[1794,6],"end":[1794,16],"bytes":[52832,52842]},"callee":null},"1795:11":{"kind":"call","span":{"start":[1795,11],"end":[1795,21],"bytes":[52855,52865]},"callee":null},"1805:13":{"kind":"call","span":{"start":[1805,13],"end":[1811,6],"bytes":[53093,53337]},"callee":null},"1808:15":{"kind":"call","span":{"start":[1808,15],"end":[1808,115],"bytes":[53186,53286]},"callee":null},"1820:14":{"kind":"call","span":{"start":[1820,14],"end":[1826,7],"bytes":[53582,53847]},"callee":null},"1823:16":{"kind":"call","span":{"start":[1823,16],"end":[1823,136],"bytes":[53673,53793]},"callee":null},"1828:14":{"kind":"call","span":{"start":[1828,14],"end":[1834,7],"bytes":[53873,54115]},"callee":null},"1831:16":{"kind":"call","span":{"start":[1831,16],"end":[1831,109],"bytes":[53968,54061]},"callee":null},"1841:12":{"kind":"call","span":{"start":[1841,12],"end":[1841,23],"bytes":[54159,54170]},"callee":null},"1842:15":{"kind":"call","span":{"start":[1842,15],"end":[1842,52],"bytes":[54199,54236]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.appendWALSegmentV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.appendWALSegmentV3","kind":"method","span":{"start":[1308,1],"end":[1317,2],"bytes":[38865,39215]},"signature":"github.com/benbjohnson/litestream.Replica.appendWALSegmentV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1308,1],"end":[1308,152],"bytes":[38865,39016]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClientV3","span":{"start":[1308,1],"end":[1308,152],"bytes":[38865,39016]}},{"name":"generation","type":"string","span":{"start":[1308,1],"end":[1308,152],"bytes":[38865,39016]}},{"name":"seg","type":"github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[1308,1],"end":[1308,152],"bytes":[38865,39016]}},{"name":"f","type":"*os.File","span":{"start":[1308,1],"end":[1308,152],"bytes":[38865,39016]}}],"return_type":"(int64, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1310:13":{"kind":"call","span":{"start":[1310,13],"end":[1310,76],"bytes":[39055,39118]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.OpenWALSegmentV3"},"1314:8":{"kind":"call","span":{"start":[1314,8],"end":[1314,35],"bytes":[39162,39189]},"callee":null},"1316:9":{"kind":"call","span":{"start":[1316,9],"end":[1316,23],"bytes":[39199,39213]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.appendWALSegmentV3/github.com/benbjohnson/litestream.Replica.appendWALSegmentV3.closure_1","kind":"function","span":{"start":[1314,1],"end":[1314,35],"bytes":[39155,39189]},"signature":"github.com/benbjohnson/litestream.Replica.appendWALSegmentV3.closure_1","parameters":[],"body":{"1314:21":{"kind":"call","span":{"start":[1314,21],"end":[1314,31],"bytes":[39175,39185]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.applyLTXFile":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile","kind":"method","span":{"start":[946,1],"end":[1000,2],"bytes":[28110,29522]},"signature":"github.com/benbjohnson/litestream.Replica.applyLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[946,1],"end":[946,109],"bytes":[28110,28218]}},{"name":"f","type":"*os.File","span":{"start":[946,1],"end":[946,109],"bytes":[28110,28218]}},{"name":"info","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[946,1],"end":[946,109],"bytes":[28110,28218]}},{"name":"pageSize","type":"uint32","span":{"start":[946,1],"end":[946,109],"bytes":[28110,28218]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"947:13":{"kind":"call","span":{"start":[947,13],"end":[947,84],"bytes":[28231,28302]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile"},"949:10":{"kind":"call","span":{"start":[949,10],"end":[949,46],"bytes":[28329,28365]},"callee":null},"951:8":{"kind":"call","span":{"start":[951,8],"end":[951,18],"bytes":[28376,28386]},"callee":null},"953:9":{"kind":"call","span":{"start":[953,9],"end":[953,27],"bytes":[28396,28414]},"callee":null},"954:12":{"kind":"call","span":{"start":[954,12],"end":[954,30],"bytes":[28426,28444]},"callee":null},"955:10":{"kind":"call","span":{"start":[955,10],"end":[955,46],"bytes":[28468,28504]},"callee":null},"958:9":{"kind":"call","span":{"start":[958,9],"end":[958,21],"bytes":[28517,28529]},"callee":null},"960:12":{"kind":"call","span":{"start":[960,12],"end":[960,41],"bytes":[28542,28571]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.LockFileExclusive"},"961:10":{"kind":"call","span":{"start":[961,10],"end":[961,55],"bytes":[28595,28640]},"callee":null},"963:8":{"kind":"call","span":{"start":[963,8],"end":[963,30],"bytes":[28651,28673]},"callee":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.UnlockFile"},"967:11":{"kind":"call","span":{"start":[967,11],"end":[967,33],"bytes":[28718,28740]},"callee":null},"968:13":{"kind":"call","span":{"start":[968,13],"end":[968,40],"bytes":[28753,28780]},"callee":null},"971:11":{"kind":"call","span":{"start":[971,11],"end":[971,45],"bytes":[28842,28876]},"callee":null},"974:24":{"kind":"call","span":{"start":[974,24],"end":[974,33],"bytes":[28905,28914]},"callee":null},"976:11":{"kind":"call","span":{"start":[976,11],"end":[976,33],"bytes":[28968,28990]},"callee":null},"979:10":{"kind":"call","span":{"start":[979,10],"end":[979,28],"bytes":[29005,29023]},"callee":null},"979:31":{"kind":"call","span":{"start":[979,31],"end":[979,46],"bytes":[29026,29041]},"callee":null},"980:16":{"kind":"call","span":{"start":[980,16],"end":[980,36],"bytes":[29057,29077]},"callee":null},"981:11":{"kind":"call","span":{"start":[981,11],"end":[981,58],"bytes":[29102,29149]},"callee":null},"986:13":{"kind":"call","span":{"start":[986,13],"end":[986,21],"bytes":[29191,29199]},"callee":null},"987:11":{"kind":"call","span":{"start":[987,11],"end":[987,54],"bytes":[29224,29267]},"callee":null},"989:14":{"kind":"call","span":{"start":[989,14],"end":[989,31],"bytes":[29285,29302]},"callee":null},"989:34":{"kind":"call","span":{"start":[989,34],"end":[989,49],"bytes":[29305,29320]},"callee":null},"990:13":{"kind":"call","span":{"start":[990,13],"end":[990,32],"bytes":[29333,29352]},"callee":null},"991:11":{"kind":"call","span":{"start":[991,11],"end":[991,42],"bytes":[29377,29408]},"callee":null},"995:12":{"kind":"call","span":{"start":[995,12],"end":[995,23],"bytes":[29428,29439]},"callee":null},"996:10":{"kind":"call","span":{"start":[996,10],"end":[996,46],"bytes":[29463,29499]},"callee":null},"999:9":{"kind":"call","span":{"start":[999,9],"end":[999,17],"bytes":[29512,29520]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.applyNewLTXFiles":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles","kind":"method","span":{"start":[865,1],"end":[936,2],"bytes":[25653,27624]},"signature":"github.com/benbjohnson/litestream.Replica.applyNewLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[865,1],"end":[865,125],"bytes":[25653,25777]}},{"name":"f","type":"*os.File","span":{"start":[865,1],"end":[865,125],"bytes":[25653,25777]}},{"name":"afterTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[865,1],"end":[865,125],"bytes":[25653,25777]}},{"name":"pageSize","type":"uint32","span":{"start":[865,1],"end":[865,125],"bytes":[25653,25777]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":15},"body":{"869:14":{"kind":"call","span":{"start":[869,14],"end":[869,61],"bytes":[25874,25921]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"871:23":{"kind":"call","span":{"start":[871,23],"end":[871,68],"bytes":[25961,26006]},"callee":null},"885:6":{"kind":"call","span":{"start":[885,6],"end":[885,16],"bytes":[26357,26367]},"callee":null},"887:11":{"kind":"call","span":{"start":[887,11],"end":[887,21],"bytes":[26399,26409]},"callee":null},"891:24":{"kind":"call","span":{"start":[891,24],"end":[891,84],"bytes":[26539,26599]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap"},"893:12":{"kind":"call","span":{"start":[893,12],"end":[893,28],"bytes":[26630,26646]},"callee":null},"902:12":{"kind":"call","span":{"start":[902,12],"end":[902,28],"bytes":[26844,26860]},"callee":null},"911:13":{"kind":"call","span":{"start":[911,13],"end":[911,51],"bytes":[26988,27026]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile"},"912:11":{"kind":"call","span":{"start":[912,11],"end":[915,6],"bytes":[27051,27182]},"callee":null},"912:23":{"kind":"call","span":{"start":[912,23],"end":[915,5],"bytes":[27063,27181]},"callee":null},"920:16":{"kind":"call","span":{"start":[920,16],"end":[920,25],"bytes":[27235,27244]},"callee":null},"921:10":{"kind":"call","span":{"start":[921,10],"end":[921,75],"bytes":[27272,27337]},"callee":null},"921:22":{"kind":"call","span":{"start":[921,22],"end":[921,74],"bytes":[27284,27336]},"callee":null},"923:15":{"kind":"call","span":{"start":[923,15],"end":[923,31],"bytes":[27355,27371]},"callee":null},"928:23":{"kind":"call","span":{"start":[928,23],"end":[928,84],"bytes":[27455,27516]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap"}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles.closure_1","kind":"function","span":{"start":[873,1],"end":[882,3],"bytes":[26010,26330]},"signature":"github.com/benbjohnson/litestream.Replica.applyNewLTXFiles.closure_1","parameters":[{"name":"retErr","type":"error","span":{"start":[873,1],"end":[873,55],"bytes":[26010,26064]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"body":{"874:18":{"kind":"call","span":{"start":[874,18],"end":[874,29],"bytes":[26082,26093]},"callee":null},"875:15":{"kind":"call","span":{"start":[875,15],"end":[875,69],"bytes":[26127,26181]},"callee":null},"877:25":{"kind":"call","span":{"start":[877,25],"end":[877,54],"bytes":[26228,26257]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3","kind":"method","span":{"start":[1244,1],"end":[1305,2],"bytes":[36970,38788]},"signature":"github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1244,1],"end":[1244,172],"bytes":[36970,37141]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClientV3","span":{"start":[1244,1],"end":[1244,172],"bytes":[36970,37141]}},{"name":"generation","type":"string","span":{"start":[1244,1],"end":[1244,172],"bytes":[36970,37141]}},{"name":"snapshotIndex","type":"int","span":{"start":[1244,1],"end":[1244,172],"bytes":[36970,37141]}},{"name":"segments","type":"[]github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[1244,1],"end":[1244,172],"bytes":[36970,37141]}},{"name":"dbPath","type":"string","span":{"start":[1244,1],"end":[1244,172],"bytes":[36970,37141]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"1245:5":{"kind":"call","span":{"start":[1245,5],"end":[1245,18],"bytes":[37146,37159]},"callee":null},"1254:12":{"kind":"call","span":{"start":[1254,12],"end":[1254,20],"bytes":[37330,37338]},"callee":null},"1256:8":{"kind":"call","span":{"start":[1256,8],"end":[1260,5],"bytes":[37347,37397]},"callee":null},"1281:13":{"kind":"call","span":{"start":[1281,13],"end":[1281,31],"bytes":[37919,37937]},"callee":null},"1285:12":{"kind":"call","span":{"start":[1285,12],"end":[1285,107],"bytes":[38018,38113]},"callee":null},"1289:16":{"kind":"call","span":{"start":[1289,16],"end":[1289,78],"bytes":[38174,38236]},"callee":null},"1294:11":{"kind":"call","span":{"start":[1294,11],"end":[1294,113],"bytes":[38335,38437]},"callee":null},"1296:16":{"kind":"call","span":{"start":[1296,16],"end":[1296,69],"bytes":[38457,38510]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.appendWALSegmentV3"},"1297:11":{"kind":"call","span":{"start":[1297,11],"end":[1297,80],"bytes":[38535,38604]},"callee":null},"1300:4":{"kind":"call","span":{"start":[1300,4],"end":[1300,14],"bytes":[38634,38644]},"callee":null},"1304:9":{"kind":"call","span":{"start":[1304,9],"end":[1304,27],"bytes":[38768,38786]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3.closure_1","kind":"function","span":{"start":[1256,1],"end":[1260,5],"bytes":[37340,37397]},"signature":"github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3.closure_1","parameters":[],"body":{"1258:8":{"kind":"call","span":{"start":[1258,8],"end":[1258,17],"bytes":[37379,37388]},"callee":null}}},"closure_2":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3.closure_2","kind":"function","span":{"start":[1262,1],"end":[1274,3],"bytes":[37399,37723]},"signature":"github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3.closure_2","parameters":[],"return_type":"error","error_channel":["error"],"body":{"1265:19":{"kind":"call","span":{"start":[1265,19],"end":[1265,28],"bytes":[37483,37492]},"callee":null},"1269:12":{"kind":"call","span":{"start":[1269,12],"end":[1269,32],"bytes":[37546,37566]},"callee":null},"1272:3":{"kind":"call","span":{"start":[1272,3],"end":[1272,13],"bytes":[37601,37611]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.calcPos":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.calcPos","kind":"method","span":{"start":[274,1],"end":[280,2],"bytes":[7015,7240]},"signature":"github.com/benbjohnson/litestream.Replica.calcPos","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[274,1],"end":[274,74],"bytes":[7015,7088]}}],"return_type":"(github.com/superfly/ltx.Pos, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"275:15":{"kind":"call","span":{"start":[275,15],"end":[275,39],"bytes":[7103,7127]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo"},"277:15":{"kind":"call","span":{"start":[277,15],"end":[277,50],"bytes":[7159,7194]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.downloadSnapshotV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3","kind":"method","span":{"start":[1224,1],"end":[1241,2],"bytes":[36463,36903]},"signature":"github.com/benbjohnson/litestream.Replica.downloadSnapshotV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1224,1],"end":[1224,137],"bytes":[36463,36599]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClientV3","span":{"start":[1224,1],"end":[1224,137],"bytes":[36463,36599]}},{"name":"generation","type":"string","span":{"start":[1224,1],"end":[1224,137],"bytes":[36463,36599]}},{"name":"index","type":"int","span":{"start":[1224,1],"end":[1224,137],"bytes":[36463,36599]}},{"name":"destPath","type":"string","span":{"start":[1224,1],"end":[1224,137],"bytes":[36463,36599]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1225:13":{"kind":"call","span":{"start":[1225,13],"end":[1225,58],"bytes":[36612,36657]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.OpenSnapshotV3"},"1229:8":{"kind":"call","span":{"start":[1229,8],"end":[1229,35],"bytes":[36698,36725]},"callee":null},"1231:12":{"kind":"call","span":{"start":[1231,12],"end":[1231,31],"bytes":[36738,36757]},"callee":null},"1235:8":{"kind":"call","span":{"start":[1235,8],"end":[1235,34],"bytes":[36798,36824]},"callee":null},"1237:15":{"kind":"call","span":{"start":[1237,15],"end":[1237,29],"bytes":[36840,36854]},"callee":null},"1240:9":{"kind":"call","span":{"start":[1240,9],"end":[1240,17],"bytes":[36893,36901]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3.closure_1","kind":"function","span":{"start":[1229,1],"end":[1229,35],"bytes":[36691,36725]},"signature":"github.com/benbjohnson/litestream.Replica.downloadSnapshotV3.closure_1","parameters":[],"body":{"1229:21":{"kind":"call","span":{"start":[1229,21],"end":[1229,31],"bytes":[36711,36721]},"callee":null}}},"closure_2":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3.closure_2","kind":"function","span":{"start":[1235,1],"end":[1235,34],"bytes":[36791,36824]},"signature":"github.com/benbjohnson/litestream.Replica.downloadSnapshotV3.closure_2","parameters":[],"body":{"1235:21":{"kind":"call","span":{"start":[1235,21],"end":[1235,30],"bytes":[36811,36820]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.fillFollowGap":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap","kind":"method","span":{"start":[1004,1],"end":[1064,2],"bytes":[29671,31351]},"signature":"github.com/benbjohnson/litestream.Replica.fillFollowGap","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1004,1],"end":[1004,143],"bytes":[29671,29813]}},{"name":"f","type":"*os.File","span":{"start":[1004,1],"end":[1004,143],"bytes":[29671,29813]}},{"name":"afterTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[1004,1],"end":[1004,143],"bytes":[29671,29813]}},{"name":"gapMinTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[1004,1],"end":[1004,143],"bytes":[29671,29813]}},{"name":"pageSize","type":"uint32","span":{"start":[1004,1],"end":[1004,143],"bytes":[29671,29813]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"1008:15":{"kind":"call","span":{"start":[1008,15],"end":[1008,54],"bytes":[29905,29944]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"1010:24":{"kind":"call","span":{"start":[1010,24],"end":[1010,77],"bytes":[29986,30039]},"callee":null},"1023:7":{"kind":"call","span":{"start":[1023,7],"end":[1023,17],"bytes":[30389,30399]},"callee":null},"1024:12":{"kind":"call","span":{"start":[1024,12],"end":[1024,22],"bytes":[30413,30423]},"callee":null},"1036:14":{"kind":"call","span":{"start":[1036,14],"end":[1036,52],"bytes":[30624,30662]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile"},"1037:12":{"kind":"call","span":{"start":[1037,12],"end":[1040,7],"bytes":[30688,30830]},"callee":null},"1037:23":{"kind":"call","span":{"start":[1037,23],"end":[1040,6],"bytes":[30699,30829]},"callee":null},"1046:12":{"kind":"call","span":{"start":[1046,12],"end":[1046,27],"bytes":[30963,30978]},"callee":null},"1050:17":{"kind":"call","span":{"start":[1050,17],"end":[1050,26],"bytes":[31005,31014]},"callee":null},"1051:11":{"kind":"call","span":{"start":[1051,11],"end":[1051,83],"bytes":[31043,31115]},"callee":null},"1051:22":{"kind":"call","span":{"start":[1051,22],"end":[1051,82],"bytes":[31054,31114]},"callee":null},"1053:16":{"kind":"call","span":{"start":[1053,16],"end":[1053,31],"bytes":[31135,31150]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap/github.com/benbjohnson/litestream.Replica.fillFollowGap.closure_1","kind":"function","span":{"start":[1012,1],"end":[1021,4],"bytes":[30044,30381]},"signature":"github.com/benbjohnson/litestream.Replica.fillFollowGap.closure_1","parameters":[{"name":"retErr","type":"error","span":{"start":[1012,1],"end":[1012,55],"bytes":[30044,30098]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"body":{"1013:19":{"kind":"call","span":{"start":[1013,19],"end":[1013,30],"bytes":[30117,30128]},"callee":null},"1014:16":{"kind":"call","span":{"start":[1014,16],"end":[1014,78],"bytes":[30163,30225]},"callee":null},"1016:26":{"kind":"call","span":{"start":[1016,26],"end":[1016,55],"bytes":[30274,30303]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp","kind":"method","span":{"start":[1497,1],"end":[1511,2],"bytes":[44538,45132]},"signature":"github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1497,1],"end":[1497,117],"bytes":[44538,44654]}},{"name":"timestamp","type":"time.Time","span":{"start":[1497,1],"end":[1497,117],"bytes":[44538,44654]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"1499:20":{"kind":"call","span":{"start":[1499,20],"end":[1501,4],"bytes":[44746,44886]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FindLTXFiles"},"1503:15":{"kind":"call","span":{"start":[1503,15],"end":[1503,56],"bytes":[44918,44959]},"callee":null},"1505:5":{"kind":"call","span":{"start":[1505,5],"end":[1505,19],"bytes":[44967,44981]},"callee":null},"1510:19":{"kind":"call","span":{"start":[1510,19],"end":[1510,33],"bytes":[45108,45122]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp/github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp.closure_1","kind":"function","span":{"start":[1499,1],"end":[1501,4],"bytes":[44727,44886]},"signature":"github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp.closure_1","parameters":[{"name":"info","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1499,1],"end":[1499,109],"bytes":[44727,44835]}}],"return_type":"(bool, error)","error_channel":["error"],"body":{"1500:10":{"kind":"call","span":{"start":[1500,10],"end":[1500,42],"bytes":[44845,44877]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","kind":"method","span":{"start":[1370,1],"end":[1396,2],"bytes":[40618,41423]},"signature":"github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1370,1],"end":[1370,142],"bytes":[40618,40759]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClientV3","span":{"start":[1370,1],"end":[1370,142],"bytes":[40618,40759]}},{"name":"timestamp","type":"time.Time","span":{"start":[1370,1],"end":[1370,142],"bytes":[40618,40759]}}],"return_type":"(*github.com/benbjohnson/litestream.SnapshotInfoV3, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"1371:22":{"kind":"call","span":{"start":[1371,22],"end":[1371,47],"bytes":[40781,40806]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3"},"1373:15":{"kind":"call","span":{"start":[1373,15],"end":[1373,61],"bytes":[40838,40884]},"callee":null},"1375:5":{"kind":"call","span":{"start":[1375,5],"end":[1375,21],"bytes":[40892,40908]},"callee":null},"1381:21":{"kind":"call","span":{"start":[1381,21],"end":[1381,49],"bytes":[41028,41056]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3"},"1383:16":{"kind":"call","span":{"start":[1383,16],"end":[1383,83],"bytes":[41090,41157]},"callee":null},"1385:18":{"kind":"call","span":{"start":[1385,18],"end":[1385,52],"bytes":[41179,41213]},"callee":null},"1388:5":{"kind":"call","span":{"start":[1388,5],"end":[1388,22],"bytes":[41222,41239]},"callee":null},"1393:2":{"kind":"call","span":{"start":[1393,2],"end":[1393,42],"bytes":[41323,41363]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt"},"1395:9":{"kind":"call","span":{"start":[1395,9],"end":[1395,52],"bytes":[41373,41416]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.findBestSnapshotV3"}}},"github.com/benbjohnson/litestream.Replica.follow":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow","kind":"method","span":{"start":[804,1],"end":[860,2],"bytes":[23868,25451]},"signature":"github.com/benbjohnson/litestream.Replica.follow","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[804,1],"end":[804,116],"bytes":[23868,23983]}},{"name":"outputPath","type":"string","span":{"start":[804,1],"end":[804,116],"bytes":[23868,23983]}},{"name":"lastTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[804,1],"end":[804,116],"bytes":[23868,23983]}},{"name":"interval","type":"time.Duration","span":{"start":[804,1],"end":[804,116],"bytes":[23868,23983]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"805:12":{"kind":"call","span":{"start":[805,12],"end":[805,49],"bytes":[23995,24032]},"callee":null},"807:10":{"kind":"call","span":{"start":[807,10],"end":[807,57],"bytes":[24059,24106]},"callee":null},"809:8":{"kind":"call","span":{"start":[809,8],"end":[812,5],"bytes":[24117,24161]},"callee":null},"816:15":{"kind":"call","span":{"start":[816,15],"end":[816,35],"bytes":[24266,24286]},"callee":null},"817:10":{"kind":"call","span":{"start":[817,10],"end":[817,68],"bytes":[24310,24368]},"callee":null},"819:14":{"kind":"call","span":{"start":[819,14],"end":[819,28],"bytes":[24385,24399]},"callee":null},"819:34":{"kind":"call","span":{"start":[819,34],"end":[819,48],"bytes":[24405,24419]},"callee":null},"828:2":{"kind":"call","span":{"start":[828,2],"end":[828,12],"bytes":[24523,24533]},"callee":null},"830:12":{"kind":"call","span":{"start":[830,12],"end":[830,36],"bytes":[24637,24661]},"callee":null},"831:8":{"kind":"call","span":{"start":[831,8],"end":[831,21],"bytes":[24669,24682]},"callee":null},"836:10":{"kind":"call","span":{"start":[836,10],"end":[836,20],"bytes":[24738,24748]},"callee":null},"837:4":{"kind":"call","span":{"start":[837,4],"end":[837,14],"bytes":[24753,24763]},"callee":null},"840:20":{"kind":"call","span":{"start":[840,20],"end":[840,66],"bytes":[24844,24890]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles"},"842:8":{"kind":"call","span":{"start":[842,8],"end":[842,17],"bytes":[24917,24926]},"callee":null},"843:6":{"kind":"call","span":{"start":[843,6],"end":[843,16],"bytes":[24941,24951]},"callee":null},"847:5":{"kind":"call","span":{"start":[847,5],"end":[847,15],"bytes":[25030,25040]},"callee":null},"851:15":{"kind":"call","span":{"start":[851,15],"end":[851,49],"bytes":[25193,25227]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile"},"852:13":{"kind":"call","span":{"start":[852,13],"end":[852,51],"bytes":[25254,25292]},"callee":null},"854:5":{"kind":"call","span":{"start":[854,5],"end":[854,15],"bytes":[25303,25313]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow/github.com/benbjohnson/litestream.Replica.follow.closure_1","kind":"function","span":{"start":[809,1],"end":[812,5],"bytes":[24110,24161]},"signature":"github.com/benbjohnson/litestream.Replica.follow.closure_1","parameters":[],"body":{"810:7":{"kind":"call","span":{"start":[810,7],"end":[810,15],"bytes":[24132,24140]},"callee":null},"811:7":{"kind":"call","span":{"start":[811,7],"end":[811,16],"bytes":[24147,24156]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.lockSync":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.lockSync","kind":"method","span":{"start":[236,1],"end":[246,2],"bytes":[5819,6108]},"signature":"github.com/benbjohnson/litestream.Replica.lockSync","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[236,1],"end":[236,56],"bytes":[5819,5874]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"237:5":{"kind":"call","span":{"start":[237,5],"end":[237,28],"bytes":[5879,5902]},"callee":null},"240:2":{"kind":"call","span":{"start":[240,2],"end":[240,22],"bytes":[5922,5942]},"callee":null},"241:8":{"kind":"call","span":{"start":[241,8],"end":[241,29],"bytes":[5950,5971]},"callee":null},"242:12":{"kind":"call","span":{"start":[242,12],"end":[242,37],"bytes":[5983,6008]},"callee":null},"243:10":{"kind":"call","span":{"start":[243,10],"end":[243,69],"bytes":[6032,6091]},"callee":null},"243:50":{"kind":"call","span":{"start":[243,50],"end":[243,68],"bytes":[6072,6090]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.monitor":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","kind":"method","span":{"start":[392,1],"end":[516,2],"bytes":[10236,13800]},"signature":"github.com/benbjohnson/litestream.Replica.monitor","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[392,1],"end":[392,49],"bytes":[10236,10284]}}],"metrics":{"cyclomatic":28},"body":{"393:12":{"kind":"call","span":{"start":[393,12],"end":[393,42],"bytes":[10296,10326]},"callee":null},"394:8":{"kind":"call","span":{"start":[394,8],"end":[394,21],"bytes":[10334,10347]},"callee":null},"396:12":{"kind":"call","span":{"start":[396,12],"end":[396,25],"bytes":[10360,10373]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Notify"},"406:11":{"kind":"call","span":{"start":[406,11],"end":[406,21],"bytes":[10588,10598]},"callee":null},"415:11":{"kind":"call","span":{"start":[415,11],"end":[415,21],"bytes":[10745,10755]},"callee":null},"417:11":{"kind":"call","span":{"start":[417,11],"end":[417,30],"bytes":[10778,10797]},"callee":null},"423:18":{"kind":"call","span":{"start":[423,18],"end":[423,28],"bytes":[10958,10968]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"423:56":{"kind":"call","span":{"start":[423,56],"end":[423,63],"bytes":[10996,11003]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos"},"427:11":{"kind":"call","span":{"start":[427,11],"end":[427,21],"bytes":[11159,11169]},"callee":null},"432:13":{"kind":"call","span":{"start":[432,13],"end":[432,22],"bytes":[11237,11246]},"callee":null},"437:12":{"kind":"call","span":{"start":[437,12],"end":[437,25],"bytes":[11337,11350]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Notify"},"440:13":{"kind":"call","span":{"start":[440,13],"end":[440,43],"bytes":[11428,11458]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.sync"},"441:7":{"kind":"call","span":{"start":[441,7],"end":[441,44],"bytes":[11479,11516]},"callee":null},"446:8":{"kind":"call","span":{"start":[446,8],"end":[446,33],"bytes":[11605,11630]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"461:8":{"kind":"call","span":{"start":[461,8],"end":[461,31],"bytes":[11987,12010]},"callee":null},"463:9":{"kind":"call","span":{"start":[463,9],"end":[463,32],"bytes":[12096,12119]},"callee":null},"465:8":{"kind":"call","span":{"start":[465,8],"end":[465,18],"bytes":[12182,12192]},"callee":null},"472:8":{"kind":"call","span":{"start":[472,8],"end":[472,18],"bytes":[12393,12403]},"callee":null},"478:21":{"kind":"call","span":{"start":[478,21],"end":[478,31],"bytes":[12581,12591]},"callee":null},"484:33":{"kind":"call","span":{"start":[484,33],"end":[484,59],"bytes":[12825,12851]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/github.com/benbjohnson/litestream.LTXError.IsAutoRecoverable"},"485:7":{"kind":"call","span":{"start":[485,7],"end":[485,17],"bytes":[12860,12870]},"callee":null},"486:22":{"kind":"call","span":{"start":[486,22],"end":[486,47],"bytes":[12945,12970]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState"},"487:8":{"kind":"call","span":{"start":[487,8],"end":[487,18],"bytes":[12997,13007]},"callee":null},"489:8":{"kind":"call","span":{"start":[489,8],"end":[489,18],"bytes":[13079,13089]},"callee":null},"497:9":{"kind":"call","span":{"start":[497,9],"end":[497,32],"bytes":[13350,13373]},"callee":null},"498:7":{"kind":"call","span":{"start":[498,7],"end":[498,17],"bytes":[13406,13416]},"callee":null},"502:21":{"kind":"call","span":{"start":[502,21],"end":[502,31],"bytes":[13554,13564]},"callee":null},"511:4":{"kind":"call","span":{"start":[511,4],"end":[511,14],"bytes":[13678,13688]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.shouldUseV3Restore":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","kind":"method","span":{"start":[1400,1],"end":[1454,2],"bytes":[41573,43295]},"signature":"github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1400,1],"end":[1400,119],"bytes":[41573,41691]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClientV3","span":{"start":[1400,1],"end":[1400,119],"bytes":[41573,41691]}},{"name":"timestamp","type":"time.Time","span":{"start":[1400,1],"end":[1400,119],"bytes":[41573,41691]}}],"return_type":"(bool, error)","error_channel":["error"],"metrics":{"cyclomatic":10},"body":{"1402:25":{"kind":"call","span":{"start":[1402,25],"end":[1402,52],"bytes":[41744,41771]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3"},"1404:17":{"kind":"call","span":{"start":[1404,17],"end":[1404,62],"bytes":[41805,41850]},"callee":null},"1408:26":{"kind":"call","span":{"start":[1408,26],"end":[1408,43],"bytes":[41905,41922]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBounds"},"1410:17":{"kind":"call","span":{"start":[1410,17],"end":[1410,59],"bytes":[41956,41998]},"callee":null},"1414:5":{"kind":"call","span":{"start":[1414,5],"end":[1414,25],"bytes":[42048,42068]},"callee":null},"1419:5":{"kind":"call","span":{"start":[1419,5],"end":[1419,26],"bytes":[42140,42161]},"callee":null},"1420:3":{"kind":"call","span":{"start":[1420,3],"end":[1420,13],"bytes":[42166,42176]},"callee":null},"1425:6":{"kind":"call","span":{"start":[1425,6],"end":[1425,24],"bytes":[42322,42340]},"callee":null},"1427:22":{"kind":"call","span":{"start":[1427,22],"end":[1427,78],"bytes":[42433,42489]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp"},"1429:18":{"kind":"call","span":{"start":[1429,18],"end":[1429,61],"bytes":[42525,42568]},"callee":null},"1432:23":{"kind":"call","span":{"start":[1432,23],"end":[1432,72],"bytes":[42596,42645]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp"},"1434:18":{"kind":"call","span":{"start":[1434,18],"end":[1434,58],"bytes":[42681,42721]},"callee":null},"1437:50":{"kind":"call","span":{"start":[1437,50],"end":[1437,99],"bytes":[42776,42825]},"callee":null},"1438:4":{"kind":"call","span":{"start":[1438,4],"end":[1438,14],"bytes":[42832,42842]},"callee":null},"1445:6":{"kind":"call","span":{"start":[1445,6],"end":[1445,37],"bytes":[43078,43109]},"callee":null},"1446:4":{"kind":"call","span":{"start":[1446,4],"end":[1446,14],"bytes":[43115,43125]},"callee":null}}},"github.com/benbjohnson/litestream.Replica.sync":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.sync","kind":"method","span":{"start":[148,1],"end":[157,2],"bytes":[3616,3830]},"signature":"github.com/benbjohnson/litestream.Replica.sync","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[148,1],"end":[148,73],"bytes":[3616,3688]}},{"name":"maxSyncLTXFiles","type":"int","span":{"start":[148,1],"end":[148,73],"bytes":[3616,3688]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"150:18":{"kind":"call","span":{"start":[150,18],"end":[150,50],"bytes":[3713,3745]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce"}}},"github.com/benbjohnson/litestream.Replica.syncOnce":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","kind":"method","span":{"start":[164,1],"end":[234,2],"bytes":[3895,5817]},"signature":"github.com/benbjohnson/litestream.Replica.syncOnce","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[164,1],"end":[164,109],"bytes":[3895,4003]}},{"name":"maxSyncLTXFiles","type":"int","span":{"start":[164,1],"end":[164,109],"bytes":[3895,4003]}}],"return_type":"(github.com/benbjohnson/litestream.replicaSyncResult, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"165:12":{"kind":"call","span":{"start":[165,12],"end":[165,27],"bytes":[4015,4030]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.lockSync"},"168:8":{"kind":"call","span":{"start":[168,8],"end":[168,28],"bytes":[4076,4096]},"callee":null},"171:8":{"kind":"call","span":{"start":[171,8],"end":[177,5],"bytes":[4164,4252]},"callee":null},"179:12":{"kind":"call","span":{"start":[179,12],"end":[179,21],"bytes":[4265,4274]},"callee":null},"180:18":{"kind":"call","span":{"start":[180,18],"end":[180,36],"bytes":[4306,4324]},"callee":null},"184:5":{"kind":"call","span":{"start":[184,5],"end":[184,12],"bytes":[4385,4392]},"callee":null},"185:15":{"kind":"call","span":{"start":[185,15],"end":[185,29],"bytes":[4418,4432]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.calcPos"},"187:19":{"kind":"call","span":{"start":[187,19],"end":[187,50],"bytes":[4469,4500]},"callee":null},"189:3":{"kind":"call","span":{"start":[189,3],"end":[189,16],"bytes":[4507,4520]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.SetPos"},"193:15":{"kind":"call","span":{"start":[193,15],"end":[193,25],"bytes":[4578,4588]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"195:18":{"kind":"call","span":{"start":[195,18],"end":[195,74],"bytes":[4623,4679]},"callee":null},"196:12":{"kind":"call","span":{"start":[196,12],"end":[196,25],"bytes":[4691,4704]},"callee":null},"200:2":{"kind":"call","span":{"start":[200,2],"end":[200,12],"bytes":[4751,4761]},"callee":null},"201:3":{"kind":"call","span":{"start":[201,3],"end":[204,4],"bytes":[4786,4900]},"callee":null},"202:27":{"kind":"call","span":{"start":[202,27],"end":[202,34],"bytes":[4831,4838]},"callee":null},"202:4":{"kind":"call","span":{"start":[202,4],"end":[202,49],"bytes":[4808,4853]},"callee":null},"203:22":{"kind":"call","span":{"start":[203,22],"end":[203,40],"bytes":[4876,4894]},"callee":null},"203:4":{"kind":"call","span":{"start":[203,4],"end":[203,41],"bytes":[4858,4895]},"callee":null},"207:27":{"kind":"call","span":{"start":[207,27],"end":[207,34],"bytes":[4989,4996]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos"},"207:72":{"kind":"call","span":{"start":[207,72],"end":[207,79],"bytes":[5034,5041]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos"},"212:4":{"kind":"call","span":{"start":[212,4],"end":[212,31],"bytes":[5264,5291]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.RecordSuccessfulSync"},"213:4":{"kind":"call","span":{"start":[213,4],"end":[213,14],"bytes":[5295,5305]},"callee":null},"215:16":{"kind":"call","span":{"start":[215,16],"end":[215,34],"bytes":[5384,5402]},"callee":null},"216:21":{"kind":"call","span":{"start":[216,21],"end":[216,28],"bytes":[5424,5431]},"callee":null},"219:13":{"kind":"call","span":{"start":[219,13],"end":[219,22],"bytes":[5485,5494]},"callee":null},"220:19":{"kind":"call","span":{"start":[220,19],"end":[220,37],"bytes":[5527,5545]},"callee":null},"222:13":{"kind":"call","span":{"start":[222,13],"end":[222,48],"bytes":[5562,5597]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile"},"225:3":{"kind":"call","span":{"start":[225,3],"end":[225,32],"bytes":[5640,5669]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.SetPos"},"231:2":{"kind":"call","span":{"start":[231,2],"end":[231,29],"bytes":[5767,5794]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.RecordSuccessfulSync"}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce/github.com/benbjohnson/litestream.Replica.syncOnce.closure_1","kind":"function","span":{"start":[171,1],"end":[177,5],"bytes":[4157,4252]},"signature":"github.com/benbjohnson/litestream.Replica.syncOnce.closure_1","parameters":[],"body":{"173:4":{"kind":"call","span":{"start":[173,4],"end":[173,15],"bytes":[4194,4205]},"callee":null},"175:4":{"kind":"call","span":{"start":[175,4],"end":[175,17],"bytes":[4230,4243]},"callee":null}}}}},"github.com/benbjohnson/litestream.Replica.uploadLTXFile":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile","kind":"method","span":{"start":[248,1],"end":[271,2],"bytes":[6110,6942]},"signature":"github.com/benbjohnson/litestream.Replica.uploadLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[248,1],"end":[248,105],"bytes":[6110,6214]}},{"name":"level","type":"int","span":{"start":[248,1],"end":[248,105],"bytes":[6110,6214]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[248,1],"end":[248,105],"bytes":[6110,6214]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[248,1],"end":[248,105],"bytes":[6110,6214]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"249:14":{"kind":"call","span":{"start":[249,14],"end":[249,51],"bytes":[6228,6265]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath"},"250:12":{"kind":"call","span":{"start":[250,12],"end":[250,29],"bytes":[6277,6294]},"callee":null},"252:10":{"kind":"call","span":{"start":[252,10],"end":[252,85],"bytes":[6321,6396]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError"},"252:47":{"kind":"call","span":{"start":[252,47],"end":[252,62],"bytes":[6358,6373]},"callee":null},"252:64":{"kind":"call","span":{"start":[252,64],"end":[252,79],"bytes":[6375,6390]},"callee":null},"254:8":{"kind":"call","span":{"start":[254,8],"end":[254,34],"bytes":[6407,6433]},"callee":null},"256:15":{"kind":"call","span":{"start":[256,15],"end":[256,69],"bytes":[6449,6503]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile"},"258:10":{"kind":"call","span":{"start":[258,10],"end":[258,47],"bytes":[6530,6567]},"callee":null},"260:2":{"kind":"call","span":{"start":[260,2],"end":[260,12],"bytes":[6572,6582]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile/github.com/benbjohnson/litestream.Replica.uploadLTXFile.closure_1","kind":"function","span":{"start":[254,1],"end":[254,34],"bytes":[6400,6433]},"signature":"github.com/benbjohnson/litestream.Replica.uploadLTXFile.closure_1","parameters":[],"body":{"254:21":{"kind":"call","span":{"start":[254,21],"end":[254,30],"bytes":[6420,6429]},"callee":null}}}}}},"fields":{"AutoRecoverEnabled":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/AutoRecoverEnabled","kind":"field","type":"bool","span":{"start":[68,1],"end":[68,25],"bytes":[1728,1752]}},"Client":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/Client","kind":"field","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[51,1],"end":[51,22],"bytes":[1038,1059]}},"MaxSyncLTXFiles":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/MaxSyncLTXFiles","kind":"field","type":"int","span":{"start":[58,1],"end":[58,21],"bytes":[1259,1279]}},"MonitorEnabled":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/MonitorEnabled","kind":"field","type":"bool","span":{"start":[62,1],"end":[62,21],"bytes":[1423,1443]}},"SyncInterval":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/SyncInterval","kind":"field","type":"time.Duration","span":{"start":[54,1],"end":[54,28],"bytes":[1105,1132]}},"cancel":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/cancel","kind":"field","type":"func()","span":{"start":[48,1],"end":[48,15],"bytes":[972,986]}},"db":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/db","kind":"field","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[36,1],"end":[36,8],"bytes":[665,672]}},"f":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/f","kind":"field","type":"*os.File","span":{"start":[45,1],"end":[45,75],"bytes":[873,947]}},"mu":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/mu","kind":"field","type":"sync.RWMutex","span":{"start":[38,1],"end":[38,18],"bytes":[674,691]}},"muf":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/muf","kind":"field","type":"sync.Mutex","span":{"start":[44,1],"end":[44,16],"bytes":[857,872]}},"pos":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/pos","kind":"field","type":"github.com/superfly/ltx.Pos","span":{"start":[39,1],"end":[39,44],"bytes":[692,735]}},"syncSem":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/syncSem","kind":"field","type":"*golang.org/x/sync/semaphore.Weighted","span":{"start":[41,1],"end":[41,33],"bytes":[737,769]}},"syncWaiters":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/syncWaiters","kind":"field","type":"sync/atomic.Int64","span":{"start":[42,1],"end":[42,86],"bytes":[770,855]}},"wg":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/wg","kind":"field","type":"sync.WaitGroup","span":{"start":[47,1],"end":[47,23],"bytes":[949,971]}}}},"ValidationError":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ValidationError","kind":"struct","span":{"start":[1774,1],"end":[1780,2],"bytes":[52102,52389]},"callables":{},"fields":{"CurrFile":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ValidationError/CurrFile","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1779,1],"end":[1779,58],"bytes":[52330,52387]}},"Level":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ValidationError/Level","kind":"field","type":"int","span":{"start":[1775,1],"end":[1775,44],"bytes":[52132,52175]}},"Message":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ValidationError/Message","kind":"field","type":"string","span":{"start":[1777,1],"end":[1777,54],"bytes":[52235,52288]}},"PrevFile":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ValidationError/PrevFile","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1778,1],"end":[1778,41],"bytes":[52289,52329]}},"Type":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ValidationError/Type","kind":"field","type":"string","span":{"start":[1776,1],"end":[1776,59],"bytes":[52176,52234]}}}},"replicaSyncResult":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.replicaSyncResult","kind":"struct","span":{"start":[159,1],"end":[162,2],"bytes":[3832,3893]},"callables":{},"fields":{"limited":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.replicaSyncResult/limited","kind":"field","type":"bool","span":{"start":[161,1],"end":[161,14],"bytes":[3878,3891]}},"synced":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.replicaSyncResult/synced","kind":"field","type":"bool","span":{"start":[160,1],"end":[160,14],"bytes":[3864,3877]}}}},"restoreLevelCursor":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor","kind":"struct","span":{"start":[1632,1],"end":[1641,2],"bytes":[48474,48864]},"callables":{"github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent","kind":"method","span":{"start":[1683,1],"end":[1697,2],"bytes":[49695,50019]},"signature":"github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1688:6":{"kind":"call","span":{"start":[1688,6],"end":[1688,18],"bytes":[49877,49889]},"callee":null},"1689:13":{"kind":"call","span":{"start":[1689,13],"end":[1689,24],"bytes":[49904,49915]},"callee":null},"1695:14":{"kind":"call","span":{"start":[1695,14],"end":[1695,26],"bytes":[49993,50005]},"callee":null}}},"github.com/benbjohnson/litestream.restoreLevelCursor.refresh":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.refresh","kind":"method","span":{"start":[1643,1],"end":[1681,2],"bytes":[48866,49693]},"signature":"github.com/benbjohnson/litestream.restoreLevelCursor.refresh","parameters":[{"name":"currentMax","type":"github.com/superfly/ltx.TXID","span":{"start":[1643,1],"end":[1643,93],"bytes":[48866,48958]}},{"name":"txID","type":"github.com/superfly/ltx.TXID","span":{"start":[1643,1],"end":[1643,93],"bytes":[48866,48958]}},{"name":"timestamp","type":"time.Time","span":{"start":[1643,1],"end":[1643,93],"bytes":[48866,48958]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"1654:13":{"kind":"call","span":{"start":[1654,13],"end":[1654,30],"bytes":[49230,49247]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent"},"1673:30":{"kind":"call","span":{"start":[1673,30],"end":[1673,62],"bytes":[49540,49572]},"callee":null},"1673:7":{"kind":"call","span":{"start":[1673,7],"end":[1673,25],"bytes":[49517,49535]},"callee":null},"1677:28":{"kind":"call","span":{"start":[1677,28],"end":[1677,69],"bytes":[49619,49660]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreCandidateBetter"}}}},"fields":{"candidate":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/candidate","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1638,1],"end":[1638,25],"bytes":[48764,48788]}},"current":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/current","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1636,1],"end":[1636,23],"bytes":[48667,48689]}},"done":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/done","kind":"field","type":"bool","span":{"start":[1640,1],"end":[1640,11],"bytes":[48852,48862]}},"itr":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/itr","kind":"field","type":"github.com/superfly/ltx.FileIterator","span":{"start":[1634,1],"end":[1634,22],"bytes":[48576,48597]}}}}},"functions":{"github.com/benbjohnson/litestream.CalcRestorePlan":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","kind":"function","span":{"start":[1514,1],"end":[1630,2],"bytes":[45226,48472]},"signature":"github.com/benbjohnson/litestream.CalcRestorePlan","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1514,1],"end":[1514,148],"bytes":[45226,45373]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[1514,1],"end":[1514,148],"bytes":[45226,45373]}},{"name":"txID","type":"github.com/superfly/ltx.TXID","span":{"start":[1514,1],"end":[1514,148],"bytes":[45226,45373]}},{"name":"timestamp","type":"time.Time","span":{"start":[1514,1],"end":[1514,148],"bytes":[45226,45373]}},{"name":"logger","type":"*log/slog.Logger","span":{"start":[1514,1],"end":[1514,148],"bytes":[45226,45373]}}],"return_type":"([]*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":27},"body":{"1515:19":{"kind":"call","span":{"start":[1515,19],"end":[1515,37],"bytes":[45392,45410]},"callee":null},"1516:15":{"kind":"call","span":{"start":[1516,15],"end":[1516,76],"bytes":[45427,45488]},"callee":null},"1520:11":{"kind":"call","span":{"start":[1520,11],"end":[1520,38],"bytes":[45532,45559]},"callee":null},"1525:22":{"kind":"call","span":{"start":[1525,22],"end":[1525,81],"bytes":[45767,45826]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"1525:62":{"kind":"call","span":{"start":[1525,62],"end":[1525,80],"bytes":[45807,45825]},"callee":null},"1529:6":{"kind":"call","span":{"start":[1529,6],"end":[1529,24],"bytes":[45870,45888]},"callee":null},"1530:11":{"kind":"call","span":{"start":[1530,11],"end":[1530,29],"bytes":[45901,45919]},"callee":null},"1531:3":{"kind":"call","span":{"start":[1531,3],"end":[1531,93],"bytes":[45922,46012]},"callee":null},"1535:30":{"kind":"call","span":{"start":[1535,30],"end":[1535,62],"bytes":[46098,46130]},"callee":null},"1535:7":{"kind":"call","span":{"start":[1535,7],"end":[1535,25],"bytes":[46075,46093]},"callee":null},"1540:12":{"kind":"call","span":{"start":[1540,12],"end":[1540,31],"bytes":[46181,46200]},"callee":null},"1544:3":{"kind":"call","span":{"start":[1544,3],"end":[1544,95],"bytes":[46260,46352]},"callee":null},"1545:11":{"kind":"call","span":{"start":[1545,11],"end":[1545,34],"bytes":[46363,46386]},"callee":null},"1551:15":{"kind":"call","span":{"start":[1551,15],"end":[1551,30],"bytes":[46583,46598]},"callee":null},"1557:13":{"kind":"call","span":{"start":[1557,13],"end":[1557,55],"bytes":[46698,46740]},"callee":null},"1559:3":{"kind":"call","span":{"start":[1559,3],"end":[1559,62],"bytes":[46789,46848]},"callee":null},"1560:15":{"kind":"call","span":{"start":[1560,15],"end":[1560,66],"bytes":[46863,46914]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"1560:47":{"kind":"call","span":{"start":[1560,47],"end":[1560,65],"bytes":[46895,46913]},"callee":null},"1564:13":{"kind":"call","span":{"start":[1564,13],"end":[1566,5],"bytes":[46968,47022]},"callee":null},"1568:8":{"kind":"call","span":{"start":[1568,8],"end":[1574,5],"bytes":[47033,47139]},"callee":null},"1579:14":{"kind":"call","span":{"start":[1579,14],"end":[1579,57],"bytes":[47227,47270]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.refresh"},"1585:22":{"kind":"call","span":{"start":[1585,22],"end":[1585,78],"bytes":[47381,47437]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreCandidateBetter"},"1599:3":{"kind":"call","span":{"start":[1599,3],"end":[1601,34],"bytes":[47613,47775]},"callee":null},"1600:16":{"kind":"call","span":{"start":[1600,16],"end":[1600,82],"bytes":[47674,47740]},"callee":null},"1602:11":{"kind":"call","span":{"start":[1602,11],"end":[1602,40],"bytes":[47786,47815]},"callee":null},"1611:36":{"kind":"call","span":{"start":[1611,36],"end":[1611,54],"bytes":[47969,47987]},"callee":null},"1611:5":{"kind":"call","span":{"start":[1611,5],"end":[1611,15],"bytes":[47938,47948]},"callee":null},"1613:14":{"kind":"call","span":{"start":[1613,14],"end":[1613,36],"bytes":[48038,48060]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent"},"1617:17":{"kind":"call","span":{"start":[1617,17],"end":[1617,133],"bytes":[48187,48303]},"callee":null},"1622:5":{"kind":"call","span":{"start":[1622,5],"end":[1622,15],"bytes":[48321,48331]},"callee":null},"1625:18":{"kind":"call","span":{"start":[1625,18],"end":[1625,33],"bytes":[48391,48406]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan/github.com/benbjohnson/litestream.CalcRestorePlan.closure_1","kind":"function","span":{"start":[1568,1],"end":[1574,5],"bytes":[47026,47139]},"signature":"github.com/benbjohnson/litestream.CalcRestorePlan.closure_1","parameters":[],"body":{"1571:9":{"kind":"call","span":{"start":[1571,9],"end":[1571,27],"bytes":[47107,47125]},"callee":null}}}}},"github.com/benbjohnson/litestream.NewReplica":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica","kind":"function","span":{"start":[71,1],"end":[83,2],"bytes":[1756,2005]},"signature":"github.com/benbjohnson/litestream.NewReplica","parameters":[{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[71,1],"end":[71,35],"bytes":[1756,1790]}}],"return_type":"*github.com/benbjohnson/litestream.Replica","metrics":{"cyclomatic":1},"body":{"74:12":{"kind":"call","span":{"start":[74,12],"end":[74,36],"bytes":[1833,1857]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica/github.com/benbjohnson/litestream.NewReplica.closure_1","kind":"function","span":{"start":[75,1],"end":[75,22],"bytes":[1859,1880]},"signature":"github.com/benbjohnson/litestream.NewReplica.closure_1","parameters":[],"body":{}}}},"github.com/benbjohnson/litestream.NewReplicaWithClient":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplicaWithClient","kind":"function","span":{"start":[85,1],"end":[89,2],"bytes":[2007,2125]},"signature":"github.com/benbjohnson/litestream.NewReplicaWithClient","parameters":[{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[85,1],"end":[85,67],"bytes":[2007,2073]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[85,1],"end":[85,67],"bytes":[2007,2073]}}],"return_type":"*github.com/benbjohnson/litestream.Replica","metrics":{"cyclomatic":1},"body":{"86:7":{"kind":"call","span":{"start":[86,7],"end":[86,21],"bytes":[2080,2094]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica"}}},"github.com/benbjohnson/litestream.ReadTXIDFile":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ReadTXIDFile","kind":"function","span":{"start":[1755,1],"end":[1771,2],"bytes":[51644,52043]},"signature":"github.com/benbjohnson/litestream.ReadTXIDFile","parameters":[{"name":"outputPath","type":"string","span":{"start":[1755,1],"end":[1755,57],"bytes":[51644,51700]}}],"return_type":"(github.com/superfly/ltx.TXID, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1756:14":{"kind":"call","span":{"start":[1756,14],"end":[1756,34],"bytes":[51714,51734]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.TXIDPath"},"1758:15":{"kind":"call","span":{"start":[1758,15],"end":[1758,36],"bytes":[51750,51771]},"callee":null},"1759:5":{"kind":"call","span":{"start":[1759,5],"end":[1759,23],"bytes":[51776,51794]},"callee":null},"1762:13":{"kind":"call","span":{"start":[1762,13],"end":[1762,50],"bytes":[51849,51886]},"callee":null},"1765:15":{"kind":"call","span":{"start":[1765,15],"end":[1765,61],"bytes":[51905,51951]},"callee":null},"1765:29":{"kind":"call","span":{"start":[1765,29],"end":[1765,60],"bytes":[51919,51950]},"callee":null},"1765:47":{"kind":"call","span":{"start":[1765,47],"end":[1765,59],"bytes":[51937,51949]},"callee":null},"1767:13":{"kind":"call","span":{"start":[1767,13],"end":[1767,51],"bytes":[51981,52019]},"callee":null}}},"github.com/benbjohnson/litestream.TXIDPath":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.TXIDPath","kind":"function","span":{"start":[1714,1],"end":[1716,2],"bytes":[50523,50595]},"signature":"github.com/benbjohnson/litestream.TXIDPath","parameters":[{"name":"outputPath","type":"string","span":{"start":[1714,1],"end":[1714,42],"bytes":[50523,50564]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.WriteTXIDFile":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile","kind":"function","span":{"start":[1720,1],"end":[1751,2],"bytes":[50732,51511]},"signature":"github.com/benbjohnson/litestream.WriteTXIDFile","parameters":[{"name":"outputPath","type":"string","span":{"start":[1720,1],"end":[1720,61],"bytes":[50732,50792]}},{"name":"txid","type":"github.com/superfly/ltx.TXID","span":{"start":[1720,1],"end":[1720,61],"bytes":[50732,50792]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"1721:14":{"kind":"call","span":{"start":[1721,14],"end":[1721,34],"bytes":[50806,50826]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.TXIDPath"},"1724:12":{"kind":"call","span":{"start":[1724,12],"end":[1724,30],"bytes":[50869,50887]},"callee":null},"1726:10":{"kind":"call","span":{"start":[1726,10],"end":[1726,54],"bytes":[50914,50958]},"callee":null},"1728:8":{"kind":"call","span":{"start":[1728,8],"end":[1728,17],"bytes":[50969,50978]},"callee":null},"1729:8":{"kind":"call","span":{"start":[1729,8],"end":[1729,26],"bytes":[50986,51004]},"callee":null},"1731:15":{"kind":"call","span":{"start":[1731,15],"end":[1731,36],"bytes":[51020,51041]},"callee":null},"1732:10":{"kind":"call","span":{"start":[1732,10],"end":[1732,43],"bytes":[51065,51098]},"callee":null},"1735:12":{"kind":"call","span":{"start":[1735,12],"end":[1735,20],"bytes":[51114,51122]},"callee":null},"1736:10":{"kind":"call","span":{"start":[1736,10],"end":[1736,47],"bytes":[51146,51183]},"callee":null},"1739:12":{"kind":"call","span":{"start":[1739,12],"end":[1739,21],"bytes":[51199,51208]},"callee":null},"1740:10":{"kind":"call","span":{"start":[1740,10],"end":[1740,48],"bytes":[51232,51270]},"callee":null},"1743:12":{"kind":"call","span":{"start":[1743,12],"end":[1743,40],"bytes":[51286,51314]},"callee":null},"1744:10":{"kind":"call","span":{"start":[1744,10],"end":[1744,49],"bytes":[51338,51377]},"callee":null},"1747:12":{"kind":"call","span":{"start":[1747,12],"end":[1747,53],"bytes":[51393,51434]},"callee":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir"},"1747:30":{"kind":"call","span":{"start":[1747,30],"end":[1747,52],"bytes":[51411,51433]},"callee":null},"1748:10":{"kind":"call","span":{"start":[1748,10],"end":[1748,46],"bytes":[51458,51494]},"callee":null}}},"github.com/benbjohnson/litestream.checkIntegrity":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkIntegrity","kind":"function","span":{"start":[1332,1],"end":[1366,2],"bytes":[39569,40477]},"signature":"github.com/benbjohnson/litestream.checkIntegrity","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1332,1],"end":[1332,89],"bytes":[39569,39657]}},{"name":"dbPath","type":"string","span":{"start":[1332,1],"end":[1332,89],"bytes":[39569,39657]}},{"name":"mode","type":"github.com/benbjohnson/litestream.IntegrityCheckMode","span":{"start":[1332,1],"end":[1332,89],"bytes":[39569,39657]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"1337:13":{"kind":"call","span":{"start":[1337,13],"end":[1337,39],"bytes":[39720,39746]},"callee":null},"1339:10":{"kind":"call","span":{"start":[1339,10],"end":[1339,66],"bytes":[39773,39829]},"callee":null},"1341:8":{"kind":"call","span":{"start":[1341,8],"end":[1341,35],"bytes":[39840,39867]},"callee":null},"1350:10":{"kind":"call","span":{"start":[1350,10],"end":[1350,66],"bytes":[40029,40085]},"callee":null},"1354:12":{"kind":"call","span":{"start":[1354,12],"end":[1354,53],"bytes":[40120,40161]},"callee":null},"1355:10":{"kind":"call","span":{"start":[1355,10],"end":[1355,48],"bytes":[40199,40237]},"callee":null},"1358:10":{"kind":"call","span":{"start":[1358,10],"end":[1358,58],"bytes":[40271,40319]},"callee":null},"1362:6":{"kind":"call","span":{"start":[1362,6],"end":[1362,32],"bytes":[40404,40430]},"callee":null},"1363:6":{"kind":"call","span":{"start":[1363,6],"end":[1363,32],"bytes":[40436,40462]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkIntegrity/github.com/benbjohnson/litestream.checkIntegrity.closure_1","kind":"function","span":{"start":[1341,1],"end":[1341,35],"bytes":[39833,39867]},"signature":"github.com/benbjohnson/litestream.checkIntegrity.closure_1","parameters":[],"body":{"1341:21":{"kind":"call","span":{"start":[1341,21],"end":[1341,31],"bytes":[39853,39863]},"callee":null}}}}},"github.com/benbjohnson/litestream.checkpointV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkpointV3","kind":"function","span":{"start":[1320,1],"end":[1329,2],"bytes":[39277,39492]},"signature":"github.com/benbjohnson/litestream.checkpointV3","parameters":[{"name":"dbPath","type":"string","span":{"start":[1320,1],"end":[1320,41],"bytes":[39277,39317]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"1321:13":{"kind":"call","span":{"start":[1321,13],"end":[1321,39],"bytes":[39330,39356]},"callee":null},"1325:8":{"kind":"call","span":{"start":[1325,8],"end":[1325,35],"bytes":[39397,39424]},"callee":null},"1327:11":{"kind":"call","span":{"start":[1327,11],"end":[1327,53],"bytes":[39436,39478]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkpointV3/github.com/benbjohnson/litestream.checkpointV3.closure_1","kind":"function","span":{"start":[1325,1],"end":[1325,35],"bytes":[39390,39424]},"signature":"github.com/benbjohnson/litestream.checkpointV3.closure_1","parameters":[],"body":{"1325:21":{"kind":"call","span":{"start":[1325,21],"end":[1325,31],"bytes":[39410,39420]},"callee":null}}}}},"github.com/benbjohnson/litestream.filterWALSegmentsV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.filterWALSegmentsV3","kind":"function","span":{"start":[1209,1],"end":[1221,2],"bytes":[36015,36369]},"signature":"github.com/benbjohnson/litestream.filterWALSegmentsV3","parameters":[{"name":"segments","type":"[]github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[1209,1],"end":[1209,115],"bytes":[36015,36129]}},{"name":"snapshotIndex","type":"int","span":{"start":[1209,1],"end":[1209,115],"bytes":[36015,36129]}},{"name":"timestamp","type":"time.Time","span":{"start":[1209,1],"end":[1209,115],"bytes":[36015,36129]}}],"return_type":"[]github.com/benbjohnson/litestream.WALSegmentInfoV3","metrics":{"cyclomatic":4},"body":{"1215:29":{"kind":"call","span":{"start":[1215,29],"end":[1215,59],"bytes":[36270,36300]},"callee":null},"1215:7":{"kind":"call","span":{"start":[1215,7],"end":[1215,25],"bytes":[36248,36266]},"callee":null},"1218:12":{"kind":"call","span":{"start":[1218,12],"end":[1218,31],"bytes":[36330,36349]},"callee":null}}},"github.com/benbjohnson/litestream.findBestSnapshotV3":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.findBestSnapshotV3","kind":"function","span":{"start":[1192,1],"end":[1205,2],"bytes":[35554,35889]},"signature":"github.com/benbjohnson/litestream.findBestSnapshotV3","parameters":[{"name":"snapshots","type":"[]github.com/benbjohnson/litestream.SnapshotInfoV3","span":{"start":[1192,1],"end":[1192,91],"bytes":[35554,35644]}},{"name":"timestamp","type":"time.Time","span":{"start":[1192,1],"end":[1192,91],"bytes":[35554,35644]}}],"return_type":"*github.com/benbjohnson/litestream.SnapshotInfoV3","metrics":{"cyclomatic":5},"body":{"1193:5":{"kind":"call","span":{"start":[1193,5],"end":[1193,19],"bytes":[35649,35663]},"callee":null},"1196:5":{"kind":"call","span":{"start":[1196,5],"end":[1196,23],"bytes":[35691,35709]},"callee":null},"1197:21":{"kind":"call","span":{"start":[1197,21],"end":[1197,35],"bytes":[35732,35746]},"callee":null},"1199:11":{"kind":"call","span":{"start":[1199,11],"end":[1199,25],"bytes":[35763,35777]},"callee":null},"1200:7":{"kind":"call","span":{"start":[1200,7],"end":[1200,46],"bytes":[35803,35842]},"callee":null}}},"github.com/benbjohnson/litestream.restoreCandidateBetter":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreCandidateBetter","kind":"function","span":{"start":[1699,1],"end":[1710,2],"bytes":[50021,50346]},"signature":"github.com/benbjohnson/litestream.restoreCandidateBetter","parameters":[{"name":"curr","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1699,1],"end":[1699,61],"bytes":[50021,50081]}},{"name":"next","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1699,1],"end":[1699,61],"bytes":[50021,50081]}}],"return_type":"bool","metrics":{"cyclomatic":4},"body":{"1709:9":{"kind":"call","span":{"start":[1709,9],"end":[1709,46],"bytes":[50307,50344]},"callee":null}}},"github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt":{"id":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt","kind":"function","span":{"start":[1179,1],"end":[1187,2],"bytes":[35080,35361]},"signature":"github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt","parameters":[{"name":"snapshots","type":"[]github.com/benbjohnson/litestream.SnapshotInfoV3","span":{"start":[1179,1],"end":[1179,62],"bytes":[35080,35141]}}],"metrics":{"cyclomatic":4},"body":{"1180:18":{"kind":"call","span":{"start":[1180,18],"end":[1180,32],"bytes":[35159,35173]},"callee":null},"1181:23":{"kind":"call","span":{"start":[1181,23],"end":[1181,37],"bytes":[35205,35219]},"callee":null},"1182:7":{"kind":"call","span":{"start":[1182,7],"end":[1182,59],"bytes":[35233,35285]},"callee":null}}}},"content_hash":"5dfbbc9a3eb6bbfb1922a8a17a47af6481e11432b2aeb8915dc60beec8f394db"},"replica_client.go":{"id":"can://go/litestream/replica_client.go","kind":"module","span":{"start":[1,1],"end":[168,1],"bytes":[0,6022]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\n\t\"github.com/superfly/ltx\"\n)\n\nvar ErrStopIter = errors.New(\"stop iterator\")\n\n// ReplicaClient represents client to connect to a Replica.\ntype ReplicaClient interface {\n\t// Type returns the type of client.\n\tType() string\n\n\t// Init initializes the replica client connection.\n\t// This may establish connections, validate configuration, etc.\n\t// Implementations should be idempotent (no-op if already initialized).\n\tInit(ctx context.Context) error\n\n\t// LTXFiles returns an iterator of all LTX files on the replica for a given level.\n\t// If seek is specified, the iterator start from the given TXID or the next available if not found.\n\t// If useMetadata is true, the iterator fetches accurate timestamps from metadata for timestamp-based restore.\n\t// When false, the iterator uses fast timestamps (LastModified/Created/ModTime) for normal operations.\n\tLTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error)\n\n\t// OpenLTXFile returns a reader that contains an LTX file at a given TXID.\n\t// If seek is specified, the reader will start at the given offset.\n\t// Returns an os.ErrNotFound error if the LTX file does not exist.\n\tOpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error)\n\n\t// WriteLTXFile writes an LTX file to the replica.\n\t// Returns metadata for the written file.\n\tWriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, r io.Reader) (*ltx.FileInfo, error)\n\n\t// DeleteLTXFiles deletes one or more LTX files.\n\tDeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error\n\n\t// DeleteAll deletes all files.\n\tDeleteAll(ctx context.Context) error\n\n\t// SetLogger sets the logger for the client.\n\tSetLogger(logger *slog.Logger)\n}\n\n// FindLTXFiles returns a list of files that match filter.\n// The useMetadata parameter is passed through to LTXFiles to control whether accurate timestamps\n// are fetched from metadata. When true (timestamp-based restore), accurate timestamps are required.\n// When false (normal operations), fast timestamps are sufficient.\nfunc FindLTXFiles(ctx context.Context, client ReplicaClient, level int, useMetadata bool, filter func(*ltx.FileInfo) (bool, error)) ([]*ltx.FileInfo, error) {\n\titr, err := client.LTXFiles(ctx, level, 0, useMetadata)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer func() { _ = itr.Close() }()\n\n\tvar a []*ltx.FileInfo\n\tfor itr.Next() {\n\t\titem := itr.Item()\n\n\t\tmatch, err := filter(item)\n\t\tif match {\n\t\t\ta = append(a, item)\n\t\t}\n\n\t\tif errors.Is(err, ErrStopIter) {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn a, err\n\t\t}\n\t}\n\n\tif err := itr.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn a, nil\n}\n\n// DefaultEstimatedPageIndexSize is size that is first fetched when fetching the page index.\n// If the fetch was smaller than the actual page index, another call is made to fetch the rest.\nconst DefaultEstimatedPageIndexSize = 32 * 1024 // 32KB\n\nfunc FetchPageIndex(ctx context.Context, client ReplicaClient, info *ltx.FileInfo) (map[uint32]ltx.PageIndexElem, error) {\n\trc, err := fetchPageIndexData(ctx, client, info)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rc.Close()\n\n\treturn ltx.DecodePageIndex(bufio.NewReader(rc), info.Level, info.MinTXID, info.MaxTXID)\n}\n\n// FetchLTXHeader reads \u0026 returns the LTX header for the given file info.\nfunc FetchLTXHeader(ctx context.Context, client ReplicaClient, info *ltx.FileInfo) (ltx.Header, error) {\n\trc, err := client.OpenLTXFile(ctx, info.Level, info.MinTXID, info.MaxTXID, 0, ltx.HeaderSize)\n\tif err != nil {\n\t\treturn ltx.Header{}, fmt.Errorf(\"open ltx file: %w\", err)\n\t}\n\tdefer rc.Close()\n\thdr, _, err := ltx.PeekHeader(rc)\n\tif err != nil {\n\t\treturn ltx.Header{}, fmt.Errorf(\"peek header: %w\", err)\n\t}\n\treturn hdr, nil\n}\n\n// fetchPageIndexData fetches a chunk of the end of the file to get the page index.\n// If the fetch was smaller than the actual page index, another call is made to fetch the rest.\nfunc fetchPageIndexData(ctx context.Context, client ReplicaClient, info *ltx.FileInfo) (io.ReadCloser, error) {\n\t// Fetch the end of the file to get the page index.\n\toffset := info.Size - DefaultEstimatedPageIndexSize\n\tif offset \u003c 0 {\n\t\toffset = 0\n\t}\n\n\tf, err := client.OpenLTXFile(ctx, info.Level, info.MinTXID, info.MaxTXID, offset, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"open ltx file: %w\", err)\n\t}\n\tdefer f.Close()\n\n\t// If we have read the full size of the page index, return the page index block as a reader.\n\tb, err := io.ReadAll(f)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read ltx page index: %w\", err)\n\t}\n\t// The replica may return fewer bytes than a page index footer occupies, for\n\t// example if the file is truncated or otherwise corrupt. Slicing the footer\n\t// off the end unchecked would index past the start of the buffer and panic.\n\tif len(b) \u003c ltx.TrailerSize+8 {\n\t\treturn nil, fmt.Errorf(\"ltx file too short to contain a page index: %d bytes\", len(b))\n\t}\n\n\tsize := binary.BigEndian.Uint64(b[len(b)-ltx.TrailerSize-8:])\n\tif off := len(b) - int(size) - ltx.TrailerSize - 8; off \u003e 0 {\n\t\treturn io.NopCloser(bytes.NewReader(b[off:])), nil\n\t}\n\n\t// Otherwise read the file from the start of the page index.\n\tf, err = client.OpenLTXFile(ctx, info.Level, info.MinTXID, info.MaxTXID, info.Size-ltx.TrailerSize-8-int64(size), 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"open ltx file: %w\", err)\n\t}\n\treturn f, nil\n}\n\n// FetchPage fetches and decodes a single page frame from an LTX file.\nfunc FetchPage(ctx context.Context, client ReplicaClient, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (ltx.PageHeader, []byte, error) {\n\tf, err := client.OpenLTXFile(ctx, level, minTXID, maxTXID, offset, size)\n\tif err != nil {\n\t\treturn ltx.PageHeader{}, nil, fmt.Errorf(\"open ltx file: %w\", err)\n\t}\n\tdefer f.Close()\n\n\tb, err := io.ReadAll(f)\n\tif err != nil {\n\t\treturn ltx.PageHeader{}, nil, fmt.Errorf(\"read ltx page frame: %w\", err)\n\t}\n\treturn ltx.DecodePageData(b)\n}\n","imports":[{"name":"bufio","path":"bufio","span":{"start":[4,1],"end":[4,9],"bytes":[29,37]}},{"name":"bytes","path":"bytes","span":{"start":[5,1],"end":[5,9],"bytes":[38,46]}},{"name":"context","path":"context","span":{"start":[6,1],"end":[6,11],"bytes":[47,57]}},{"name":"binary","path":"encoding/binary","span":{"start":[7,1],"end":[7,19],"bytes":[58,76]}},{"name":"errors","path":"errors","span":{"start":[8,1],"end":[8,10],"bytes":[77,86]}},{"name":"fmt","path":"fmt","span":{"start":[9,1],"end":[9,7],"bytes":[87,93]}},{"name":"io","path":"io","span":{"start":[10,1],"end":[10,6],"bytes":[94,99]}},{"name":"slog","path":"log/slog","span":{"start":[11,1],"end":[11,12],"bytes":[100,111]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[13,1],"end":[13,27],"bytes":[113,139]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient","kind":"interface","span":{"start":[19,1],"end":[51,2],"bytes":[250,1859]},"callables":{"github.com/benbjohnson/litestream.ReplicaClient.DeleteAll":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteAll","kind":"method","span":{"start":[47,1],"end":[47,38],"bytes":[1741,1778]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[47,1],"end":[47,38],"bytes":[1741,1778]}}],"return_type":"error","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[44,1],"end":[44,62],"bytes":[1645,1706]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[44,1],"end":[44,62],"bytes":[1645,1706]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[44,1],"end":[44,62],"bytes":[1645,1706]}}],"return_type":"error","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClient.Init":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Init","kind":"method","span":{"start":[26,1],"end":[26,33],"bytes":[524,556]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[26,1],"end":[26,33],"bytes":[524,556]}}],"return_type":"error","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClient.LTXFiles":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","kind":"method","span":{"start":[32,1],"end":[32,101],"bytes":[959,1059]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[32,1],"end":[32,101],"bytes":[959,1059]}},{"name":"level","type":"int","span":{"start":[32,1],"end":[32,101],"bytes":[959,1059]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[32,1],"end":[32,101],"bytes":[959,1059]}},{"name":"useMetadata","type":"bool","span":{"start":[32,1],"end":[32,101],"bytes":[959,1059]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]}},{"name":"level","type":"int","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]}},{"name":"offset","type":"int64","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]}},{"name":"size","type":"int64","span":{"start":[37,1],"end":[37,115],"bytes":[1274,1388]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClient.SetLogger":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.SetLogger","kind":"method","span":{"start":[50,1],"end":[50,32],"bytes":[1826,1857]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[50,1],"end":[50,32],"bytes":[1826,1857]}}],"body":{}},"github.com/benbjohnson/litestream.ReplicaClient.Type":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type","kind":"method","span":{"start":[21,1],"end":[21,15],"bytes":[318,332]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.Type","parameters":[],"return_type":"string","body":{}},"github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[41,1],"end":[41,109],"bytes":[1485,1593]},"signature":"github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[41,1],"end":[41,109],"bytes":[1485,1593]}},{"name":"level","type":"int","span":{"start":[41,1],"end":[41,109],"bytes":[1485,1593]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[41,1],"end":[41,109],"bytes":[1485,1593]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[41,1],"end":[41,109],"bytes":[1485,1593]}},{"name":"r","type":"io.Reader","span":{"start":[41,1],"end":[41,109],"bytes":[1485,1593]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"body":{}}}}},"functions":{"github.com/benbjohnson/litestream.FetchLTXHeader":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FetchLTXHeader","kind":"function","span":{"start":[101,1],"end":[112,2],"bytes":[3422,3851]},"signature":"github.com/benbjohnson/litestream.FetchLTXHeader","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[101,1],"end":[101,105],"bytes":[3422,3526]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[101,1],"end":[101,105],"bytes":[3422,3526]}},{"name":"info","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[101,1],"end":[101,105],"bytes":[3422,3526]}}],"return_type":"(github.com/superfly/ltx.Header, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"102:13":{"kind":"call","span":{"start":[102,13],"end":[102,95],"bytes":[3539,3621]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile"},"104:24":{"kind":"call","span":{"start":[104,24],"end":[104,60],"bytes":[3662,3698]},"callee":null},"106:8":{"kind":"call","span":{"start":[106,8],"end":[106,18],"bytes":[3709,3719]},"callee":null},"107:17":{"kind":"call","span":{"start":[107,17],"end":[107,35],"bytes":[3736,3754]},"callee":null},"109:24":{"kind":"call","span":{"start":[109,24],"end":[109,58],"bytes":[3795,3829]},"callee":null}}},"github.com/benbjohnson/litestream.FetchPage":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FetchPage","kind":"function","span":{"start":[155,1],"end":[167,2],"bytes":[5539,6021]},"signature":"github.com/benbjohnson/litestream.FetchPage","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}},{"name":"level","type":"int","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}},{"name":"offset","type":"int64","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}},{"name":"size","type":"int64","span":{"start":[155,1],"end":[155,150],"bytes":[5539,5688]}}],"return_type":"(github.com/superfly/ltx.PageHeader, []byte, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"156:12":{"kind":"call","span":{"start":[156,12],"end":[156,74],"bytes":[5700,5762]},"callee":null},"158:33":{"kind":"call","span":{"start":[158,33],"end":[158,69],"bytes":[5812,5848]},"callee":null},"160:8":{"kind":"call","span":{"start":[160,8],"end":[160,17],"bytes":[5859,5868]},"callee":null},"162:12":{"kind":"call","span":{"start":[162,12],"end":[162,25],"bytes":[5881,5894]},"callee":null},"164:33":{"kind":"call","span":{"start":[164,33],"end":[164,75],"bytes":[5944,5986]},"callee":null},"166:9":{"kind":"call","span":{"start":[166,9],"end":[166,30],"bytes":[5998,6019]},"callee":null}}},"github.com/benbjohnson/litestream.FetchPageIndex":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FetchPageIndex","kind":"function","span":{"start":[90,1],"end":[98,2],"bytes":[3026,3346]},"signature":"github.com/benbjohnson/litestream.FetchPageIndex","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[90,1],"end":[90,123],"bytes":[3026,3148]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[90,1],"end":[90,123],"bytes":[3026,3148]}},{"name":"info","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[90,1],"end":[90,123],"bytes":[3026,3148]}}],"return_type":"(map[uint32]github.com/superfly/ltx.PageIndexElem, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"91:13":{"kind":"call","span":{"start":[91,13],"end":[91,50],"bytes":[3161,3198]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.fetchPageIndexData"},"95:8":{"kind":"call","span":{"start":[95,8],"end":[95,18],"bytes":[3244,3254]},"callee":null},"97:29":{"kind":"call","span":{"start":[97,29],"end":[97,48],"bytes":[3284,3303]},"callee":null},"97:9":{"kind":"call","span":{"start":[97,9],"end":[97,89],"bytes":[3264,3344]},"callee":null}}},"github.com/benbjohnson/litestream.FindLTXFiles":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FindLTXFiles","kind":"function","span":{"start":[57,1],"end":[84,2],"bytes":[2186,2778]},"signature":"github.com/benbjohnson/litestream.FindLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[57,1],"end":[57,159],"bytes":[2186,2344]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[57,1],"end":[57,159],"bytes":[2186,2344]}},{"name":"level","type":"int","span":{"start":[57,1],"end":[57,159],"bytes":[2186,2344]}},{"name":"useMetadata","type":"bool","span":{"start":[57,1],"end":[57,159],"bytes":[2186,2344]}},{"name":"filter","type":"func(*github.com/superfly/ltx.FileInfo) (bool, error)","span":{"start":[57,1],"end":[57,159],"bytes":[2186,2344]}}],"return_type":"([]*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"58:14":{"kind":"call","span":{"start":[58,14],"end":[58,57],"bytes":[2358,2401]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles"},"62:8":{"kind":"call","span":{"start":[62,8],"end":[62,36],"bytes":[2447,2475]},"callee":null},"65:6":{"kind":"call","span":{"start":[65,6],"end":[65,16],"bytes":[2505,2515]},"callee":null},"66:11":{"kind":"call","span":{"start":[66,11],"end":[66,21],"bytes":[2528,2538]},"callee":null},"68:17":{"kind":"call","span":{"start":[68,17],"end":[68,29],"bytes":[2556,2568]},"callee":null},"70:8":{"kind":"call","span":{"start":[70,8],"end":[70,23],"bytes":[2589,2604]},"callee":null},"73:6":{"kind":"call","span":{"start":[73,6],"end":[73,33],"bytes":[2615,2642]},"callee":null},"80:12":{"kind":"call","span":{"start":[80,12],"end":[80,23],"bytes":[2715,2726]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FindLTXFiles/github.com/benbjohnson/litestream.FindLTXFiles.closure_1","kind":"function","span":{"start":[62,1],"end":[62,36],"bytes":[2440,2475]},"signature":"github.com/benbjohnson/litestream.FindLTXFiles.closure_1","parameters":[],"body":{"62:21":{"kind":"call","span":{"start":[62,21],"end":[62,32],"bytes":[2460,2471]},"callee":null}}}}},"github.com/benbjohnson/litestream.fetchPageIndexData":{"id":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.fetchPageIndexData","kind":"function","span":{"start":[116,1],"end":[152,2],"bytes":[4033,5466]},"signature":"github.com/benbjohnson/litestream.fetchPageIndexData","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[116,1],"end":[116,112],"bytes":[4033,4144]}},{"name":"client","type":"github.com/benbjohnson/litestream.ReplicaClient","span":{"start":[116,1],"end":[116,112],"bytes":[4033,4144]}},{"name":"info","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[116,1],"end":[116,112],"bytes":[4033,4144]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"123:12":{"kind":"call","span":{"start":[123,12],"end":[123,86],"bytes":[4296,4370]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile"},"125:15":{"kind":"call","span":{"start":[125,15],"end":[125,51],"bytes":[4402,4438]},"callee":null},"127:8":{"kind":"call","span":{"start":[127,8],"end":[127,17],"bytes":[4449,4458]},"callee":null},"130:12":{"kind":"call","span":{"start":[130,12],"end":[130,25],"bytes":[4565,4578]},"callee":null},"132:15":{"kind":"call","span":{"start":[132,15],"end":[132,57],"bytes":[4610,4652]},"callee":null},"137:5":{"kind":"call","span":{"start":[137,5],"end":[137,11],"bytes":[4894,4900]},"callee":null},"138:15":{"kind":"call","span":{"start":[138,15],"end":[138,89],"bytes":[4937,5011]},"callee":null},"138:82":{"kind":"call","span":{"start":[138,82],"end":[138,88],"bytes":[5004,5010]},"callee":null},"141:10":{"kind":"call","span":{"start":[141,10],"end":[141,63],"bytes":[5025,5078]},"callee":null},"141:36":{"kind":"call","span":{"start":[141,36],"end":[141,42],"bytes":[5051,5057]},"callee":null},"142:12":{"kind":"call","span":{"start":[142,12],"end":[142,18],"bytes":[5090,5096]},"callee":null},"142:21":{"kind":"call","span":{"start":[142,21],"end":[142,30],"bytes":[5099,5108]},"callee":null},"143:10":{"kind":"call","span":{"start":[143,10],"end":[143,48],"bytes":[5151,5189]},"callee":null},"143:23":{"kind":"call","span":{"start":[143,23],"end":[143,47],"bytes":[5164,5188]},"callee":null},"147:103":{"kind":"call","span":{"start":[147,103],"end":[147,114],"bytes":[5363,5374]},"callee":null},"147:11":{"kind":"call","span":{"start":[147,11],"end":[147,118],"bytes":[5271,5378]},"callee":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile"},"149:15":{"kind":"call","span":{"start":[149,15],"end":[149,51],"bytes":[5410,5446]},"callee":null}}}},"content_hash":"c57b00cfbdeb7e706a61acbdf3ca4d50075167c197082d38eea328b42a7388cb"},"replica_url.go":{"id":"can://go/litestream/replica_url.go","kind":"module","span":{"start":[1,1],"end":[441,1],"bytes":[0,12872]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"path\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// ReplicaClientFactory is a function that creates a ReplicaClient from URL components.\n// The userinfo parameter contains credentials from the URL (e.g., user:pass@host).\ntype ReplicaClientFactory func(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (ReplicaClient, error)\n\nvar (\n\treplicaClientFactories = make(map[string]ReplicaClientFactory)\n\treplicaClientFactoriesMu sync.RWMutex\n)\n\n// RegisterReplicaClientFactory registers a factory function for creating replica clients\n// for a given URL scheme. This is typically called from init() functions in backend packages.\nfunc RegisterReplicaClientFactory(scheme string, factory ReplicaClientFactory) {\n\treplicaClientFactoriesMu.Lock()\n\tdefer replicaClientFactoriesMu.Unlock()\n\treplicaClientFactories[scheme] = factory\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from a URL string.\n// The URL scheme determines which backend is used (s3, gs, abs, file, etc.).\nfunc NewReplicaClientFromURL(rawURL string) (ReplicaClient, error) {\n\tscheme, host, urlPath, query, userinfo, err := ParseReplicaURLWithQuery(rawURL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Normalize webdavs to webdav\n\tfactoryScheme := scheme\n\tif factoryScheme == \"webdavs\" {\n\t\tfactoryScheme = \"webdav\"\n\t}\n\n\treplicaClientFactoriesMu.RLock()\n\tfactory, ok := replicaClientFactories[factoryScheme]\n\treplicaClientFactoriesMu.RUnlock()\n\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unsupported replica URL scheme: %q\", scheme)\n\t}\n\n\treturn factory(scheme, host, urlPath, query, userinfo)\n}\n\n// ReplicaTypeFromURL returns the replica type from a URL string.\n// Returns empty string if the URL is invalid or has no scheme.\nfunc ReplicaTypeFromURL(rawURL string) string {\n\tif !IsURL(rawURL) {\n\t\treturn \"\"\n\t}\n\tscheme, _, _, _ := ParseReplicaURL(rawURL)\n\tif scheme == \"\" {\n\t\treturn \"\"\n\t}\n\tif scheme == \"webdavs\" {\n\t\treturn \"webdav\"\n\t}\n\treturn scheme\n}\n\n// ParseReplicaURL parses a replica URL and returns the scheme, host, and path.\nfunc ParseReplicaURL(s string) (scheme, host, urlPath string, err error) {\n\tif strings.HasPrefix(strings.ToLower(s), \"s3://arn:\") {\n\t\tscheme, host, urlPath, _, err = parseS3AccessPointURL(s)\n\t\treturn scheme, host, urlPath, err\n\t}\n\n\tscheme, host, urlPath, _, _, err = ParseReplicaURLWithQuery(s)\n\treturn scheme, host, urlPath, err\n}\n\n// ParseReplicaURLWithQuery parses a replica URL and returns query parameters and userinfo.\nfunc ParseReplicaURLWithQuery(s string) (scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo, err error) {\n\t// Handle S3 Access Point ARNs which can't be parsed by standard url.Parse\n\tif strings.HasPrefix(strings.ToLower(s), \"s3://arn:\") {\n\t\tscheme, host, urlPath, query, err := parseS3AccessPointURL(s)\n\t\treturn scheme, host, urlPath, query, nil, err\n\t}\n\n\tu, err := url.Parse(s)\n\tif err != nil {\n\t\treturn \"\", \"\", \"\", nil, nil, err\n\t}\n\n\tswitch u.Scheme {\n\tcase \"file\":\n\t\tscheme, u.Scheme = u.Scheme, \"\"\n\t\t// Remove query params from path for file URLs\n\t\tu.RawQuery = \"\"\n\t\treturn scheme, \"\", path.Clean(u.String()), nil, nil, nil\n\n\tcase \"\":\n\t\treturn u.Scheme, u.Host, u.Path, nil, nil, fmt.Errorf(\"replica url scheme required: %s\", s)\n\n\tdefault:\n\t\treturn u.Scheme, u.Host, strings.TrimPrefix(path.Clean(u.Path), \"/\"), u.Query(), u.User, nil\n\t}\n}\n\n// parseS3AccessPointURL parses an S3 Access Point URL (s3://arn:...).\nfunc parseS3AccessPointURL(s string) (scheme, host, urlPath string, query url.Values, err error) {\n\tconst prefix = \"s3://\"\n\tif !strings.HasPrefix(strings.ToLower(s), prefix) {\n\t\treturn \"\", \"\", \"\", nil, fmt.Errorf(\"invalid s3 access point url: %s\", s)\n\t}\n\n\tarnWithPath := s[len(prefix):]\n\n\t// Split off query string if present\n\tvar queryStr string\n\tif idx := strings.IndexByte(arnWithPath, '?'); idx != -1 {\n\t\tqueryStr = arnWithPath[idx+1:]\n\t\tarnWithPath = arnWithPath[:idx]\n\t}\n\n\tbucket, key, err := splitS3AccessPointARN(arnWithPath)\n\tif err != nil {\n\t\treturn \"\", \"\", \"\", nil, err\n\t}\n\n\t// Parse query string if present\n\tif queryStr != \"\" {\n\t\tquery, err = url.ParseQuery(queryStr)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", \"\", nil, fmt.Errorf(\"parse query string: %w\", err)\n\t\t}\n\t}\n\n\treturn \"s3\", bucket, CleanReplicaURLPath(key), query, nil\n}\n\n// splitS3AccessPointARN splits an S3 Access Point ARN into bucket and key components.\nfunc splitS3AccessPointARN(s string) (bucket, key string, err error) {\n\tlower := strings.ToLower(s)\n\tconst marker = \":accesspoint/\"\n\tidx := strings.Index(lower, marker)\n\tif idx == -1 {\n\t\treturn \"\", \"\", fmt.Errorf(\"invalid s3 access point arn: %s\", s)\n\t}\n\n\tnameStart := idx + len(marker)\n\tif nameStart \u003e= len(s) {\n\t\treturn \"\", \"\", fmt.Errorf(\"invalid s3 access point arn: %s\", s)\n\t}\n\n\tremainder := s[nameStart:]\n\tslashIdx := strings.IndexByte(remainder, '/')\n\tif slashIdx == -1 {\n\t\treturn s, \"\", nil\n\t}\n\n\tbucketEnd := nameStart + slashIdx\n\tbucket = s[:bucketEnd]\n\tkey = remainder[slashIdx+1:]\n\treturn bucket, key, nil\n}\n\n// CleanReplicaURLPath cleans a URL path for use in replica storage.\nfunc CleanReplicaURLPath(p string) string {\n\tif p == \"\" {\n\t\treturn \"\"\n\t}\n\tcleaned := path.Clean(\"/\" + p)\n\tcleaned = strings.TrimPrefix(cleaned, \"/\")\n\tif cleaned == \".\" {\n\t\treturn \"\"\n\t}\n\treturn cleaned\n}\n\n// RegionFromS3ARN extracts the region from an S3 ARN.\nfunc RegionFromS3ARN(arn string) string {\n\tparts := strings.SplitN(arn, \":\", 6)\n\tif len(parts) \u003e= 4 {\n\t\treturn parts[3]\n\t}\n\treturn \"\"\n}\n\n// BoolQueryValue returns a boolean value from URL query parameters.\n// It checks multiple keys in order and returns the value and whether it was set.\nfunc BoolQueryValue(query url.Values, keys ...string) (value bool, ok bool) {\n\tif query == nil {\n\t\treturn false, false\n\t}\n\tfor _, key := range keys {\n\t\tif raw := query.Get(key); raw != \"\" {\n\t\t\tswitch strings.ToLower(raw) {\n\t\t\tcase \"true\", \"1\", \"t\", \"yes\":\n\t\t\t\treturn true, true\n\t\t\tcase \"false\", \"0\", \"f\", \"no\":\n\t\t\t\treturn false, true\n\t\t\tdefault:\n\t\t\t\treturn false, true\n\t\t\t}\n\t\t}\n\t}\n\treturn false, false\n}\n\n// IntQueryValue returns a positive integer value from URL query parameters.\n// It checks keys in order and returns the value and whether it was set.\n// Returns an error if a present value is not a positive integer.\nfunc IntQueryValue(query url.Values, keys ...string) (value int64, ok bool, err error) {\n\tif query == nil {\n\t\treturn 0, false, nil\n\t}\n\tfor _, key := range keys {\n\t\tif raw := query.Get(key); raw != \"\" {\n\t\t\tn, err := strconv.ParseInt(raw, 10, 64)\n\t\t\tif err != nil || n \u003c= 0 {\n\t\t\t\treturn 0, false, fmt.Errorf(\"invalid value for query parameter %q: %q (must be a positive integer)\", key, raw)\n\t\t\t}\n\t\t\treturn n, true, nil\n\t\t}\n\t}\n\treturn 0, false, nil\n}\n\n// IsHetznerEndpoint returns true if the endpoint is Hetzner object storage service.\nfunc IsHetznerEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn strings.HasSuffix(host, \".your-objectstorage.com\")\n}\n\n// IsTigrisEndpoint returns true if the endpoint is the Tigris object storage service.\nfunc IsTigrisEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn host == \"fly.storage.tigris.dev\" || host == \"t3.storage.dev\"\n}\n\n// IsGoogleCloudStorageEndpoint returns true if the endpoint is Google Cloud Storage.\nfunc IsGoogleCloudStorageEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\thost = strings.TrimSuffix(host, \".\")\n\n\tlabels := strings.Split(host, \".\")\n\tif len(labels) \u003c 3 ||\n\t\tlabels[len(labels)-2] != \"googleapis\" ||\n\t\tlabels[len(labels)-1] != \"com\" {\n\t\treturn false\n\t}\n\tfor _, label := range labels {\n\t\tif label == \"\" {\n\t\t\treturn false\n\t\t}\n\t}\n\tif len(labels) \u003e 3 {\n\t\tfor _, segment := range strings.Split(labels[1], \"-\") {\n\t\t\tif segment == \"storage\" {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\tfor _, segment := range strings.Split(labels[0], \"-\") {\n\t\tif segment == \"storage\" {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// IsDigitalOceanEndpoint returns true if the endpoint is Digital Ocean Spaces.\nfunc IsDigitalOceanEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn strings.HasSuffix(host, \".digitaloceanspaces.com\")\n}\n\n// IsBackblazeEndpoint returns true if the endpoint is Backblaze B2.\nfunc IsBackblazeEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn strings.HasSuffix(host, \".backblazeb2.com\")\n}\n\n// IsFilebaseEndpoint returns true if the endpoint is Filebase.\nfunc IsFilebaseEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn host == \"s3.filebase.com\"\n}\n\n// IsScalewayEndpoint returns true if the endpoint is Scaleway Object Storage.\nfunc IsScalewayEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn strings.HasSuffix(host, \".scw.cloud\")\n}\n\n// IsCloudflareR2Endpoint returns true if the endpoint is Cloudflare R2.\nfunc IsCloudflareR2Endpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn strings.HasSuffix(host, \".r2.cloudflarestorage.com\")\n}\n\n// IsSupabaseEndpoint returns true if the endpoint is Supabase Storage S3.\nfunc IsSupabaseEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\treturn strings.HasSuffix(host, \".supabase.co\")\n}\n\n// IsMinIOEndpoint returns true if the endpoint appears to be MinIO or similar\n// (a custom endpoint with a port number that is not a known cloud provider).\nfunc IsMinIOEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\tif u.Port() == \"\" {\n\t\treturn false\n\t}\n\t// Exclude known cloud providers\n\tif strings.Contains(host, \".amazonaws.com\") ||\n\t\tstrings.Contains(host, \".digitaloceanspaces.com\") ||\n\t\tstrings.Contains(host, \".backblazeb2.com\") ||\n\t\tstrings.Contains(host, \".filebase.com\") ||\n\t\tstrings.Contains(host, \".scw.cloud\") ||\n\t\tstrings.Contains(host, \".r2.cloudflarestorage.com\") ||\n\t\tstrings.Contains(host, \"tigris.dev\") ||\n\t\tstrings.Contains(host, \"t3.storage.dev\") ||\n\t\tstrings.Contains(host, \".supabase.co\") ||\n\t\tstrings.HasSuffix(host, \".your-objectstorage.com\") ||\n\t\tstrings.HasSuffix(host, \".googleapis.com\") {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// IsLocalEndpoint returns true if the endpoint appears to be a local development\n// endpoint (localhost, 127.0.0.1, or private network addresses).\n// These endpoints typically use HTTP instead of HTTPS.\nfunc IsLocalEndpoint(endpoint string) bool {\n\tu, err := parseEndpoint(endpoint)\n\tif err != nil {\n\t\treturn false\n\t}\n\thost := u.Hostname()\n\t// Check for common local/development hostnames\n\treturn host == \"localhost\" ||\n\t\thost == \"127.0.0.1\" ||\n\t\tstrings.HasPrefix(host, \"192.168.\") ||\n\t\tstrings.HasPrefix(host, \"10.\") ||\n\t\tstrings.HasPrefix(host, \"172.16.\") ||\n\t\tstrings.HasPrefix(host, \"172.17.\") ||\n\t\tstrings.HasPrefix(host, \"172.18.\") ||\n\t\tstrings.HasPrefix(host, \"172.19.\") ||\n\t\tstrings.HasPrefix(host, \"172.2\") || // 172.20-172.29\n\t\tstrings.HasPrefix(host, \"172.30.\") ||\n\t\tstrings.HasPrefix(host, \"172.31.\") ||\n\t\tstrings.HasSuffix(host, \".local\") ||\n\t\tstrings.HasSuffix(host, \".localhost\")\n}\n\n// EnsureEndpointScheme ensures an endpoint has an HTTP(S) scheme.\n// For local endpoints (localhost, private IPs), it defaults to http://.\n// For all other endpoints (cloud providers), it defaults to https://.\n// Returns the endpoint with scheme and a boolean indicating if a scheme was added.\nfunc EnsureEndpointScheme(endpoint string) (string, bool) {\n\tif endpoint == \"\" {\n\t\treturn \"\", false\n\t}\n\tif strings.HasPrefix(endpoint, \"http://\") || strings.HasPrefix(endpoint, \"https://\") {\n\t\treturn endpoint, false\n\t}\n\t// Default to HTTP for local development endpoints, HTTPS for everything else\n\tif IsLocalEndpoint(endpoint) {\n\t\treturn \"http://\" + endpoint, true\n\t}\n\treturn \"https://\" + endpoint, true\n}\n\nfunc parseEndpoint(endpoint string) (*url.URL, error) {\n\tendpoint = strings.TrimSpace(endpoint)\n\tif !strings.HasPrefix(strings.ToLower(endpoint), \"http://\") \u0026\u0026 !strings.HasPrefix(strings.ToLower(endpoint), \"https://\") {\n\t\tendpoint = \"//\" + endpoint\n\t}\n\tu, err := url.Parse(endpoint)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif u.User != nil {\n\t\treturn nil, fmt.Errorf(\"endpoint must not contain user information\")\n\t}\n\tif u.Hostname() == \"\" {\n\t\treturn nil, fmt.Errorf(\"endpoint hostname required\")\n\t}\n\tu.Host = strings.ToLower(u.Host)\n\treturn u, nil\n}\n\n// IsURL returns true if s appears to be a URL (has a scheme).\nvar isURLRegex = regexp.MustCompile(`^\\w+:\\/\\/`)\n\nfunc IsURL(s string) bool {\n\treturn isURLRegex.MatchString(s)\n}\n","imports":[{"name":"fmt","path":"fmt","span":{"start":[4,1],"end":[4,7],"bytes":[29,35]}},{"name":"url","path":"net/url","span":{"start":[5,1],"end":[5,11],"bytes":[36,46]}},{"name":"path","path":"path","span":{"start":[6,1],"end":[6,8],"bytes":[47,54]}},{"name":"regexp","path":"regexp","span":{"start":[7,1],"end":[7,10],"bytes":[55,64]}},{"name":"strconv","path":"strconv","span":{"start":[8,1],"end":[8,11],"bytes":[65,75]}},{"name":"strings","path":"strings","span":{"start":[9,1],"end":[9,11],"bytes":[76,86]}},{"name":"sync","path":"sync","span":{"start":[10,1],"end":[10,8],"bytes":[87,94]}}],"types":{"ReplicaClientFactory":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ReplicaClientFactory","kind":"struct","span":{"start":[15,1],"end":[15,126],"bytes":[270,395]},"callables":{}}},"functions":{"github.com/benbjohnson/litestream.BoolQueryValue":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue","kind":"function","span":{"start":[192,1],"end":[209,2],"bytes":[5585,5988]},"signature":"github.com/benbjohnson/litestream.BoolQueryValue","parameters":[{"name":"query","type":"net/url.Values","span":{"start":[192,1],"end":[192,78],"bytes":[5585,5662]}},{"name":"keys","type":"[]string","span":{"start":[192,1],"end":[192,78],"bytes":[5585,5662]},"is_variadic":true}],"return_type":"(bool, bool)","metrics":{"cyclomatic":8},"body":{"197:13":{"kind":"call","span":{"start":[197,13],"end":[197,27],"bytes":[5747,5761]},"callee":null},"198:11":{"kind":"call","span":{"start":[198,11],"end":[198,31],"bytes":[5785,5805]},"callee":null}}},"github.com/benbjohnson/litestream.CleanReplicaURLPath":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.CleanReplicaURLPath","kind":"function","span":{"start":[169,1],"end":[179,2],"bytes":[5038,5240]},"signature":"github.com/benbjohnson/litestream.CleanReplicaURLPath","parameters":[{"name":"p","type":"string","span":{"start":[169,1],"end":[169,44],"bytes":[5038,5081]}}],"return_type":"string","metrics":{"cyclomatic":3},"body":{"173:13":{"kind":"call","span":{"start":[173,13],"end":[173,32],"bytes":[5123,5142]},"callee":null},"174:12":{"kind":"call","span":{"start":[174,12],"end":[174,44],"bytes":[5154,5186]},"callee":null}}},"github.com/benbjohnson/litestream.EnsureEndpointScheme":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme","kind":"function","span":{"start":[402,1],"end":[414,2],"bytes":[11737,12143]},"signature":"github.com/benbjohnson/litestream.EnsureEndpointScheme","parameters":[{"name":"endpoint","type":"string","span":{"start":[402,1],"end":[402,60],"bytes":[11737,11796]}}],"return_type":"(string, bool)","metrics":{"cyclomatic":4},"body":{"406:47":{"kind":"call","span":{"start":[406,47],"end":[406,86],"bytes":[11886,11925]},"callee":null},"406:5":{"kind":"call","span":{"start":[406,5],"end":[406,43],"bytes":[11844,11882]},"callee":null},"410:5":{"kind":"call","span":{"start":[410,5],"end":[410,30],"bytes":[12039,12064]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsLocalEndpoint"}}},"github.com/benbjohnson/litestream.IntQueryValue":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue","kind":"function","span":{"start":[214,1],"end":[228,2],"bytes":[6206,6653]},"signature":"github.com/benbjohnson/litestream.IntQueryValue","parameters":[{"name":"query","type":"net/url.Values","span":{"start":[214,1],"end":[214,89],"bytes":[6206,6294]}},{"name":"keys","type":"[]string","span":{"start":[214,1],"end":[214,89],"bytes":[6206,6294]},"is_variadic":true}],"return_type":"(int64, bool, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"219:13":{"kind":"call","span":{"start":[219,13],"end":[219,27],"bytes":[6380,6394]},"callee":null},"220:14":{"kind":"call","span":{"start":[220,14],"end":[220,43],"bytes":[6421,6450]},"callee":null},"222:22":{"kind":"call","span":{"start":[222,22],"end":[222,115],"bytes":[6501,6594]},"callee":null}}},"github.com/benbjohnson/litestream.IsBackblazeEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsBackblazeEndpoint","kind":"function","span":{"start":[296,1],"end":[303,2],"bytes":[8359,8553]},"signature":"github.com/benbjohnson/litestream.IsBackblazeEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[296,1],"end":[296,49],"bytes":[8359,8407]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"297:12":{"kind":"call","span":{"start":[297,12],"end":[297,35],"bytes":[8419,8442]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"301:10":{"kind":"call","span":{"start":[301,10],"end":[301,22],"bytes":[8487,8499]},"callee":null},"302:9":{"kind":"call","span":{"start":[302,9],"end":[302,52],"bytes":[8508,8551]},"callee":null}}},"github.com/benbjohnson/litestream.IsCloudflareR2Endpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsCloudflareR2Endpoint","kind":"function","span":{"start":[326,1],"end":[333,2],"bytes":[9137,9343]},"signature":"github.com/benbjohnson/litestream.IsCloudflareR2Endpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[326,1],"end":[326,52],"bytes":[9137,9188]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"327:12":{"kind":"call","span":{"start":[327,12],"end":[327,35],"bytes":[9200,9223]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"331:10":{"kind":"call","span":{"start":[331,10],"end":[331,22],"bytes":[9268,9280]},"callee":null},"332:9":{"kind":"call","span":{"start":[332,9],"end":[332,61],"bytes":[9289,9341]},"callee":null}}},"github.com/benbjohnson/litestream.IsDigitalOceanEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsDigitalOceanEndpoint","kind":"function","span":{"start":[286,1],"end":[293,2],"bytes":[8084,8288]},"signature":"github.com/benbjohnson/litestream.IsDigitalOceanEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[286,1],"end":[286,52],"bytes":[8084,8135]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"287:12":{"kind":"call","span":{"start":[287,12],"end":[287,35],"bytes":[8147,8170]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"291:10":{"kind":"call","span":{"start":[291,10],"end":[291,22],"bytes":[8215,8227]},"callee":null},"292:9":{"kind":"call","span":{"start":[292,9],"end":[292,59],"bytes":[8236,8286]},"callee":null}}},"github.com/benbjohnson/litestream.IsFilebaseEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsFilebaseEndpoint","kind":"function","span":{"start":[306,1],"end":[313,2],"bytes":[8619,8794]},"signature":"github.com/benbjohnson/litestream.IsFilebaseEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[306,1],"end":[306,48],"bytes":[8619,8666]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"307:12":{"kind":"call","span":{"start":[307,12],"end":[307,35],"bytes":[8678,8701]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"311:10":{"kind":"call","span":{"start":[311,10],"end":[311,22],"bytes":[8746,8758]},"callee":null}}},"github.com/benbjohnson/litestream.IsGoogleCloudStorageEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsGoogleCloudStorageEndpoint","kind":"function","span":{"start":[251,1],"end":[283,2],"bytes":[7324,8002]},"signature":"github.com/benbjohnson/litestream.IsGoogleCloudStorageEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[251,1],"end":[251,58],"bytes":[7324,7381]}}],"return_type":"bool","metrics":{"cyclomatic":10},"body":{"252:12":{"kind":"call","span":{"start":[252,12],"end":[252,35],"bytes":[7393,7416]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"256:10":{"kind":"call","span":{"start":[256,10],"end":[256,22],"bytes":[7461,7473]},"callee":null},"257:9":{"kind":"call","span":{"start":[257,9],"end":[257,38],"bytes":[7482,7511]},"callee":null},"259:12":{"kind":"call","span":{"start":[259,12],"end":[259,36],"bytes":[7524,7548]},"callee":null},"260:5":{"kind":"call","span":{"start":[260,5],"end":[260,16],"bytes":[7553,7564]},"callee":null},"261:10":{"kind":"call","span":{"start":[261,10],"end":[261,21],"bytes":[7581,7592]},"callee":null},"262:10":{"kind":"call","span":{"start":[262,10],"end":[262,21],"bytes":[7624,7635]},"callee":null},"270:5":{"kind":"call","span":{"start":[270,5],"end":[270,16],"bytes":[7746,7757]},"callee":null},"271:27":{"kind":"call","span":{"start":[271,27],"end":[271,56],"bytes":[7790,7819]},"callee":null},"277:26":{"kind":"call","span":{"start":[277,26],"end":[277,55],"bytes":[7905,7934]},"callee":null}}},"github.com/benbjohnson/litestream.IsHetznerEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsHetznerEndpoint","kind":"function","span":{"start":[231,1],"end":[238,2],"bytes":[6740,6939]},"signature":"github.com/benbjohnson/litestream.IsHetznerEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[231,1],"end":[231,47],"bytes":[6740,6786]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"232:12":{"kind":"call","span":{"start":[232,12],"end":[232,35],"bytes":[6798,6821]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"236:10":{"kind":"call","span":{"start":[236,10],"end":[236,22],"bytes":[6866,6878]},"callee":null},"237:9":{"kind":"call","span":{"start":[237,9],"end":[237,59],"bytes":[6887,6937]},"callee":null}}},"github.com/benbjohnson/litestream.IsLocalEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsLocalEndpoint","kind":"function","span":{"start":[376,1],"end":[396,2],"bytes":[10746,11440]},"signature":"github.com/benbjohnson/litestream.IsLocalEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[376,1],"end":[376,45],"bytes":[10746,10790]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"377:12":{"kind":"call","span":{"start":[377,12],"end":[377,35],"bytes":[10802,10825]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"381:10":{"kind":"call","span":{"start":[381,10],"end":[381,22],"bytes":[10870,10882]},"callee":null},"385:3":{"kind":"call","span":{"start":[385,3],"end":[385,38],"bytes":[10990,11025]},"callee":null},"386:3":{"kind":"call","span":{"start":[386,3],"end":[386,33],"bytes":[11031,11061]},"callee":null},"387:3":{"kind":"call","span":{"start":[387,3],"end":[387,37],"bytes":[11067,11101]},"callee":null},"388:3":{"kind":"call","span":{"start":[388,3],"end":[388,37],"bytes":[11107,11141]},"callee":null},"389:3":{"kind":"call","span":{"start":[389,3],"end":[389,37],"bytes":[11147,11181]},"callee":null},"390:3":{"kind":"call","span":{"start":[390,3],"end":[390,37],"bytes":[11187,11221]},"callee":null},"391:3":{"kind":"call","span":{"start":[391,3],"end":[391,35],"bytes":[11227,11259]},"callee":null},"392:3":{"kind":"call","span":{"start":[392,3],"end":[392,37],"bytes":[11282,11316]},"callee":null},"393:3":{"kind":"call","span":{"start":[393,3],"end":[393,37],"bytes":[11322,11356]},"callee":null},"394:3":{"kind":"call","span":{"start":[394,3],"end":[394,36],"bytes":[11362,11395]},"callee":null},"395:3":{"kind":"call","span":{"start":[395,3],"end":[395,40],"bytes":[11401,11438]},"callee":null}}},"github.com/benbjohnson/litestream.IsMinIOEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsMinIOEndpoint","kind":"function","span":{"start":[347,1],"end":[371,2],"bytes":[9768,10540]},"signature":"github.com/benbjohnson/litestream.IsMinIOEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[347,1],"end":[347,45],"bytes":[9768,9812]}}],"return_type":"bool","metrics":{"cyclomatic":4},"body":{"348:12":{"kind":"call","span":{"start":[348,12],"end":[348,35],"bytes":[9824,9847]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"352:10":{"kind":"call","span":{"start":[352,10],"end":[352,22],"bytes":[9892,9904]},"callee":null},"353:5":{"kind":"call","span":{"start":[353,5],"end":[353,13],"bytes":[9909,9917]},"callee":null},"357:5":{"kind":"call","span":{"start":[357,5],"end":[357,45],"bytes":[9982,10022]},"callee":null},"358:3":{"kind":"call","span":{"start":[358,3],"end":[358,52],"bytes":[10028,10077]},"callee":null},"359:3":{"kind":"call","span":{"start":[359,3],"end":[359,45],"bytes":[10083,10125]},"callee":null},"360:3":{"kind":"call","span":{"start":[360,3],"end":[360,42],"bytes":[10131,10170]},"callee":null},"361:3":{"kind":"call","span":{"start":[361,3],"end":[361,39],"bytes":[10176,10212]},"callee":null},"362:3":{"kind":"call","span":{"start":[362,3],"end":[362,54],"bytes":[10218,10269]},"callee":null},"363:3":{"kind":"call","span":{"start":[363,3],"end":[363,39],"bytes":[10275,10311]},"callee":null},"364:3":{"kind":"call","span":{"start":[364,3],"end":[364,43],"bytes":[10317,10357]},"callee":null},"365:3":{"kind":"call","span":{"start":[365,3],"end":[365,41],"bytes":[10363,10401]},"callee":null},"366:3":{"kind":"call","span":{"start":[366,3],"end":[366,53],"bytes":[10407,10457]},"callee":null},"367:3":{"kind":"call","span":{"start":[367,3],"end":[367,45],"bytes":[10463,10505]},"callee":null}}},"github.com/benbjohnson/litestream.IsScalewayEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsScalewayEndpoint","kind":"function","span":{"start":[316,1],"end":[323,2],"bytes":[8875,9062]},"signature":"github.com/benbjohnson/litestream.IsScalewayEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[316,1],"end":[316,48],"bytes":[8875,8922]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"317:12":{"kind":"call","span":{"start":[317,12],"end":[317,35],"bytes":[8934,8957]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"321:10":{"kind":"call","span":{"start":[321,10],"end":[321,22],"bytes":[9002,9014]},"callee":null},"322:9":{"kind":"call","span":{"start":[322,9],"end":[322,46],"bytes":[9023,9060]},"callee":null}}},"github.com/benbjohnson/litestream.IsSupabaseEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsSupabaseEndpoint","kind":"function","span":{"start":[336,1],"end":[343,2],"bytes":[9420,9609]},"signature":"github.com/benbjohnson/litestream.IsSupabaseEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[336,1],"end":[336,48],"bytes":[9420,9467]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"337:12":{"kind":"call","span":{"start":[337,12],"end":[337,35],"bytes":[9479,9502]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"341:10":{"kind":"call","span":{"start":[341,10],"end":[341,22],"bytes":[9547,9559]},"callee":null},"342:9":{"kind":"call","span":{"start":[342,9],"end":[342,48],"bytes":[9568,9607]},"callee":null}}},"github.com/benbjohnson/litestream.IsTigrisEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsTigrisEndpoint","kind":"function","span":{"start":[241,1],"end":[248,2],"bytes":[7028,7236]},"signature":"github.com/benbjohnson/litestream.IsTigrisEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[241,1],"end":[241,46],"bytes":[7028,7073]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"242:12":{"kind":"call","span":{"start":[242,12],"end":[242,35],"bytes":[7085,7108]},"callee":null},"246:10":{"kind":"call","span":{"start":[246,10],"end":[246,22],"bytes":[7153,7165]},"callee":null}}},"github.com/benbjohnson/litestream.IsURL":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL","kind":"function","span":{"start":[438,1],"end":[440,2],"bytes":[12808,12871]},"signature":"github.com/benbjohnson/litestream.IsURL","parameters":[{"name":"s","type":"string","span":{"start":[438,1],"end":[438,28],"bytes":[12808,12835]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"439:9":{"kind":"call","span":{"start":[439,9],"end":[439,34],"bytes":[12844,12869]},"callee":null}}},"github.com/benbjohnson/litestream.NewReplicaClientFromURL":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.NewReplicaClientFromURL","kind":"function","span":{"start":[32,1],"end":[53,2],"bytes":[1048,1625]},"signature":"github.com/benbjohnson/litestream.NewReplicaClientFromURL","parameters":[{"name":"rawURL","type":"string","span":{"start":[32,1],"end":[32,69],"bytes":[1048,1116]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"33:49":{"kind":"call","span":{"start":[33,49],"end":[33,81],"bytes":[1165,1197]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery"},"44:2":{"kind":"call","span":{"start":[44,2],"end":[44,34],"bytes":[1359,1391]},"callee":null},"46:2":{"kind":"call","span":{"start":[46,2],"end":[46,36],"bytes":[1447,1481]},"callee":null},"49:15":{"kind":"call","span":{"start":[49,15],"end":[49,71],"bytes":[1507,1563]},"callee":null},"52:9":{"kind":"call","span":{"start":[52,9],"end":[52,56],"bytes":[1576,1623]},"callee":null}}},"github.com/benbjohnson/litestream.ParseReplicaURL":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","kind":"function","span":{"start":[72,1],"end":[80,2],"bytes":[2064,2395]},"signature":"github.com/benbjohnson/litestream.ParseReplicaURL","parameters":[{"name":"s","type":"string","span":{"start":[72,1],"end":[72,75],"bytes":[2064,2138]}}],"return_type":"(string, string, string, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"73:23":{"kind":"call","span":{"start":[73,23],"end":[73,41],"bytes":[2161,2179]},"callee":null},"73:5":{"kind":"call","span":{"start":[73,5],"end":[73,55],"bytes":[2143,2193]},"callee":null},"74:35":{"kind":"call","span":{"start":[74,35],"end":[74,59],"bytes":[2230,2254]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL"},"78:37":{"kind":"call","span":{"start":[78,37],"end":[78,64],"bytes":[2331,2358]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery"}}},"github.com/benbjohnson/litestream.ParseReplicaURLWithQuery":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery","kind":"function","span":{"start":[83,1],"end":[108,2],"bytes":[2489,3352]},"signature":"github.com/benbjohnson/litestream.ParseReplicaURLWithQuery","parameters":[{"name":"s","type":"string","span":{"start":[83,1],"end":[83,126],"bytes":[2489,2614]}}],"return_type":"(string, string, string, net/url.Values, *net/url.Userinfo, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"100:22":{"kind":"call","span":{"start":[100,22],"end":[100,44],"bytes":[3099,3121]},"callee":null},"100:33":{"kind":"call","span":{"start":[100,33],"end":[100,43],"bytes":[3110,3120]},"callee":null},"103:46":{"kind":"call","span":{"start":[103,46],"end":[103,94],"bytes":[3193,3241]},"callee":null},"106:28":{"kind":"call","span":{"start":[106,28],"end":[106,71],"bytes":[3280,3323]},"callee":null},"106:47":{"kind":"call","span":{"start":[106,47],"end":[106,65],"bytes":[3299,3317]},"callee":null},"106:73":{"kind":"call","span":{"start":[106,73],"end":[106,82],"bytes":[3325,3334]},"callee":null},"85:23":{"kind":"call","span":{"start":[85,23],"end":[85,41],"bytes":[2713,2731]},"callee":null},"85:5":{"kind":"call","span":{"start":[85,5],"end":[85,55],"bytes":[2695,2745]},"callee":null},"86:40":{"kind":"call","span":{"start":[86,40],"end":[86,64],"bytes":[2787,2811]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL"},"90:12":{"kind":"call","span":{"start":[90,12],"end":[90,24],"bytes":[2875,2887]},"callee":null}}},"github.com/benbjohnson/litestream.RegionFromS3ARN":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegionFromS3ARN","kind":"function","span":{"start":[182,1],"end":[188,2],"bytes":[5297,5432]},"signature":"github.com/benbjohnson/litestream.RegionFromS3ARN","parameters":[{"name":"arn","type":"string","span":{"start":[182,1],"end":[182,42],"bytes":[5297,5338]}}],"return_type":"string","metrics":{"cyclomatic":2},"body":{"183:11":{"kind":"call","span":{"start":[183,11],"end":[183,38],"bytes":[5349,5376]},"callee":null},"184:5":{"kind":"call","span":{"start":[184,5],"end":[184,15],"bytes":[5381,5391]},"callee":null}}},"github.com/benbjohnson/litestream.RegisterReplicaClientFactory":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","kind":"function","span":{"start":[24,1],"end":[28,2],"bytes":[696,894]},"signature":"github.com/benbjohnson/litestream.RegisterReplicaClientFactory","parameters":[{"name":"scheme","type":"string","span":{"start":[24,1],"end":[24,81],"bytes":[696,776]}},{"name":"factory","type":"github.com/benbjohnson/litestream.ReplicaClientFactory","span":{"start":[24,1],"end":[24,81],"bytes":[696,776]}}],"metrics":{"cyclomatic":1},"body":{"25:2":{"kind":"call","span":{"start":[25,2],"end":[25,33],"bytes":[778,809]},"callee":null},"26:8":{"kind":"call","span":{"start":[26,8],"end":[26,41],"bytes":[817,850]},"callee":null}}},"github.com/benbjohnson/litestream.ReplicaTypeFromURL":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ReplicaTypeFromURL","kind":"function","span":{"start":[57,1],"end":[69,2],"bytes":[1757,1982]},"signature":"github.com/benbjohnson/litestream.ReplicaTypeFromURL","parameters":[{"name":"rawURL","type":"string","span":{"start":[57,1],"end":[57,48],"bytes":[1757,1804]}}],"return_type":"string","metrics":{"cyclomatic":4},"body":{"58:6":{"kind":"call","span":{"start":[58,6],"end":[58,19],"bytes":[1810,1823]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL"},"61:21":{"kind":"call","span":{"start":[61,21],"end":[61,44],"bytes":[1861,1884]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL"}}},"github.com/benbjohnson/litestream.parseEndpoint":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","kind":"function","span":{"start":[416,1],"end":[433,2],"bytes":[12145,12693]},"signature":"github.com/benbjohnson/litestream.parseEndpoint","parameters":[{"name":"endpoint","type":"string","span":{"start":[416,1],"end":[416,56],"bytes":[12145,12200]}}],"return_type":"(*net/url.URL, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"417:13":{"kind":"call","span":{"start":[417,13],"end":[417,40],"bytes":[12213,12240]},"callee":null},"418:24":{"kind":"call","span":{"start":[418,24],"end":[418,49],"bytes":[12264,12289]},"callee":null},"418:6":{"kind":"call","span":{"start":[418,6],"end":[418,61],"bytes":[12246,12301]},"callee":null},"418:66":{"kind":"call","span":{"start":[418,66],"end":[418,122],"bytes":[12306,12362]},"callee":null},"418:84":{"kind":"call","span":{"start":[418,84],"end":[418,109],"bytes":[12324,12349]},"callee":null},"421:12":{"kind":"call","span":{"start":[421,12],"end":[421,31],"bytes":[12408,12427]},"callee":null},"426:15":{"kind":"call","span":{"start":[426,15],"end":[426,71],"bytes":[12500,12556]},"callee":null},"428:5":{"kind":"call","span":{"start":[428,5],"end":[428,17],"bytes":[12564,12576]},"callee":null},"429:15":{"kind":"call","span":{"start":[429,15],"end":[429,55],"bytes":[12599,12639]},"callee":null},"431:11":{"kind":"call","span":{"start":[431,11],"end":[431,34],"bytes":[12653,12676]},"callee":null}}},"github.com/benbjohnson/litestream.parseS3AccessPointURL":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL","kind":"function","span":{"start":[111,1],"end":[140,2],"bytes":[3425,4260]},"signature":"github.com/benbjohnson/litestream.parseS3AccessPointURL","parameters":[{"name":"s","type":"string","span":{"start":[111,1],"end":[111,99],"bytes":[3425,3523]}}],"return_type":"(string, string, string, net/url.Values, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"113:24":{"kind":"call","span":{"start":[113,24],"end":[113,42],"bytes":[3571,3589]},"callee":null},"113:6":{"kind":"call","span":{"start":[113,6],"end":[113,51],"bytes":[3553,3598]},"callee":null},"114:27":{"kind":"call","span":{"start":[114,27],"end":[114,75],"bytes":[3627,3675]},"callee":null},"117:19":{"kind":"call","span":{"start":[117,19],"end":[117,30],"bytes":[3698,3709]},"callee":null},"121:12":{"kind":"call","span":{"start":[121,12],"end":[121,47],"bytes":[3783,3818]},"callee":null},"126:22":{"kind":"call","span":{"start":[126,22],"end":[126,56],"bytes":[3924,3958]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.splitS3AccessPointARN"},"133:16":{"kind":"call","span":{"start":[133,16],"end":[133,40],"bytes":[4080,4104]},"callee":null},"135:28":{"kind":"call","span":{"start":[135,28],"end":[135,69],"bytes":[4150,4191]},"callee":null},"139:23":{"kind":"call","span":{"start":[139,23],"end":[139,47],"bytes":[4222,4246]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.CleanReplicaURLPath"}}},"github.com/benbjohnson/litestream.splitS3AccessPointARN":{"id":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.splitS3AccessPointARN","kind":"function","span":{"start":[143,1],"end":[166,2],"bytes":[4349,4967]},"signature":"github.com/benbjohnson/litestream.splitS3AccessPointARN","parameters":[{"name":"s","type":"string","span":{"start":[143,1],"end":[143,71],"bytes":[4349,4419]}}],"return_type":"(string, string, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"144:11":{"kind":"call","span":{"start":[144,11],"end":[144,29],"bytes":[4430,4448]},"callee":null},"146:9":{"kind":"call","span":{"start":[146,9],"end":[146,37],"bytes":[4489,4517]},"callee":null},"148:18":{"kind":"call","span":{"start":[148,18],"end":[148,66],"bytes":[4551,4599]},"callee":null},"151:21":{"kind":"call","span":{"start":[151,21],"end":[151,32],"bytes":[4624,4635]},"callee":null},"152:18":{"kind":"call","span":{"start":[152,18],"end":[152,24],"bytes":[4653,4659]},"callee":null},"153:18":{"kind":"call","span":{"start":[153,18],"end":[153,66],"bytes":[4679,4727]},"callee":null},"157:14":{"kind":"call","span":{"start":[157,14],"end":[157,47],"bytes":[4773,4806]},"callee":null}}}},"content_hash":"3318488c0af38c6a7bbfc5a90fdc41b5a46c6c930a36298f5a909e5a1976d854"},"s3/leaser.go":{"id":"can://go/litestream/s3/leaser.go","kind":"module","span":{"start":[1,1],"end":[306,1],"bytes":[0,6926]},"package":"s3","source":"package s3\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/service/s3\"\n\t\"github.com/aws/aws-sdk-go-v2/service/s3/types\"\n\t\"github.com/aws/smithy-go\"\n\n\t\"github.com/benbjohnson/litestream\"\n)\n\nconst (\n\tDefaultLeaseTTL = 30 * time.Second\n\tDefaultLeasePath = \"lock.json\"\n\tLeaserType = \"s3\"\n)\n\nvar (\n\t_ litestream.Leaser = (*Leaser)(nil)\n\n\tErrLeaseRequired = errors.New(\"lease required\")\n\tErrLeaseETagRequired = errors.New(\"lease etag required\")\n\tErrLeaseAlreadyReleased = errors.New(\"lease already released\")\n)\n\n// S3API is the interface for S3 operations needed by Leaser.\ntype S3API interface {\n\tGetObject(ctx context.Context, params *s3.GetObjectInput, optFns ...func(*s3.Options)) (*s3.GetObjectOutput, error)\n\tPutObject(ctx context.Context, params *s3.PutObjectInput, optFns ...func(*s3.Options)) (*s3.PutObjectOutput, error)\n\tDeleteObject(ctx context.Context, params *s3.DeleteObjectInput, optFns ...func(*s3.Options)) (*s3.DeleteObjectOutput, error)\n}\n\ntype Leaser struct {\n\ts3 S3API\n\tlogger *slog.Logger\n\n\tBucket string\n\tPath string\n\tTTL time.Duration\n\tOwner string\n}\n\nfunc NewLeaser() *Leaser {\n\towner, _ := os.Hostname()\n\tif owner == \"\" {\n\t\towner = fmt.Sprintf(\"pid-%d\", os.Getpid())\n\t} else {\n\t\towner = fmt.Sprintf(\"%s:%d\", owner, os.Getpid())\n\t}\n\n\treturn \u0026Leaser{\n\t\tlogger: slog.Default().WithGroup(\"s3-leaser\"),\n\t\tTTL: DefaultLeaseTTL,\n\t\tOwner: owner,\n\t}\n}\n\nfunc (l *Leaser) SetLogger(logger *slog.Logger) {\n\tl.logger = logger.WithGroup(\"s3-leaser\")\n}\n\nfunc (l *Leaser) Client() S3API {\n\treturn l.s3\n}\n\nfunc (l *Leaser) SetClient(client S3API) {\n\tl.s3 = client\n}\n\nfunc (l *Leaser) Type() string {\n\treturn LeaserType\n}\n\nfunc (l *Leaser) lockKey() string {\n\tif l.Path == \"\" {\n\t\treturn DefaultLeasePath\n\t}\n\treturn l.Path + \"/\" + DefaultLeasePath\n}\n\nfunc (l *Leaser) AcquireLease(ctx context.Context) (*litestream.Lease, error) {\n\texisting, etag, err := l.readLease(ctx)\n\tif err != nil \u0026\u0026 !errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"read existing lease: %w\", err)\n\t}\n\n\tif existing != nil \u0026\u0026 !existing.IsExpired() {\n\t\treturn nil, \u0026litestream.LeaseExistsError{\n\t\t\tOwner: existing.Owner,\n\t\t\tExpiresAt: existing.ExpiresAt,\n\t\t}\n\t}\n\n\tvar generation int64 = 1\n\tif existing != nil {\n\t\tgeneration = existing.Generation + 1\n\t}\n\n\tnewLease := \u0026litestream.Lease{\n\t\tGeneration: generation,\n\t\tExpiresAt: time.Now().Add(l.TTL),\n\t\tOwner: l.Owner,\n\t}\n\n\tnewETag, err := l.writeLease(ctx, newLease, etag)\n\tif err != nil {\n\t\tvar leaseErr *litestream.LeaseExistsError\n\t\tif errors.As(err, \u0026leaseErr) {\n\t\t\tif current, _, readErr := l.readLease(ctx); readErr == nil \u0026\u0026 current != nil {\n\t\t\t\treturn nil, \u0026litestream.LeaseExistsError{\n\t\t\t\t\tOwner: current.Owner,\n\t\t\t\t\tExpiresAt: current.ExpiresAt,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tnewLease.ETag = newETag\n\tl.logger.Debug(\"lease acquired\",\n\t\t\"generation\", newLease.Generation,\n\t\t\"owner\", newLease.Owner,\n\t\t\"expires_at\", newLease.ExpiresAt,\n\t\t\"etag\", newLease.ETag)\n\n\treturn newLease, nil\n}\n\nfunc (l *Leaser) RenewLease(ctx context.Context, lease *litestream.Lease) (*litestream.Lease, error) {\n\tif lease == nil {\n\t\treturn nil, ErrLeaseRequired\n\t}\n\tif lease.ETag == \"\" {\n\t\treturn nil, ErrLeaseETagRequired\n\t}\n\n\tnewLease := \u0026litestream.Lease{\n\t\tGeneration: lease.Generation,\n\t\tExpiresAt: time.Now().Add(l.TTL),\n\t\tOwner: l.Owner,\n\t}\n\n\tnewETag, err := l.writeLease(ctx, newLease, lease.ETag)\n\tif err != nil {\n\t\tvar leaseErr *litestream.LeaseExistsError\n\t\tif errors.As(err, \u0026leaseErr) {\n\t\t\treturn nil, litestream.ErrLeaseNotHeld\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tnewLease.ETag = newETag\n\tl.logger.Debug(\"lease renewed\",\n\t\t\"generation\", newLease.Generation,\n\t\t\"owner\", newLease.Owner,\n\t\t\"expires_at\", newLease.ExpiresAt,\n\t\t\"etag\", newLease.ETag)\n\n\treturn newLease, nil\n}\n\nfunc (l *Leaser) ReleaseLease(ctx context.Context, lease *litestream.Lease) error {\n\tif lease == nil {\n\t\treturn ErrLeaseRequired\n\t}\n\tif lease.ETag == \"\" {\n\t\treturn ErrLeaseETagRequired\n\t}\n\n\tkey := l.lockKey()\n\t_, err := l.s3.DeleteObject(ctx, \u0026s3.DeleteObjectInput{\n\t\tBucket: aws.String(l.Bucket),\n\t\tKey: aws.String(key),\n\t\tIfMatch: aws.String(lease.ETag),\n\t})\n\tif err != nil {\n\t\tif isNotExists(err) || isNotFoundError(err) {\n\t\t\treturn ErrLeaseAlreadyReleased\n\t\t}\n\t\tif isPreconditionFailed(err) {\n\t\t\treturn litestream.ErrLeaseNotHeld\n\t\t}\n\t\treturn fmt.Errorf(\"delete lease: %w\", err)\n\t}\n\n\tl.logger.Debug(\"lease released\",\n\t\t\"generation\", lease.Generation,\n\t\t\"owner\", lease.Owner)\n\n\treturn nil\n}\n\nfunc (l *Leaser) readLease(ctx context.Context) (*litestream.Lease, string, error) {\n\tkey := l.lockKey()\n\n\tout, err := l.s3.GetObject(ctx, \u0026s3.GetObjectInput{\n\t\tBucket: aws.String(l.Bucket),\n\t\tKey: aws.String(key),\n\t})\n\tif err != nil {\n\t\tif isNotExists(err) || isNotFoundError(err) {\n\t\t\treturn nil, \"\", os.ErrNotExist\n\t\t}\n\t\treturn nil, \"\", fmt.Errorf(\"get lock file: %w\", err)\n\t}\n\tdefer out.Body.Close()\n\n\tvar lease litestream.Lease\n\tif err := json.NewDecoder(out.Body).Decode(\u0026lease); err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"decode lock file: %w\", err)\n\t}\n\n\tetag := \"\"\n\tif out.ETag != nil {\n\t\tetag = *out.ETag\n\t}\n\tlease.ETag = etag\n\n\treturn \u0026lease, etag, nil\n}\n\nfunc (l *Leaser) writeLease(ctx context.Context, lease *litestream.Lease, etag string) (string, error) {\n\tkey := l.lockKey()\n\n\tdata, err := json.Marshal(lease)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"marshal lock file: %w\", err)\n\t}\n\n\tinput := \u0026s3.PutObjectInput{\n\t\tBucket: aws.String(l.Bucket),\n\t\tKey: aws.String(key),\n\t\tBody: bytes.NewReader(data),\n\t\tContentType: aws.String(\"application/json\"),\n\t}\n\n\tif etag == \"\" {\n\t\tinput.IfNoneMatch = aws.String(\"*\")\n\t} else {\n\t\tinput.IfMatch = aws.String(etag)\n\t}\n\n\tout, err := l.s3.PutObject(ctx, input)\n\tif err != nil {\n\t\tif isPreconditionFailed(err) {\n\t\t\treturn \"\", \u0026litestream.LeaseExistsError{}\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"put lock file: %w\", err)\n\t}\n\n\tnewETag := \"\"\n\tif out.ETag != nil {\n\t\tnewETag = *out.ETag\n\t}\n\n\treturn newETag, nil\n}\n\nfunc isPreconditionFailed(err error) bool {\n\tvar apiErr smithy.APIError\n\tif errors.As(err, \u0026apiErr) {\n\t\tcode := apiErr.ErrorCode()\n\t\treturn code == \"PreconditionFailed\" || code == \"412\"\n\t}\n\n\tvar respErr *smithy.OperationError\n\tif errors.As(err, \u0026respErr) {\n\t\tif httpErr, ok := respErr.Err.(interface{ HTTPStatusCode() int }); ok {\n\t\t\treturn httpErr.HTTPStatusCode() == 412\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc isNotFoundError(err error) bool {\n\tvar apiErr smithy.APIError\n\tif errors.As(err, \u0026apiErr) {\n\t\tcode := apiErr.ErrorCode()\n\t\treturn code == \"NoSuchKey\" || code == \"NotFound\" || code == \"404\"\n\t}\n\n\tvar noSuchKey *types.NoSuchKey\n\tif errors.As(err, \u0026noSuchKey) {\n\t\treturn true\n\t}\n\n\tvar respErr *smithy.OperationError\n\tif errors.As(err, \u0026respErr) {\n\t\tif httpErr, ok := respErr.Err.(interface{ HTTPStatusCode() int }); ok {\n\t\t\treturn httpErr.HTTPStatusCode() == 404\n\t\t}\n\t}\n\n\treturn false\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[21,29]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[30,40]}},{"name":"json","path":"encoding/json","span":{"start":[6,1],"end":[6,17],"bytes":[41,57]}},{"name":"errors","path":"errors","span":{"start":[7,1],"end":[7,10],"bytes":[58,67]}},{"name":"fmt","path":"fmt","span":{"start":[8,1],"end":[8,7],"bytes":[68,74]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[75,86]}},{"name":"os","path":"os","span":{"start":[10,1],"end":[10,6],"bytes":[87,92]}},{"name":"time","path":"time","span":{"start":[11,1],"end":[11,8],"bytes":[93,100]}},{"name":"aws","path":"github.com/aws/aws-sdk-go-v2/aws","span":{"start":[13,1],"end":[13,36],"bytes":[102,137]}},{"name":"s3","path":"github.com/aws/aws-sdk-go-v2/service/s3","span":{"start":[14,1],"end":[14,43],"bytes":[138,180]}},{"name":"types","path":"github.com/aws/aws-sdk-go-v2/service/s3/types","span":{"start":[15,1],"end":[15,49],"bytes":[181,229]}},{"name":"smithy-go","path":"github.com/aws/smithy-go","span":{"start":[16,1],"end":[16,28],"bytes":[230,257]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[18,1],"end":[18,37],"bytes":[259,295]}}],"types":{"Leaser":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser","kind":"struct","span":{"start":[42,1],"end":[50,2],"bytes":[1081,1206]},"callables":{"github.com/benbjohnson/litestream/s3.Leaser.AcquireLease":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.AcquireLease","kind":"method","span":{"start":[90,1],"end":[136,2],"bytes":[1894,3088]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.AcquireLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[90,1],"end":[90,80],"bytes":[1894,1973]}}],"return_type":"(*github.com/benbjohnson/litestream.Lease, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"110:15":{"kind":"call","span":{"start":[110,15],"end":[110,25],"bytes":[2454,2464]},"callee":null},"114:18":{"kind":"call","span":{"start":[114,18],"end":[114,51],"bytes":[2521,2554]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease"},"117:6":{"kind":"call","span":{"start":[117,6],"end":[117,31],"bytes":[2621,2646]},"callee":null},"118:30":{"kind":"call","span":{"start":[118,30],"end":[118,46],"bytes":[2678,2694]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease"},"129:2":{"kind":"call","span":{"start":[129,2],"end":[133,25],"bytes":[2906,3063]},"callee":null},"91:25":{"kind":"call","span":{"start":[91,25],"end":[91,41],"bytes":[1998,2014]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease"},"92:20":{"kind":"call","span":{"start":[92,20],"end":[92,50],"bytes":[2034,2064]},"callee":null},"93:15":{"kind":"call","span":{"start":[93,15],"end":[93,57],"bytes":[2081,2123]},"callee":null},"96:25":{"kind":"call","span":{"start":[96,25],"end":[96,45],"bytes":[2152,2172]},"callee":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/github.com/benbjohnson/litestream.Lease.IsExpired"}}},"github.com/benbjohnson/litestream/s3.Leaser.Client":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.Client","kind":"method","span":{"start":[71,1],"end":[73,2],"bytes":[1601,1649]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.Client","parameters":[],"return_type":"github.com/benbjohnson/litestream/s3.S3API","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","kind":"method","span":{"start":[171,1],"end":[200,2],"bytes":[3864,4562]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[171,1],"end":[171,84],"bytes":[3864,3947]}},{"name":"lease","type":"*github.com/benbjohnson/litestream.Lease","span":{"start":[171,1],"end":[171,84],"bytes":[3864,3947]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"179:9":{"kind":"call","span":{"start":[179,9],"end":[179,20],"bytes":[4061,4072]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey"},"180:12":{"kind":"call","span":{"start":[180,12],"end":[184,4],"bytes":[4084,4229]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.DeleteObject"},"181:12":{"kind":"call","span":{"start":[181,12],"end":[181,32],"bytes":[4141,4161]},"callee":null},"182:12":{"kind":"call","span":{"start":[182,12],"end":[182,27],"bytes":[4174,4189]},"callee":null},"183:12":{"kind":"call","span":{"start":[183,12],"end":[183,34],"bytes":[4202,4224]},"callee":null},"186:26":{"kind":"call","span":{"start":[186,26],"end":[186,46],"bytes":[4272,4292]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isNotFoundError"},"186:6":{"kind":"call","span":{"start":[186,6],"end":[186,22],"bytes":[4252,4268]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists"},"189:6":{"kind":"call","span":{"start":[189,6],"end":[189,31],"bytes":[4338,4363]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isPreconditionFailed"},"192:10":{"kind":"call","span":{"start":[192,10],"end":[192,45],"bytes":[4416,4451]},"callee":null},"195:2":{"kind":"call","span":{"start":[195,2],"end":[197,24],"bytes":[4457,4547]},"callee":null}}},"github.com/benbjohnson/litestream/s3.Leaser.RenewLease":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.RenewLease","kind":"method","span":{"start":[138,1],"end":[169,2],"bytes":[3090,3862]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.RenewLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[138,1],"end":[138,103],"bytes":[3090,3192]}},{"name":"lease","type":"*github.com/benbjohnson/litestream.Lease","span":{"start":[138,1],"end":[138,103],"bytes":[3090,3192]}}],"return_type":"(*github.com/benbjohnson/litestream.Lease, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"148:15":{"kind":"call","span":{"start":[148,15],"end":[148,25],"bytes":[3386,3396]},"callee":null},"152:18":{"kind":"call","span":{"start":[152,18],"end":[152,57],"bytes":[3453,3492]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease"},"155:6":{"kind":"call","span":{"start":[155,6],"end":[155,31],"bytes":[3559,3584]},"callee":null},"162:2":{"kind":"call","span":{"start":[162,2],"end":[166,25],"bytes":[3681,3837]},"callee":null}}},"github.com/benbjohnson/litestream/s3.Leaser.SetClient":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.SetClient","kind":"method","span":{"start":[75,1],"end":[77,2],"bytes":[1651,1710]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.SetClient","parameters":[{"name":"client","type":"github.com/benbjohnson/litestream/s3.S3API","span":{"start":[75,1],"end":[75,43],"bytes":[1651,1693]}}],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/s3.Leaser.SetLogger":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.SetLogger","kind":"method","span":{"start":[67,1],"end":[69,2],"bytes":[1506,1599]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[67,1],"end":[67,50],"bytes":[1506,1555]}}],"metrics":{"cyclomatic":1},"body":{"68:13":{"kind":"call","span":{"start":[68,13],"end":[68,42],"bytes":[1568,1597]},"callee":null}}},"github.com/benbjohnson/litestream/s3.Leaser.Type":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.Type","kind":"method","span":{"start":[79,1],"end":[81,2],"bytes":[1712,1765]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/s3.Leaser.lockKey":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey","kind":"method","span":{"start":[83,1],"end":[88,2],"bytes":[1767,1892]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.lockKey","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{}},"github.com/benbjohnson/litestream/s3.Leaser.readLease":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease","kind":"method","span":{"start":[202,1],"end":[229,2],"bytes":[4564,5231]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.readLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[202,1],"end":[202,85],"bytes":[4564,4648]}}],"return_type":"(*github.com/benbjohnson/litestream.Lease, string, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"203:9":{"kind":"call","span":{"start":[203,9],"end":[203,20],"bytes":[4657,4668]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey"},"205:14":{"kind":"call","span":{"start":[205,14],"end":[208,4],"bytes":[4683,4785]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.GetObject"},"206:11":{"kind":"call","span":{"start":[206,11],"end":[206,31],"bytes":[4733,4753]},"callee":null},"207:11":{"kind":"call","span":{"start":[207,11],"end":[207,26],"bytes":[4765,4780]},"callee":null},"210:26":{"kind":"call","span":{"start":[210,26],"end":[210,46],"bytes":[4828,4848]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isNotFoundError"},"210:6":{"kind":"call","span":{"start":[210,6],"end":[210,22],"bytes":[4808,4824]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists"},"213:19":{"kind":"call","span":{"start":[213,19],"end":[213,55],"bytes":[4907,4943]},"callee":null},"215:8":{"kind":"call","span":{"start":[215,8],"end":[215,24],"bytes":[4954,4970]},"callee":null},"218:12":{"kind":"call","span":{"start":[218,12],"end":[218,37],"bytes":[5011,5036]},"callee":null},"219:19":{"kind":"call","span":{"start":[219,19],"end":[219,58],"bytes":[5084,5123]},"callee":null}}},"github.com/benbjohnson/litestream/s3.Leaser.writeLease":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease","kind":"method","span":{"start":[231,1],"end":[266,2],"bytes":[5233,6038]},"signature":"github.com/benbjohnson/litestream/s3.Leaser.writeLease","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[231,1],"end":[231,105],"bytes":[5233,5337]}},{"name":"lease","type":"*github.com/benbjohnson/litestream.Lease","span":{"start":[231,1],"end":[231,105],"bytes":[5233,5337]}},{"name":"etag","type":"string","span":{"start":[231,1],"end":[231,105],"bytes":[5233,5337]}}],"return_type":"(string, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"232:9":{"kind":"call","span":{"start":[232,9],"end":[232,20],"bytes":[5346,5357]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey"},"234:15":{"kind":"call","span":{"start":[234,15],"end":[234,34],"bytes":[5373,5392]},"callee":null},"236:14":{"kind":"call","span":{"start":[236,14],"end":[236,54],"bytes":[5423,5463]},"callee":null},"240:16":{"kind":"call","span":{"start":[240,16],"end":[240,36],"bytes":[5513,5533]},"callee":null},"241:16":{"kind":"call","span":{"start":[241,16],"end":[241,31],"bytes":[5550,5565]},"callee":null},"242:16":{"kind":"call","span":{"start":[242,16],"end":[242,37],"bytes":[5582,5603]},"callee":null},"243:16":{"kind":"call","span":{"start":[243,16],"end":[243,46],"bytes":[5620,5650]},"callee":null},"247:23":{"kind":"call","span":{"start":[247,23],"end":[247,38],"bytes":[5695,5710]},"callee":null},"249:19":{"kind":"call","span":{"start":[249,19],"end":[249,35],"bytes":[5739,5755]},"callee":null},"252:14":{"kind":"call","span":{"start":[252,14],"end":[252,40],"bytes":[5773,5799]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.PutObject"},"254:6":{"kind":"call","span":{"start":[254,6],"end":[254,31],"bytes":[5822,5847]},"callee":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isPreconditionFailed"},"257:14":{"kind":"call","span":{"start":[257,14],"end":[257,50],"bytes":[5912,5948]},"callee":null}}}},"fields":{"Bucket":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/Bucket","kind":"field","type":"string","span":{"start":[46,1],"end":[46,15],"bytes":[1138,1152]}},"Owner":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/Owner","kind":"field","type":"string","span":{"start":[49,1],"end":[49,15],"bytes":[1190,1204]}},"Path":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/Path","kind":"field","type":"string","span":{"start":[47,1],"end":[47,15],"bytes":[1153,1167]}},"TTL":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/TTL","kind":"field","type":"time.Duration","span":{"start":[48,1],"end":[48,22],"bytes":[1168,1189]}},"logger":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[44,1],"end":[44,21],"bytes":[1116,1136]}},"s3":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/s3","kind":"field","type":"github.com/benbjohnson/litestream/s3.S3API","span":{"start":[43,1],"end":[43,14],"bytes":[1102,1115]}}}},"S3API":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API","kind":"interface","span":{"start":[36,1],"end":[40,2],"bytes":[695,1079]},"callables":{"github.com/benbjohnson/litestream/s3.S3API.DeleteObject":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.DeleteObject","kind":"method","span":{"start":[39,1],"end":[39,126],"bytes":[952,1077]},"signature":"github.com/benbjohnson/litestream/s3.S3API.DeleteObject","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[39,1],"end":[39,126],"bytes":[952,1077]}},{"name":"params","type":"*github.com/aws/aws-sdk-go-v2/service/s3.DeleteObjectInput","span":{"start":[39,1],"end":[39,126],"bytes":[952,1077]}},{"name":"optFns","type":"[]func(*github.com/aws/aws-sdk-go-v2/service/s3.Options)","span":{"start":[39,1],"end":[39,126],"bytes":[952,1077]},"is_variadic":true}],"return_type":"(*github.com/aws/aws-sdk-go-v2/service/s3.DeleteObjectOutput, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream/s3.S3API.GetObject":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.GetObject","kind":"method","span":{"start":[37,1],"end":[37,117],"bytes":[718,834]},"signature":"github.com/benbjohnson/litestream/s3.S3API.GetObject","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[37,1],"end":[37,117],"bytes":[718,834]}},{"name":"params","type":"*github.com/aws/aws-sdk-go-v2/service/s3.GetObjectInput","span":{"start":[37,1],"end":[37,117],"bytes":[718,834]}},{"name":"optFns","type":"[]func(*github.com/aws/aws-sdk-go-v2/service/s3.Options)","span":{"start":[37,1],"end":[37,117],"bytes":[718,834]},"is_variadic":true}],"return_type":"(*github.com/aws/aws-sdk-go-v2/service/s3.GetObjectOutput, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream/s3.S3API.PutObject":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.PutObject","kind":"method","span":{"start":[38,1],"end":[38,117],"bytes":[835,951]},"signature":"github.com/benbjohnson/litestream/s3.S3API.PutObject","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[38,1],"end":[38,117],"bytes":[835,951]}},{"name":"params","type":"*github.com/aws/aws-sdk-go-v2/service/s3.PutObjectInput","span":{"start":[38,1],"end":[38,117],"bytes":[835,951]}},{"name":"optFns","type":"[]func(*github.com/aws/aws-sdk-go-v2/service/s3.Options)","span":{"start":[38,1],"end":[38,117],"bytes":[835,951]},"is_variadic":true}],"return_type":"(*github.com/aws/aws-sdk-go-v2/service/s3.PutObjectOutput, error)","error_channel":["error"],"body":{}}}}},"functions":{"github.com/benbjohnson/litestream/s3.NewLeaser":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.NewLeaser","kind":"function","span":{"start":[52,1],"end":[65,2],"bytes":[1208,1504]},"signature":"github.com/benbjohnson/litestream/s3.NewLeaser","parameters":[],"return_type":"*github.com/benbjohnson/litestream/s3.Leaser","metrics":{"cyclomatic":2},"body":{"53:14":{"kind":"call","span":{"start":[53,14],"end":[53,27],"bytes":[1248,1261]},"callee":null},"55:11":{"kind":"call","span":{"start":[55,11],"end":[55,45],"bytes":[1290,1324]},"callee":null},"55:33":{"kind":"call","span":{"start":[55,33],"end":[55,44],"bytes":[1312,1323]},"callee":null},"57:11":{"kind":"call","span":{"start":[57,11],"end":[57,51],"bytes":[1345,1385]},"callee":null},"57:39":{"kind":"call","span":{"start":[57,39],"end":[57,50],"bytes":[1373,1384]},"callee":null},"61:11":{"kind":"call","span":{"start":[61,11],"end":[61,25],"bytes":[1417,1431]},"callee":null}}},"github.com/benbjohnson/litestream/s3.isNotFoundError":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isNotFoundError","kind":"function","span":{"start":[285,1],"end":[305,2],"bytes":[6438,6925]},"signature":"github.com/benbjohnson/litestream/s3.isNotFoundError","parameters":[{"name":"err","type":"error","span":{"start":[285,1],"end":[285,39],"bytes":[6438,6476]}}],"return_type":"bool","metrics":{"cyclomatic":5},"body":{"287:5":{"kind":"call","span":{"start":[287,5],"end":[287,28],"bytes":[6509,6532]},"callee":null},"288:11":{"kind":"call","span":{"start":[288,11],"end":[288,29],"bytes":[6545,6563]},"callee":null},"293:5":{"kind":"call","span":{"start":[293,5],"end":[293,31],"bytes":[6672,6698]},"callee":null},"298:5":{"kind":"call","span":{"start":[298,5],"end":[298,29],"bytes":[6759,6783]},"callee":null},"300:11":{"kind":"call","span":{"start":[300,11],"end":[300,35],"bytes":[6870,6894]},"callee":null}}},"github.com/benbjohnson/litestream/s3.isPreconditionFailed":{"id":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isPreconditionFailed","kind":"function","span":{"start":[268,1],"end":[283,2],"bytes":[6040,6436]},"signature":"github.com/benbjohnson/litestream/s3.isPreconditionFailed","parameters":[{"name":"err","type":"error","span":{"start":[268,1],"end":[268,44],"bytes":[6040,6083]}}],"return_type":"bool","metrics":{"cyclomatic":4},"body":{"270:5":{"kind":"call","span":{"start":[270,5],"end":[270,28],"bytes":[6116,6139]},"callee":null},"271:11":{"kind":"call","span":{"start":[271,11],"end":[271,29],"bytes":[6152,6170]},"callee":null},"276:5":{"kind":"call","span":{"start":[276,5],"end":[276,29],"bytes":[6270,6294]},"callee":null},"278:11":{"kind":"call","span":{"start":[278,11],"end":[278,35],"bytes":[6381,6405]},"callee":null}}}},"content_hash":"3afed52bb5e6a612b0bbc2455ed5859e2b178afbd4759edb491a0e127012b345"},"s3/replica_client.go":{"id":"can://go/litestream/s3/replica_client.go","kind":"module","span":{"start":[1,1],"end":[1894,1],"bytes":[0,58711]},"package":"s3","source":"package s3\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"context\"\n\t\"crypto/md5\"\n\t\"crypto/tls\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"regexp\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go-v2/aws\"\n\t\"github.com/aws/aws-sdk-go-v2/aws/ratelimit\"\n\t\"github.com/aws/aws-sdk-go-v2/aws/retry\"\n\tv4 \"github.com/aws/aws-sdk-go-v2/aws/signer/v4\"\n\t\"github.com/aws/aws-sdk-go-v2/config\"\n\t\"github.com/aws/aws-sdk-go-v2/credentials\"\n\t\"github.com/aws/aws-sdk-go-v2/feature/s3/manager\"\n\t\"github.com/aws/aws-sdk-go-v2/service/s3\"\n\t\"github.com/aws/aws-sdk-go-v2/service/s3/types\"\n\t\"github.com/aws/smithy-go\"\n\tsmithyxml \"github.com/aws/smithy-go/encoding/xml\"\n\t\"github.com/aws/smithy-go/middleware\"\n\tsmithytime \"github.com/aws/smithy-go/time\"\n\tsmithyhttp \"github.com/aws/smithy-go/transport/http\"\n\t\"github.com/superfly/ltx\"\n\t\"golang.org/x/sync/errgroup\"\n\t\"golang.org/x/sync/semaphore\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"s3\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"s3\"\n\n// MetadataKeyTimestamp is the metadata key for storing LTX file timestamps in S3.\nconst MetadataKeyTimestamp = \"litestream-timestamp\"\n\n// MaxKeys is the number of keys S3 can operate on per batch.\nconst MaxKeys = 1000\n\n// DefaultRegion is the region used if one is not specified.\nconst DefaultRegion = \"us-east-1\"\n\n// DefaultMetadataConcurrency is the default number of concurrent HeadObject calls\n// for fetching accurate timestamps during timestamp-based restore.\n// S3 can handle 5,500+ HEAD requests per second per prefix.\nconst DefaultMetadataConcurrency = 50\n\n// DefaultR2Concurrency is the default number of concurrent multipart upload\n// parts for Cloudflare R2, which has strict concurrent upload limits.\nconst DefaultR2Concurrency = 2\n\n// DefaultTigrisConcurrency is the default number of concurrent multipart\n// upload parts for Tigris, which has strict concurrent upload limits.\nconst DefaultTigrisConcurrency = 2\n\n// DefaultTigrisPartSize is the default multipart upload part size for Tigris.\nconst DefaultTigrisPartSize = 16 * 1024 * 1024\n\n// contentMD5StackKey is used to pass the precomputed Content-MD5 checksum\n// through the middleware stack from Serialize to Finalize phase.\ntype contentMD5StackKey struct{}\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\nvar _ litestream.ReplicaClientV3 = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files to S3.\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\ts3 *s3.Client // s3 service\n\tuploader *manager.Uploader\n\tlogger *slog.Logger\n\n\t// AWS authentication keys.\n\tAccessKeyID string\n\tSecretAccessKey string\n\n\t// S3 bucket information\n\tRegion string\n\tBucket string\n\tPath string\n\tEndpoint string\n\tForcePathStyle bool\n\tSkipVerify bool\n\tSignPayload bool\n\tSignAcceptEncoding bool\n\tRequireContentMD5 bool\n\tStorageClass string\n\n\t// Upload configuration\n\tPartSize int64 // Part size for multipart uploads (default: 5MB)\n\tConcurrency int // Number of concurrent parts to upload (default: 5)\n\n\t// MetadataConcurrency controls parallel HeadObject calls for timestamp-based restore.\n\t// Higher values improve restore speed for large backup histories.\n\t// Default: 50 (S3 can handle 5,500+ HEAD/s per prefix)\n\tMetadataConcurrency int\n\n\t// Server-Side Encryption - Customer Provided Keys (SSE-C)\n\t// Works with all S3-compatible providers (AWS, MinIO, Exoscale, etc.)\n\tSSECustomerAlgorithm string // Must be \"AES256\" if set\n\tSSECustomerKey string // Base64-encoded 256-bit (32 byte) encryption key\n\tSSECustomerKeyMD5 string // Base64-encoded MD5 of key (auto-computed if not set)\n\n\t// Server-Side Encryption - AWS KMS (SSE-KMS)\n\t// Only works with AWS S3 (not S3-compatible providers)\n\tSSEKMSKeyID string // KMS key ID, ARN, or alias\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t\tRequireContentMD5: true,\n\t\tSignPayload: true,\n\t\tSignAcceptEncoding: true,\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tclient := NewReplicaClient()\n\n\tvar (\n\t\tbucket string\n\t\tregion string\n\t\tendpoint string\n\t\tforcePathStyle bool\n\t\tskipVerify bool\n\t\tsignPayload bool\n\t\tsignPayloadSet bool\n\t\tsignAcceptEncoding bool\n\t\tsignAcceptEncodingSet bool\n\t\trequireMD5 bool\n\t\trequireMD5Set bool\n\t\tconcurrency int\n\t\tconcurrencySet bool\n\t\tpartSize int64\n\t\tstorageClass string\n\t)\n\n\t// Parse host for bucket and region\n\tif strings.HasPrefix(host, \"arn:\") {\n\t\tbucket = host\n\t\tregion = litestream.RegionFromS3ARN(host)\n\t} else {\n\t\tbucket, region, endpoint, forcePathStyle = ParseHost(host)\n\t}\n\n\t// Override with query parameters if provided\n\tif qEndpoint := query.Get(\"endpoint\"); qEndpoint != \"\" {\n\t\t// Ensure endpoint has a scheme (defaults to https:// for cloud, http:// for local)\n\t\tqEndpoint, _ = litestream.EnsureEndpointScheme(qEndpoint)\n\t\tendpoint = qEndpoint\n\t\t// Default to path style for custom endpoints unless explicitly set to false\n\t\tif v, ok := litestream.BoolQueryValue(query, \"forcePathStyle\", \"force-path-style\"); !ok || v {\n\t\t\tforcePathStyle = true\n\t\t}\n\t}\n\tif qRegion := query.Get(\"region\"); qRegion != \"\" {\n\t\tregion = qRegion\n\t}\n\tif v, ok := litestream.BoolQueryValue(query, \"forcePathStyle\", \"force-path-style\"); ok {\n\t\tforcePathStyle = v\n\t}\n\tif v, ok := litestream.BoolQueryValue(query, \"skipVerify\", \"skip-verify\"); ok {\n\t\tskipVerify = v\n\t}\n\tif v, ok := litestream.BoolQueryValue(query, \"signPayload\", \"sign-payload\"); ok {\n\t\tsignPayload = v\n\t\tsignPayloadSet = true\n\t}\n\tif v, ok := litestream.BoolQueryValue(query, \"signAcceptEncoding\", \"sign-accept-encoding\"); ok {\n\t\tsignAcceptEncoding = v\n\t\tsignAcceptEncodingSet = true\n\t}\n\tif v, ok := litestream.BoolQueryValue(query, \"requireContentMD5\", \"require-content-md5\"); ok {\n\t\trequireMD5 = v\n\t\trequireMD5Set = true\n\t}\n\tif v, ok, err := litestream.IntQueryValue(query, \"concurrency\"); err != nil {\n\t\treturn nil, err\n\t} else if ok {\n\t\tconcurrency = int(v)\n\t\tconcurrencySet = true\n\t}\n\tif v, ok, err := litestream.IntQueryValue(query, \"partSize\", \"part-size\"); err != nil {\n\t\treturn nil, err\n\t} else if ok {\n\t\tpartSize = v\n\t}\n\tif v := query.Get(\"storageClass\"); v != \"\" {\n\t\tstorageClass = v\n\t} else if v := query.Get(\"storage-class\"); v != \"\" {\n\t\tstorageClass = v\n\t}\n\n\t// Ensure bucket is set\n\tif bucket == \"\" {\n\t\treturn nil, fmt.Errorf(\"bucket required for s3 replica URL\")\n\t}\n\n\t// Track if forcePathStyle was explicitly set via query parameter.\n\tforcePathStyleSet := query.Get(\"forcePathStyle\") != \"\" || query.Get(\"force-path-style\") != \"\"\n\n\t// Read authentication from environment variables\n\tif v := os.Getenv(\"AWS_ACCESS_KEY_ID\"); v != \"\" {\n\t\tclient.AccessKeyID = v\n\t} else if v := os.Getenv(\"LITESTREAM_ACCESS_KEY_ID\"); v != \"\" {\n\t\tclient.AccessKeyID = v\n\t}\n\tif v := os.Getenv(\"AWS_SECRET_ACCESS_KEY\"); v != \"\" {\n\t\tclient.SecretAccessKey = v\n\t} else if v := os.Getenv(\"LITESTREAM_SECRET_ACCESS_KEY\"); v != \"\" {\n\t\tclient.SecretAccessKey = v\n\t}\n\n\tif endpoint == \"\" {\n\t\tif v := os.Getenv(\"LITESTREAM_S3_ENDPOINT\"); v != \"\" {\n\t\t\tendpoint, _ = litestream.EnsureEndpointScheme(v)\n\t\t\tif !forcePathStyleSet {\n\t\t\t\tforcePathStyle = true\n\t\t\t}\n\t\t}\n\t}\n\n\t// Detect S3-compatible provider endpoints for applying appropriate defaults.\n\tisHetzner := litestream.IsHetznerEndpoint(endpoint)\n\tisTigris := litestream.IsTigrisEndpoint(endpoint)\n\tisDigitalOcean := litestream.IsDigitalOceanEndpoint(endpoint)\n\tisBackblaze := litestream.IsBackblazeEndpoint(endpoint)\n\tisFilebase := litestream.IsFilebaseEndpoint(endpoint)\n\tisScaleway := litestream.IsScalewayEndpoint(endpoint)\n\tisCloudflareR2 := litestream.IsCloudflareR2Endpoint(endpoint)\n\tisMinIO := litestream.IsMinIOEndpoint(endpoint)\n\tisSupabase := litestream.IsSupabaseEndpoint(endpoint)\n\n\t// Apply provider-specific defaults for S3-compatible providers.\n\tif isTigris {\n\t\t// Tigris: requires signed payloads, no MD5\n\t\tif !signPayloadSet {\n\t\t\tsignPayload, signPayloadSet = true, true\n\t\t}\n\t\tif !requireMD5Set {\n\t\t\trequireMD5, requireMD5Set = false, true\n\t\t}\n\t\tif !concurrencySet {\n\t\t\tclient.Concurrency = DefaultTigrisConcurrency\n\t\t}\n\t\tif partSize == 0 {\n\t\t\tclient.PartSize = DefaultTigrisPartSize\n\t\t}\n\t}\n\tif isHetzner || isDigitalOcean || isBackblaze || isFilebase || isScaleway || isCloudflareR2 || isMinIO || isSupabase {\n\t\t// All these providers require signed payloads (don't support UNSIGNED-PAYLOAD)\n\t\tif !signPayloadSet {\n\t\t\tsignPayload, signPayloadSet = true, true\n\t\t}\n\t}\n\tif !forcePathStyleSet {\n\t\t// Filebase, Backblaze B2, MinIO, and Supabase require path-style URLs\n\t\tif isFilebase || isBackblaze || isMinIO || isSupabase {\n\t\t\tforcePathStyle = true\n\t\t}\n\t}\n\tif isCloudflareR2 {\n\t\tclient.Concurrency = DefaultR2Concurrency\n\t}\n\n\t// Configure client\n\tclient.Bucket = bucket\n\tclient.Path = urlPath\n\tclient.Region = region\n\tclient.Endpoint = endpoint\n\tclient.ForcePathStyle = forcePathStyle\n\tclient.SkipVerify = skipVerify\n\n\tif signPayloadSet {\n\t\tclient.SignPayload = signPayload\n\t}\n\tif signAcceptEncodingSet {\n\t\tclient.SignAcceptEncoding = signAcceptEncoding\n\t}\n\tif requireMD5Set {\n\t\tclient.RequireContentMD5 = requireMD5\n\t}\n\tif concurrencySet {\n\t\tclient.Concurrency = concurrency\n\t}\n\tif partSize \u003e 0 {\n\t\tclient.PartSize = partSize\n\t}\n\tclient.StorageClass = storageClass\n\n\t// Parse SSE-C parameters from query string\n\tif v := query.Get(\"sseCustomerAlgorithm\"); v != \"\" {\n\t\tclient.SSECustomerAlgorithm = v\n\t} else if v := query.Get(\"sse-customer-algorithm\"); v != \"\" {\n\t\tclient.SSECustomerAlgorithm = v\n\t}\n\tif v := query.Get(\"sseCustomerKey\"); v != \"\" {\n\t\tclient.SSECustomerKey = v\n\t} else if v := query.Get(\"sse-customer-key\"); v != \"\" {\n\t\tclient.SSECustomerKey = v\n\t}\n\tif v := query.Get(\"sseCustomerKeyMD5\"); v != \"\" {\n\t\tclient.SSECustomerKeyMD5 = v\n\t} else if v := query.Get(\"sse-customer-key-md5\"); v != \"\" {\n\t\tclient.SSECustomerKeyMD5 = v\n\t}\n\n\t// Parse SSE-KMS parameters from query string\n\tif v := query.Get(\"sseKmsKeyId\"); v != \"\" {\n\t\tclient.SSEKMSKeyID = v\n\t} else if v := query.Get(\"sse-kms-key-id\"); v != \"\" {\n\t\tclient.SSEKMSKeyID = v\n\t}\n\n\treturn client, nil\n}\n\n// Type returns \"s3\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init initializes the connection to S3. No-op if already initialized.\nfunc (c *ReplicaClient) Init(ctx context.Context) (err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.s3 != nil {\n\t\treturn nil\n\t}\n\n\t// Validate required configuration\n\tif c.Bucket == \"\" {\n\t\treturn fmt.Errorf(\"s3: bucket name is required\")\n\t}\n\n\t// Validate SSE configuration\n\tif err := c.validateSSEConfig(); err != nil {\n\t\treturn err\n\t}\n\n\t// Look up region if not specified and no endpoint is used.\n\t// Endpoints are typically used for non-S3 object stores and do not\n\t// necessarily require a region.\n\tregion := c.Region\n\tif region == \"\" {\n\t\tif c.Endpoint == \"\" {\n\t\t\tif region, err = c.findBucketRegion(ctx, c.Bucket); err != nil {\n\t\t\t\treturn fmt.Errorf(\"s3: cannot lookup bucket region: %w\", err)\n\t\t\t}\n\t\t} else {\n\t\t\tregion = DefaultRegion // default for non-S3 object stores\n\t\t}\n\t}\n\n\t// Create HTTP client with 24 hour timeout for long-running operations\n\thttpClient := \u0026http.Client{\n\t\tTimeout: 24 * time.Hour,\n\t}\n\n\t// Always configure custom HTTP Transport with controlled keepalive settings\n\t// to reduce idle CPU usage from default transport's aggressive keepalives.\n\t// See: https://github.com/benbjohnson/litestream/issues/992\n\thttpClient.Transport = \u0026http.Transport{\n\t\tProxy: http.ProxyFromEnvironment,\n\t\tDialContext: (\u0026net.Dialer{\n\t\t\tTimeout: 30 * time.Second,\n\t\t\tKeepAlive: 30 * time.Second,\n\t\t}).DialContext,\n\t\tForceAttemptHTTP2: true,\n\t\tMaxIdleConns: 100,\n\t\tIdleConnTimeout: 90 * time.Second,\n\t\tTLSHandshakeTimeout: 10 * time.Second,\n\t\tExpectContinueTimeout: 1 * time.Second,\n\t}\n\n\t// Configure TLS to skip verification if requested\n\tif c.SkipVerify {\n\t\thttpClient.Transport.(*http.Transport).TLSClientConfig = \u0026tls.Config{\n\t\t\tInsecureSkipVerify: true,\n\t\t}\n\t}\n\n\t// Build configuration options\n\tconfigOpts := []func(*config.LoadOptions) error{\n\t\tconfig.WithRegion(region),\n\t\tconfig.WithRetryer(newTransportRetryer),\n\t}\n\n\t// Add HTTP client with proper timeout\n\tconfigOpts = append(configOpts, config.WithHTTPClient(httpClient))\n\n\t// Add static credentials if provided, otherwise use default credential chain\n\t// Default credential chain includes:\n\t// - Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)\n\t// - Shared credentials file (~/.aws/credentials)\n\t// - EC2 Instance Profile credentials\n\t// - ECS Task Role credentials\n\t// - Web Identity Token credentials (for EKS)\n\tif c.AccessKeyID != \"\" \u0026\u0026 c.SecretAccessKey != \"\" {\n\t\tconfigOpts = append(configOpts, config.WithCredentialsProvider(\n\t\t\tcredentials.NewStaticCredentialsProvider(c.AccessKeyID, c.SecretAccessKey, \"\"),\n\t\t))\n\t}\n\n\t// Enable AWS SDK debug logging if LITESTREAM_S3_DEBUG is set.\n\t// Useful for debugging S3-compatible providers (signing issues, request/response bodies).\n\t// Supports comma-separated values: signing,request,retries\n\t// Values: signing, request, request-with-body, response, response-with-body, retries, all\n\tif logMode := parseS3DebugEnv(); logMode != 0 {\n\t\tconfigOpts = append(configOpts, config.WithClientLogMode(logMode))\n\t}\n\n\t// Load AWS configuration\n\tcfg, err := config.LoadDefaultConfig(ctx, configOpts...)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"s3: cannot load aws config: %w\", err)\n\t}\n\n\t// Create S3 client options\n\ts3Opts := []func(*s3.Options){\n\t\tfunc(o *s3.Options) {\n\t\t\to.UsePathStyle = c.ForcePathStyle\n\t\t\to.UseARNRegion = true\n\t\t\t// Add User-Agent and optional middleware.\n\t\t\to.APIOptions = append(o.APIOptions, c.middlewareOption())\n\t\t},\n\t}\n\n\t// S3-compatible providers (Tigris, Backblaze B2, MinIO, Filebase, etc.) don't\n\t// support aws-chunked content encoding used by default checksum calculation\n\t// in AWS SDK Go v2 v1.73.0+. Disable automatic checksum calculation and\n\t// response checksum validation for all custom endpoints.\n\t// See: https://github.com/benbjohnson/litestream/issues/918\n\t// See: https://github.com/benbjohnson/litestream/issues/947\n\tif c.Endpoint != \"\" {\n\t\ts3Opts = append(s3Opts, func(o *s3.Options) {\n\t\t\to.RequestChecksumCalculation = aws.RequestChecksumCalculationWhenRequired\n\t\t\to.ResponseChecksumValidation = aws.ResponseChecksumValidationWhenRequired\n\t\t})\n\t}\n\n\t// Add custom endpoint if specified\n\tc.configureEndpoint(\u0026s3Opts)\n\n\t// Create S3 client\n\tc.s3 = s3.NewFromConfig(cfg, s3Opts...)\n\n\t// Configure uploader with custom options if specified\n\tuploaderOpts := []func(*manager.Uploader){}\n\n\t// For S3-compatible providers, disable automatic checksum calculation on the Uploader.\n\t// The S3 client's RequestChecksumCalculation setting only affects single-part uploads.\n\t// Multipart uploads via the Uploader require this separate setting (added in s3/manager v1.20.0).\n\t// See: https://github.com/benbjohnson/litestream/issues/948\n\t// See: https://github.com/aws/aws-sdk-go-v2/issues/3007\n\tif c.Endpoint != \"\" {\n\t\tuploaderOpts = append(uploaderOpts, func(u *manager.Uploader) {\n\t\t\tu.RequestChecksumCalculation = aws.RequestChecksumCalculationWhenRequired\n\t\t})\n\t}\n\n\tif c.PartSize \u003e 0 {\n\t\tuploaderOpts = append(uploaderOpts, func(u *manager.Uploader) {\n\t\t\tu.PartSize = c.PartSize\n\t\t})\n\t}\n\tif c.Concurrency \u003e 0 {\n\t\tuploaderOpts = append(uploaderOpts, func(u *manager.Uploader) {\n\t\t\tu.Concurrency = c.Concurrency\n\t\t})\n\t}\n\tc.uploader = manager.NewUploader(c.s3, uploaderOpts...)\n\n\treturn nil\n}\n\n// configureEndpoint adds custom endpoint configuration to S3 client options if needed.\nfunc (c *ReplicaClient) configureEndpoint(opts *[]func(*s3.Options)) {\n\tif c.Endpoint != \"\" {\n\t\t*opts = append(*opts, func(o *s3.Options) {\n\t\t\to.UsePathStyle = c.ForcePathStyle\n\n\t\t\tendpoint := c.Endpoint\n\t\t\t// Add scheme if not present\n\t\t\tif !strings.HasPrefix(endpoint, \"http://\") \u0026\u0026 !strings.HasPrefix(endpoint, \"https://\") {\n\t\t\t\tendpoint = \"https://\" + endpoint\n\t\t\t}\n\n\t\t\to.BaseEndpoint = aws.String(endpoint)\n\t\t\t// For MinIO and other S3-compatible services\n\t\t\tif strings.HasPrefix(endpoint, \"http://\") {\n\t\t\t\to.EndpointOptions.DisableHTTPS = true\n\t\t\t}\n\t\t})\n\t}\n}\n\n// validateSSEConfig validates server-side encryption configuration.\nfunc (c *ReplicaClient) validateSSEConfig() error {\n\t// Check mutual exclusivity: SSE-C and SSE-KMS cannot both be set\n\tif c.SSECustomerKey != \"\" \u0026\u0026 c.SSEKMSKeyID != \"\" {\n\t\treturn fmt.Errorf(\"s3: cannot use both sse-customer-key and sse-kms-key-id; they are mutually exclusive\")\n\t}\n\n\t// Validate SSE-C configuration\n\tif c.SSECustomerKey != \"\" {\n\t\t// Algorithm must be AES256 (or default to it)\n\t\tif c.SSECustomerAlgorithm == \"\" {\n\t\t\tc.SSECustomerAlgorithm = \"AES256\"\n\t\t} else if c.SSECustomerAlgorithm != \"AES256\" {\n\t\t\treturn fmt.Errorf(\"s3: sse-customer-algorithm must be AES256, got %q\", c.SSECustomerAlgorithm)\n\t\t}\n\n\t\t// Validate key is valid base64 and correct length (256 bits = 32 bytes)\n\t\tkeyBytes, err := base64.StdEncoding.DecodeString(c.SSECustomerKey)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"s3: sse-customer-key must be valid base64: %w\", err)\n\t\t}\n\t\tif len(keyBytes) != 32 {\n\t\t\treturn fmt.Errorf(\"s3: sse-customer-key must be 256-bit (32 bytes) when decoded, got %d bytes\", len(keyBytes))\n\t\t}\n\n\t\t// Auto-compute MD5 if not provided\n\t\tif c.SSECustomerKeyMD5 == \"\" {\n\t\t\tsum := md5.Sum(keyBytes)\n\t\t\tc.SSECustomerKeyMD5 = base64.StdEncoding.EncodeToString(sum[:])\n\t\t}\n\n\t\t// SSE-C requires HTTPS (except for localhost/private networks for testing)\n\t\tif c.Endpoint != \"\" {\n\t\t\tendpoint := c.Endpoint\n\t\t\tif !strings.HasPrefix(endpoint, \"http://\") \u0026\u0026 !strings.HasPrefix(endpoint, \"https://\") {\n\t\t\t\tendpoint = \"https://\" + endpoint\n\t\t\t}\n\t\t\tif strings.HasPrefix(endpoint, \"http://\") {\n\t\t\t\tu, err := url.Parse(endpoint)\n\t\t\t\tif err == nil {\n\t\t\t\t\thost := u.Hostname()\n\t\t\t\t\t// Allow localhost by name\n\t\t\t\t\tif host == \"localhost\" {\n\t\t\t\t\t\t// OK - localhost is allowed\n\t\t\t\t\t} else if ip := net.ParseIP(host); ip != nil \u0026\u0026 (ip.IsLoopback() || ip.IsPrivate()) {\n\t\t\t\t\t\t// OK - loopback (127.x.x.x) or private RFC1918 ranges (10.x, 172.16-31.x, 192.168.x)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn fmt.Errorf(\"s3: sse-customer-key requires HTTPS endpoint (HTTP only allowed for localhost/private networks)\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// transportRetryMaxAttempts caps total attempts per operation; exponential\n// backoff between attempts still bounds request rate during outages.\nconst transportRetryMaxAttempts = 10\n\n// newTransportRetryer returns a retryer that keeps retrying through sustained\n// object-store transport flaps. The SDK's default token bucket (and the\n// adaptive mode previously configured here) only refills retry quota on\n// successful responses, so a sustained provider flap drains it to zero and\n// every subsequent operation fails fast (\"retry quota exceeded, 0 available\")\n// precisely when retrying matters most for a replication tool.\nfunc newTransportRetryer() aws.Retryer {\n\treturn retry.NewStandard(func(o *retry.StandardOptions) {\n\t\to.MaxAttempts = transportRetryMaxAttempts\n\t\to.RateLimiter = ratelimit.None\n\t\t// S3-compatible providers (observed: Tigris) load-shed with HTTP 408\n\t\t// and api error code \"RequestCanceled\", neither of which the SDK\n\t\t// classifies as retryable by default. Genuine client-side context\n\t\t// cancellation stays non-retryable via the standard retryer's\n\t\t// canceled-context check, which runs before these.\n\t\to.Retryables = append(o.Retryables,\n\t\t\tretry.RetryableHTTPStatusCode{Codes: map[int]struct{}{\n\t\t\t\thttp.StatusRequestTimeout: {},\n\t\t\t}},\n\t\t\tretry.RetryableErrorCode{Codes: map[string]struct{}{\n\t\t\t\t\"RequestCanceled\": {},\n\t\t\t}},\n\t\t)\n\t})\n}\n\n// findBucketRegion looks up the AWS region for a bucket. Returns blank if non-S3.\nfunc (c *ReplicaClient) findBucketRegion(ctx context.Context, bucket string) (string, error) {\n\t// Build a config with credentials but no region\n\tconfigOpts := []func(*config.LoadOptions) error{\n\t\tconfig.WithRetryer(newTransportRetryer),\n\t}\n\n\t// Add static credentials if provided\n\tif c.AccessKeyID != \"\" \u0026\u0026 c.SecretAccessKey != \"\" {\n\t\tconfigOpts = append(configOpts, config.WithCredentialsProvider(\n\t\t\tcredentials.NewStaticCredentialsProvider(c.AccessKeyID, c.SecretAccessKey, \"\"),\n\t\t))\n\t}\n\n\t// Load AWS configuration\n\tcfg, err := config.LoadDefaultConfig(ctx, configOpts...)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"s3: cannot load aws config for region lookup: %w\", err)\n\t}\n\n\t// Use default region for initial region lookup\n\tcfg.Region = DefaultRegion\n\n\t// Create S3 client options\n\ts3Opts := []func(*s3.Options){}\n\n\t// Configure custom endpoint for region lookup\n\tc.configureEndpoint(\u0026s3Opts)\n\n\tclient := s3.NewFromConfig(cfg, s3Opts...)\n\n\t// Get bucket location\n\tout, err := client.GetBucketLocation(ctx, \u0026s3.GetBucketLocationInput{\n\t\tBucket: aws.String(bucket),\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Convert location constraint to region\n\tif out.LocationConstraint == \"\" {\n\t\treturn DefaultRegion, nil\n\t}\n\treturn string(out.LocationConstraint), nil\n}\n\n// LTXFiles returns an iterator over all LTX files on the replica for the given level.\n// When useMetadata is true, fetches accurate timestamps from S3 metadata via HeadObject.\n// This uses parallel batched requests (controlled by MetadataConcurrency) to avoid hangs\n// with large backup histories (see issue #930).\n// When false, uses fast LastModified timestamps from LIST operation.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, useMetadata bool) (ltx.FileIterator, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newFileIterator(ctx, c, level, seek, useMetadata), nil\n}\n\n// OpenLTXFile returns a reader for an LTX file\n// Returns os.ErrNotExist if no matching index/offset is found.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar rangeStr string\n\tif size \u003e 0 {\n\t\trangeStr = fmt.Sprintf(\"bytes=%d-%d\", offset, offset+size-1)\n\t} else {\n\t\trangeStr = fmt.Sprintf(\"bytes=%d-\", offset)\n\t}\n\n\t// Build the key from the file info\n\tfilename := ltx.FormatFilename(minTXID, maxTXID)\n\tkey := c.Path + \"/\" + fmt.Sprintf(\"%04x/%s\", level, filename)\n\n\tinput := \u0026s3.GetObjectInput{\n\t\tBucket: aws.String(c.Bucket),\n\t\tKey: aws.String(key),\n\t\tRange: aws.String(rangeStr),\n\t}\n\n\t// Add SSE-C parameters if configured (required for reading SSE-C encrypted objects)\n\t// Note: SSE-KMS does not require parameters on read - decryption is automatic\n\tif c.SSECustomerKey != \"\" {\n\t\tinput.SSECustomerAlgorithm = aws.String(c.SSECustomerAlgorithm)\n\t\tinput.SSECustomerKey = aws.String(c.SSECustomerKey)\n\t\tinput.SSECustomerKeyMD5 = aws.String(c.SSECustomerKeyMD5)\n\t}\n\n\tout, err := c.s3.GetObject(ctx, input)\n\tif err != nil {\n\t\tif isNotExists(err) {\n\t\t\treturn nil, os.ErrNotExist\n\t\t}\n\t\treturn nil, fmt.Errorf(\"s3: get object %s: %w\", key, err)\n\t}\n\treturn out.Body, nil\n}\n\n// WriteLTXFile writes an LTX file to the replica.\n// Extracts timestamp from LTX header and stores it in S3 metadata to preserve original creation time.\n// Objects smaller than the part size are written with a single PutObject call\n// to avoid the multipart upload manager's 5 MiB part buffers (issue #1327).\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, r io.Reader) (*ltx.FileInfo, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfilename := ltx.FormatFilename(minTXID, maxTXID)\n\tkey := c.Path + \"/\" + fmt.Sprintf(\"%04x/%s\", level, filename)\n\n\tpartSize := int64(manager.DefaultUploadPartSize)\n\tif c.PartSize \u003e 0 {\n\t\tpartSize = c.PartSize\n\t}\n\n\t// The uploader rejects part sizes below the SDK minimum on every upload.\n\t// Fail identically here so the single-put path cannot mask the\n\t// misconfiguration for small objects.\n\tif partSize \u003c manager.MinUploadPartSize {\n\t\treturn nil, fmt.Errorf(\"s3: upload to %s: part size must be at least %d bytes\", key, manager.MinUploadPartSize)\n\t}\n\n\tsize, timestamp, etag, err := c.uploadLTX(ctx, key, r, partSize)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(size))\n\n\t// ETag indicates successful upload\n\tif etag == nil {\n\t\treturn nil, fmt.Errorf(\"s3: upload failed: no ETag returned\")\n\t}\n\n\treturn \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: size,\n\t\tCreatedAt: timestamp,\n\t}, nil\n}\n\n// uploadLTX uploads LTX data from r to key, choosing between a single\n// PutObject and the multipart uploader based on the object size.\nfunc (c *ReplicaClient) uploadLTX(ctx context.Context, key string, r io.Reader, partSize int64) (int64, time.Time, *string, error) {\n\t// The L0 replication path passes the local LTX file, so the size is\n\t// known up front and the body stays seekable for SDK retries.\n\tif rs, ok := r.(io.ReadSeeker); ok {\n\t\tif start, err := rs.Seek(0, io.SeekCurrent); err == nil {\n\t\t\treturn c.uploadSizedLTX(ctx, key, rs, start, partSize)\n\t\t}\n\t\t// Reader does not support seeking (e.g. piped file descriptor);\n\t\t// nothing has been consumed, so treat it as an unsized stream.\n\t}\n\treturn c.uploadStreamedLTX(ctx, key, r, partSize)\n}\n\n// uploadSizedLTX uploads from a seekable reader whose size is known.\nfunc (c *ReplicaClient) uploadSizedLTX(ctx context.Context, key string, rs io.ReadSeeker, start, partSize int64) (int64, time.Time, *string, error) {\n\tend, err := rs.Seek(0, io.SeekEnd)\n\tif err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: size ltx file %s: %w\", key, err)\n\t}\n\tsize := end - start\n\tif _, err := rs.Seek(start, io.SeekStart); err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: rewind ltx file %s: %w\", key, err)\n\t}\n\n\t// Extract timestamp from LTX header, then rewind so the upload sees the\n\t// full file.\n\thdr, _, err := ltx.PeekHeader(rs)\n\tif err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\tif _, err := rs.Seek(start, io.SeekStart); err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: rewind ltx file %s: %w\", key, err)\n\t}\n\n\tinput := c.putObjectInput(key, timestamp)\n\tinput.Body = rs\n\n\tif size \u003c partSize {\n\t\tinput.ContentLength = aws.Int64(size)\n\t\tout, err := c.s3.PutObject(ctx, input)\n\t\tif err != nil {\n\t\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: put object %s: %w\", key, err)\n\t\t}\n\t\treturn size, timestamp, out.ETag, nil\n\t}\n\n\t// At or above the part size the uploader splits the seekable body into\n\t// section readers without copying it into part buffers.\n\tout, err := c.uploader.Upload(ctx, input)\n\tif err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: upload to %s: %w\", key, err)\n\t}\n\treturn size, timestamp, out.ETag, nil\n}\n\n// uploadStreamedLTX uploads from a reader of unknown size, buffering up to\n// the part size to determine whether the object fits in a single PutObject.\nfunc (c *ReplicaClient) uploadStreamedLTX(ctx context.Context, key string, r io.Reader, partSize int64) (int64, time.Time, *string, error) {\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\thdr, _, err := ltx.PeekHeader(io.TeeReader(r, \u0026buf))\n\tif err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\tif _, err := io.CopyN(\u0026buf, r, partSize-int64(buf.Len())); err != nil \u0026\u0026 !errors.Is(err, io.EOF) {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: buffer ltx stream %s: %w\", key, err)\n\t}\n\n\tinput := c.putObjectInput(key, timestamp)\n\n\t// Reaching EOF before the part size means the whole object is buffered.\n\tif size := int64(buf.Len()); size \u003c partSize {\n\t\tinput.Body = bytes.NewReader(buf.Bytes())\n\t\tinput.ContentLength = aws.Int64(size)\n\t\tout, err := c.s3.PutObject(ctx, input)\n\t\tif err != nil {\n\t\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: put object %s: %w\", key, err)\n\t\t}\n\t\treturn size, timestamp, out.ETag, nil\n\t}\n\n\t// Combine buffered prefix with rest of reader so nothing is re-read.\n\trc := internal.NewReadCounter(io.MultiReader(bytes.NewReader(buf.Bytes()), r))\n\tinput.Body = rc\n\tout, err := c.uploader.Upload(ctx, input)\n\tif err != nil {\n\t\treturn 0, time.Time{}, nil, fmt.Errorf(\"s3: upload to %s: %w\", key, err)\n\t}\n\treturn rc.N(), timestamp, out.ETag, nil\n}\n\n// putObjectInput returns a PutObjectInput populated with the client's write\n// parameters so the single-put and multipart paths stay in parity.\nfunc (c *ReplicaClient) putObjectInput(key string, timestamp time.Time) *s3.PutObjectInput {\n\tinput := \u0026s3.PutObjectInput{\n\t\tBucket: aws.String(c.Bucket),\n\t\tKey: aws.String(key),\n\t\t// Store timestamp in S3 metadata for accurate timestamp retrieval\n\t\tMetadata: map[string]string{\n\t\t\tMetadataKeyTimestamp: timestamp.Format(time.RFC3339Nano),\n\t\t},\n\t}\n\tif c.StorageClass != \"\" {\n\t\tinput.StorageClass = types.StorageClass(c.StorageClass)\n\t}\n\n\t// Add SSE-C parameters if configured\n\tif c.SSECustomerKey != \"\" {\n\t\tinput.SSECustomerAlgorithm = aws.String(c.SSECustomerAlgorithm)\n\t\tinput.SSECustomerKey = aws.String(c.SSECustomerKey)\n\t\tinput.SSECustomerKeyMD5 = aws.String(c.SSECustomerKeyMD5)\n\t}\n\n\t// Add SSE-KMS parameters if configured\n\tif c.SSEKMSKeyID != \"\" {\n\t\tinput.ServerSideEncryption = types.ServerSideEncryptionAwsKms\n\t\tinput.SSEKMSKeyId = aws.String(c.SSEKMSKeyID)\n\t}\n\n\treturn input\n}\n\nfunc (c *ReplicaClient) middlewareOption() func(*middleware.Stack) error {\n\treturn func(stack *middleware.Stack) error {\n\t\tif c.RequireContentMD5 {\n\t\t\tif err := stack.Serialize.Add(\n\t\t\t\tmiddleware.SerializeMiddlewareFunc(\n\t\t\t\t\t\"LitestreamComputeDeleteContentMD5\",\n\t\t\t\t\tfunc(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (\n\t\t\t\t\t\tout middleware.SerializeOutput, metadata middleware.Metadata, err error,\n\t\t\t\t\t) {\n\t\t\t\t\t\tif middleware.GetOperationName(ctx) != \"DeleteObjects\" {\n\t\t\t\t\t\t\treturn next.HandleSerialize(ctx, in)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinput, ok := in.Parameters.(*s3.DeleteObjectsInput)\n\t\t\t\t\t\tif !ok || input == nil || input.Delete == nil || len(input.Delete.Objects) == 0 {\n\t\t\t\t\t\t\treturn next.HandleSerialize(ctx, in)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchecksum, err := computeDeleteObjectsContentMD5(input.Delete)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn out, metadata, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif checksum != \"\" {\n\t\t\t\t\t\t\tctx = middleware.WithStackValue(ctx, contentMD5StackKey{}, checksum)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn next.HandleSerialize(ctx, in)\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tmiddleware.Before,\n\t\t\t); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif err := stack.Build.Add(\n\t\t\tmiddleware.BuildMiddlewareFunc(\n\t\t\t\t\"LitestreamUserAgent\",\n\t\t\t\tfunc(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) (\n\t\t\t\t\tout middleware.BuildOutput, metadata middleware.Metadata, err error,\n\t\t\t\t) {\n\t\t\t\t\tif req, ok := in.Request.(*smithyhttp.Request); ok {\n\t\t\t\t\t\tcurrent := req.Header.Get(\"User-Agent\")\n\t\t\t\t\t\tif current == \"\" {\n\t\t\t\t\t\t\treq.Header.Set(\"User-Agent\", \"litestream\")\n\t\t\t\t\t\t} else if !strings.Contains(current, \"litestream\") {\n\t\t\t\t\t\t\treq.Header.Set(\"User-Agent\", \"litestream \"+current)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn next.HandleBuild(ctx, in)\n\t\t\t\t},\n\t\t\t),\n\t\t\tmiddleware.After,\n\t\t); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif litestream.IsTigrisEndpoint(c.Endpoint) {\n\t\t\tif err := stack.Build.Add(\n\t\t\t\tmiddleware.BuildMiddlewareFunc(\n\t\t\t\t\t\"LitestreamTigrisConsistent\",\n\t\t\t\t\tfunc(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) (\n\t\t\t\t\t\tout middleware.BuildOutput, metadata middleware.Metadata, err error,\n\t\t\t\t\t) {\n\t\t\t\t\t\tif req, ok := in.Request.(*smithyhttp.Request); ok {\n\t\t\t\t\t\t\treq.Header.Set(\"X-Tigris-Consistent\", \"true\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn next.HandleBuild(ctx, in)\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tmiddleware.After,\n\t\t\t); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif !c.SignAcceptEncoding || litestream.IsGoogleCloudStorageEndpoint(c.Endpoint) {\n\t\t\tif err := stack.Finalize.Insert(\n\t\t\t\tmiddleware.FinalizeMiddlewareFunc(\n\t\t\t\t\t\"LitestreamRemoveAcceptEncoding\",\n\t\t\t\t\tfunc(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (\n\t\t\t\t\t\tout middleware.FinalizeOutput, metadata middleware.Metadata, err error,\n\t\t\t\t\t) {\n\t\t\t\t\t\tif req, ok := in.Request.(*smithyhttp.Request); ok {\n\t\t\t\t\t\t\treq.Header.Del(\"Accept-Encoding\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn next.HandleFinalize(ctx, in)\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t\"Signing\",\n\t\t\t\tmiddleware.Before,\n\t\t\t); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\t// Many S3-compatible providers (e.g. Filebase) do not support SigV4\n\t\t// payload hashing. Switching to unsigned payload matches the behavior\n\t\t// of the AWS SDK v1 client used in Litestream v0.3.x and restores\n\t\t// compatibility.\n\t\tif !c.SignPayload {\n\t\t\t_ = v4.RemoveComputePayloadSHA256Middleware(stack)\n\t\t\tif err := v4.AddUnsignedPayloadMiddleware(stack); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t_ = v4.RemoveContentSHA256HeaderMiddleware(stack)\n\t\t\tif err := v4.AddContentSHA256HeaderMiddleware(stack); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\t// Disable AWS SDK v2's trailing checksum middleware which uses\n\t\t// aws-chunked encoding. This is required for:\n\t\t// 1. UNSIGNED-PAYLOAD requests (aws-chunked + UNSIGNED-PAYLOAD is rejected by AWS)\n\t\t// 2. S3-compatible providers (Filebase, MinIO, Backblaze B2, etc.) that don't\n\t\t// support aws-chunked encoding at all\n\t\t// See: https://github.com/aws/aws-sdk-go-v2/discussions/2960\n\t\t// See: https://github.com/benbjohnson/litestream/issues/895\n\t\tif !c.SignPayload || c.Endpoint != \"\" {\n\t\t\tstack.Finalize.Remove(\"addInputChecksumTrailer\")\n\t\t}\n\n\t\t// Add debug logging middleware at the end of Finalize phase\n\t\t// so all headers (including X-Tigris-Consistent) are set\n\t\tif err := stack.Finalize.Add(\n\t\t\tmiddleware.FinalizeMiddlewareFunc(\n\t\t\t\t\"LitestreamDebugLogging\",\n\t\t\t\tfunc(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (\n\t\t\t\t\tout middleware.FinalizeOutput, metadata middleware.Metadata, err error,\n\t\t\t\t) {\n\t\t\t\t\tif req, ok := in.Request.(*smithyhttp.Request); ok {\n\t\t\t\t\t\tc.logger.Debug(\"s3 request\",\n\t\t\t\t\t\t\t\"method\", req.Method,\n\t\t\t\t\t\t\t\"url\", req.URL.String(),\n\t\t\t\t\t\t\t\"x-tigris-consistent\", req.Header.Get(\"X-Tigris-Consistent\"),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn next.HandleFinalize(ctx, in)\n\t\t\t\t},\n\t\t\t),\n\t\t\tmiddleware.After,\n\t\t); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif !c.RequireContentMD5 {\n\t\t\treturn nil\n\t\t}\n\n\t\tmd5Middleware := func() middleware.FinalizeMiddleware {\n\t\t\treturn middleware.FinalizeMiddlewareFunc(\n\t\t\t\t\"LitestreamDeleteContentMD5\",\n\t\t\t\tfunc(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (\n\t\t\t\t\tout middleware.FinalizeOutput, metadata middleware.Metadata, err error,\n\t\t\t\t) {\n\t\t\t\t\tif middleware.GetOperationName(ctx) != \"DeleteObjects\" {\n\t\t\t\t\t\treturn next.HandleFinalize(ctx, in)\n\t\t\t\t\t}\n\n\t\t\t\t\tchecksum, _ := middleware.GetStackValue(ctx, contentMD5StackKey{}).(string)\n\t\t\t\t\tif checksum == \"\" {\n\t\t\t\t\t\treturn next.HandleFinalize(ctx, in)\n\t\t\t\t\t}\n\n\t\t\t\t\treq, ok := in.Request.(*smithyhttp.Request)\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\treturn next.HandleFinalize(ctx, in)\n\t\t\t\t\t}\n\t\t\t\t\tif req.Header.Get(\"Content-MD5\") == \"\" {\n\t\t\t\t\t\treq.Header.Set(\"Content-MD5\", checksum)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn next.HandleFinalize(ctx, in)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\t// Try to insert before AWS's checksum middleware for optimal ordering.\n\t\t// If that middleware doesn't exist (e.g., different SDK version), add at the end.\n\t\t// Our middleware checks if Content-MD5 is already set, so order is not critical.\n\t\tif err := stack.Finalize.Insert(md5Middleware(), \"AWSChecksum:ComputeInputPayloadChecksum\", middleware.Before); err != nil {\n\t\t\tif err := stack.Finalize.Add(md5Middleware(), middleware.After); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\nfunc computeDeleteObjectsContentMD5(deleteInput *types.Delete) (string, error) {\n\tif deleteInput == nil {\n\t\treturn \"\", nil\n\t}\n\n\tpayload, err := marshalDeleteObjects(deleteInput)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif len(payload) == 0 {\n\t\treturn \"\", nil\n\t}\n\n\tsum := md5.Sum(payload)\n\treturn base64.StdEncoding.EncodeToString(sum[:]), nil\n}\n\nfunc marshalDeleteObjects(deleteInput *types.Delete) ([]byte, error) {\n\tif deleteInput == nil {\n\t\treturn nil, nil\n\t}\n\n\tvar buf bytes.Buffer\n\tencoder := smithyxml.NewEncoder(\u0026buf)\n\troot := smithyxml.StartElement{\n\t\tName: smithyxml.Name{\n\t\t\tLocal: \"Delete\",\n\t\t},\n\t\tAttr: []smithyxml.Attr{\n\t\t\tsmithyxml.NewNamespaceAttribute(\"\", \"http://s3.amazonaws.com/doc/2006-03-01/\"),\n\t\t},\n\t}\n\n\tif err := encodeDeleteDocument(deleteInput, encoder.RootElement(root)); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn encoder.Bytes(), nil\n}\n\nfunc encodeDeleteDocument(v *types.Delete, value smithyxml.Value) error {\n\tdefer value.Close()\n\tif v.Objects != nil {\n\t\troot := smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"Object\",\n\t\t\t},\n\t\t}\n\t\tel := value.FlattenedElement(root)\n\t\tif err := encodeObjectIdentifierList(v.Objects, el); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif v.Quiet != nil {\n\t\troot := smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"Quiet\",\n\t\t\t},\n\t\t}\n\t\tel := value.MemberElement(root)\n\t\tel.Boolean(*v.Quiet)\n\t}\n\treturn nil\n}\n\nfunc encodeObjectIdentifierList(v []types.ObjectIdentifier, value smithyxml.Value) error {\n\tif !value.IsFlattened() {\n\t\tdefer value.Close()\n\t}\n\n\tarray := value.Array()\n\tfor i := range v {\n\t\tmember := array.Member()\n\t\tif err := encodeObjectIdentifier(\u0026v[i], member); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// encodeObjectIdentifier mirrors the AWS SDK's XML serializer for DeleteObjects.\n// This ensures our precomputed Content-MD5 matches the actual request body.\n// Includes all ObjectIdentifier fields as of AWS SDK v2 (2024).\nfunc encodeObjectIdentifier(v *types.ObjectIdentifier, value smithyxml.Value) error {\n\tdefer value.Close()\n\tif v.ETag != nil {\n\t\tel := value.MemberElement(smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"ETag\",\n\t\t\t},\n\t\t})\n\t\tel.String(*v.ETag)\n\t}\n\tif v.Key != nil {\n\t\tel := value.MemberElement(smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"Key\",\n\t\t\t},\n\t\t})\n\t\tel.String(*v.Key)\n\t}\n\tif v.LastModifiedTime != nil {\n\t\tel := value.MemberElement(smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"LastModifiedTime\",\n\t\t\t},\n\t\t})\n\t\tel.String(smithytime.FormatHTTPDate(*v.LastModifiedTime))\n\t}\n\tif v.Size != nil {\n\t\tel := value.MemberElement(smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"Size\",\n\t\t\t},\n\t\t})\n\t\tel.Long(*v.Size)\n\t}\n\tif v.VersionId != nil {\n\t\tel := value.MemberElement(smithyxml.StartElement{\n\t\t\tName: smithyxml.Name{\n\t\t\t\tLocal: \"VersionId\",\n\t\t\t},\n\t\t})\n\t\tel.String(*v.VersionId)\n\t}\n\treturn nil\n}\n\n// DeleteLTXFiles deletes one or more LTX files.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tif len(a) == 0 {\n\t\treturn nil\n\t}\n\n\t// Convert file infos to object identifiers\n\tobjIDs := make([]types.ObjectIdentifier, 0, len(a))\n\tfor _, info := range a {\n\t\tfilename := ltx.FormatFilename(info.MinTXID, info.MaxTXID)\n\t\tkey := c.Path + \"/\" + fmt.Sprintf(\"%04x/%s\", info.Level, filename)\n\t\tobjIDs = append(objIDs, types.ObjectIdentifier{Key: aws.String(key)})\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"key\", key)\n\t}\n\n\t// Delete in batches\n\tfor len(objIDs) \u003e 0 {\n\t\tn := min(len(objIDs), MaxKeys)\n\n\t\tc.logger.Debug(\"deleting ltx files batch\", \"count\", n)\n\n\t\tstart := time.Now()\n\t\tout, err := c.s3.DeleteObjects(ctx, \u0026s3.DeleteObjectsInput{\n\t\t\tBucket: aws.String(c.Bucket),\n\t\t\tDelete: \u0026types.Delete{Objects: objIDs[:n]},\n\t\t})\n\t\tduration := time.Since(start)\n\t\tinternal.OperationDurationHistogramVec.WithLabelValues(ReplicaClientType, \"DELETE\").Observe(duration.Seconds())\n\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"s3: delete batch of %d objects: %w\", n, err)\n\t\t}\n\n\t\tdeleted := 0\n\t\tif out != nil {\n\t\t\tdeleted = len(out.Deleted)\n\t\t}\n\t\tc.logger.Debug(\"delete batch completed\",\n\t\t\t\"requested\", n,\n\t\t\t\"deleted\", deleted,\n\t\t\t\"errors\", len(out.Errors),\n\t\t\t\"duration_ms\", duration.Milliseconds())\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Add(float64(deleted))\n\n\t\tif len(out.Errors) \u003e 0 {\n\t\t\tfor i, e := range out.Errors {\n\t\t\t\tcode := aws.ToString(e.Code)\n\t\t\t\tinternal.OperationErrorCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\", code).Inc()\n\n\t\t\t\tif i \u003c 5 {\n\t\t\t\t\tc.logger.Warn(\"delete object failed\",\n\t\t\t\t\t\t\"key\", aws.ToString(e.Key),\n\t\t\t\t\t\t\"code\", code,\n\t\t\t\t\t\t\"message\", aws.ToString(e.Message))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(out.Errors) \u003e 5 {\n\t\t\t\tc.logger.Warn(\"additional delete errors suppressed\", \"count\", len(out.Errors)-5)\n\t\t\t}\n\t\t}\n\n\t\tif err := deleteOutputError(out); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tobjIDs = objIDs[n:]\n\t}\n\n\treturn nil\n}\n\n// DeleteAll deletes all files.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tvar objIDs []types.ObjectIdentifier\n\n\t// Create paginator for listing objects\n\tpaginator := s3.NewListObjectsV2Paginator(c.s3, \u0026s3.ListObjectsV2Input{\n\t\tBucket: aws.String(c.Bucket),\n\t\tPrefix: aws.String(c.Path + \"/\"),\n\t})\n\n\t// Iterate through all pages\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"s3: list objects page: %w\", err)\n\t\t}\n\n\t\t// Collect object identifiers\n\t\tfor _, obj := range page.Contents {\n\t\t\tobjIDs = append(objIDs, types.ObjectIdentifier{Key: obj.Key})\n\t\t}\n\t}\n\n\t// Delete all collected objects in batches\n\tfor len(objIDs) \u003e 0 {\n\t\tn := min(len(objIDs), MaxKeys)\n\n\t\tout, err := c.s3.DeleteObjects(ctx, \u0026s3.DeleteObjectsInput{\n\t\t\tBucket: aws.String(c.Bucket),\n\t\t\tDelete: \u0026types.Delete{Objects: objIDs[:n], Quiet: aws.Bool(true)},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"s3: delete all batch of %d objects: %w\", n, err)\n\t\t} else if err := deleteOutputError(out); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tobjIDs = objIDs[n:]\n\t}\n\n\treturn nil\n}\n\n// GenerationsV3 returns a list of v0.3.x generation IDs in the replica.\nfunc (c *ReplicaClient) GenerationsV3(ctx context.Context) ([]string, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tprefix := litestream.GenerationsPathV3(c.Path) + \"/\"\n\n\t// Use CommonPrefixes with delimiter to list \"directories\"\n\tpaginator := s3.NewListObjectsV2Paginator(c.s3, \u0026s3.ListObjectsV2Input{\n\t\tBucket: aws.String(c.Bucket),\n\t\tPrefix: aws.String(prefix),\n\t\tDelimiter: aws.String(\"/\"),\n\t})\n\n\tvar generations []string\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"s3: list generations: %w\", err)\n\t\t}\n\n\t\tfor _, cp := range page.CommonPrefixes {\n\t\t\t// Extract generation ID from prefix (e.g., \"path/generations/abc123def456/\" -\u003e \"abc123def456\")\n\t\t\tp := aws.ToString(cp.Prefix)\n\t\t\tp = strings.TrimPrefix(p, prefix)\n\t\t\tp = strings.TrimSuffix(p, \"/\")\n\t\t\tif litestream.IsGenerationIDV3(p) {\n\t\t\t\tgenerations = append(generations, p)\n\t\t\t}\n\t\t}\n\t}\n\n\tslices.Sort(generations)\n\treturn generations, nil\n}\n\n// SnapshotsV3 returns snapshots for a generation, sorted by index.\nfunc (c *ReplicaClient) SnapshotsV3(ctx context.Context, generation string) ([]litestream.SnapshotInfoV3, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tprefix := litestream.SnapshotsPathV3(c.Path, generation) + \"/\"\n\n\tpaginator := s3.NewListObjectsV2Paginator(c.s3, \u0026s3.ListObjectsV2Input{\n\t\tBucket: aws.String(c.Bucket),\n\t\tPrefix: aws.String(prefix),\n\t})\n\n\tvar snapshots []litestream.SnapshotInfoV3\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"s3: list snapshots: %w\", err)\n\t\t}\n\n\t\tfor _, obj := range page.Contents {\n\t\t\tkey := path.Base(aws.ToString(obj.Key))\n\t\t\tindex, err := litestream.ParseSnapshotFilenameV3(key)\n\t\t\tif err != nil {\n\t\t\t\tcontinue // skip invalid filenames\n\t\t\t}\n\n\t\t\tsnapshots = append(snapshots, litestream.SnapshotInfoV3{\n\t\t\t\tGeneration: generation,\n\t\t\t\tIndex: index,\n\t\t\t\tSize: aws.ToInt64(obj.Size),\n\t\t\t\tCreatedAt: aws.ToTime(obj.LastModified).UTC(),\n\t\t\t})\n\t\t}\n\t}\n\n\tslices.SortFunc(snapshots, func(a, b litestream.SnapshotInfoV3) int {\n\t\treturn a.Index - b.Index\n\t})\n\treturn snapshots, nil\n}\n\n// WALSegmentsV3 returns WAL segments for a generation, sorted by index then offset.\nfunc (c *ReplicaClient) WALSegmentsV3(ctx context.Context, generation string) ([]litestream.WALSegmentInfoV3, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tprefix := litestream.WALPathV3(c.Path, generation) + \"/\"\n\n\tpaginator := s3.NewListObjectsV2Paginator(c.s3, \u0026s3.ListObjectsV2Input{\n\t\tBucket: aws.String(c.Bucket),\n\t\tPrefix: aws.String(prefix),\n\t})\n\n\tvar segments []litestream.WALSegmentInfoV3\n\tfor paginator.HasMorePages() {\n\t\tpage, err := paginator.NextPage(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"s3: list wal segments: %w\", err)\n\t\t}\n\n\t\tfor _, obj := range page.Contents {\n\t\t\tkey := path.Base(aws.ToString(obj.Key))\n\t\t\tindex, offset, err := litestream.ParseWALSegmentFilenameV3(key)\n\t\t\tif err != nil {\n\t\t\t\tcontinue // skip invalid filenames\n\t\t\t}\n\n\t\t\tsegments = append(segments, litestream.WALSegmentInfoV3{\n\t\t\t\tGeneration: generation,\n\t\t\t\tIndex: index,\n\t\t\t\tOffset: offset,\n\t\t\t\tSize: aws.ToInt64(obj.Size),\n\t\t\t\tCreatedAt: aws.ToTime(obj.LastModified).UTC(),\n\t\t\t})\n\t\t}\n\t}\n\n\tslices.SortFunc(segments, func(a, b litestream.WALSegmentInfoV3) int {\n\t\tif a.Index != b.Index {\n\t\t\treturn a.Index - b.Index\n\t\t}\n\t\treturn cmp.Compare(a.Offset, b.Offset)\n\t})\n\treturn segments, nil\n}\n\n// OpenSnapshotV3 opens a v0.3.x snapshot file for reading.\n// The returned reader provides LZ4-decompressed data.\nfunc (c *ReplicaClient) OpenSnapshotV3(ctx context.Context, generation string, index int) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey := litestream.SnapshotPathV3(c.Path, generation, index)\n\n\tinput := \u0026s3.GetObjectInput{\n\t\tBucket: aws.String(c.Bucket),\n\t\tKey: aws.String(key),\n\t}\n\n\t// Add SSE-C parameters if configured\n\tif c.SSECustomerKey != \"\" {\n\t\tinput.SSECustomerAlgorithm = aws.String(c.SSECustomerAlgorithm)\n\t\tinput.SSECustomerKey = aws.String(c.SSECustomerKey)\n\t\tinput.SSECustomerKeyMD5 = aws.String(c.SSECustomerKeyMD5)\n\t}\n\n\tout, err := c.s3.GetObject(ctx, input)\n\tif err != nil {\n\t\tif isNotExists(err) {\n\t\t\treturn nil, os.ErrNotExist\n\t\t}\n\t\treturn nil, fmt.Errorf(\"s3: get snapshot %s: %w\", key, err)\n\t}\n\n\treturn internal.NewLZ4Reader(out.Body), nil\n}\n\n// OpenWALSegmentV3 opens a v0.3.x WAL segment file for reading.\n// The returned reader provides LZ4-decompressed data.\nfunc (c *ReplicaClient) OpenWALSegmentV3(ctx context.Context, generation string, index int, offset int64) (io.ReadCloser, error) {\n\tif err := c.Init(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey := litestream.WALSegmentPathV3(c.Path, generation, index, offset)\n\n\tinput := \u0026s3.GetObjectInput{\n\t\tBucket: aws.String(c.Bucket),\n\t\tKey: aws.String(key),\n\t}\n\n\t// Add SSE-C parameters if configured\n\tif c.SSECustomerKey != \"\" {\n\t\tinput.SSECustomerAlgorithm = aws.String(c.SSECustomerAlgorithm)\n\t\tinput.SSECustomerKey = aws.String(c.SSECustomerKey)\n\t\tinput.SSECustomerKeyMD5 = aws.String(c.SSECustomerKeyMD5)\n\t}\n\n\tout, err := c.s3.GetObject(ctx, input)\n\tif err != nil {\n\t\tif isNotExists(err) {\n\t\t\treturn nil, os.ErrNotExist\n\t\t}\n\t\treturn nil, fmt.Errorf(\"s3: get wal segment %s: %w\", key, err)\n\t}\n\n\treturn internal.NewLZ4Reader(out.Body), nil\n}\n\n// fileIterator represents an iterator over LTX files in S3.\ntype fileIterator struct {\n\tctx context.Context\n\tcancel context.CancelFunc\n\tclient *ReplicaClient\n\tlevel int\n\tseek ltx.TXID\n\tprefix string\n\n\tuseMetadata bool // When true, fetch accurate timestamps from metadata\n\tmetadataCache map[string]time.Time // key -\u003e timestamp cache for batch fetches\n\n\tpaginator *s3.ListObjectsV2Paginator\n\tpage *s3.ListObjectsV2Output\n\tpageIndex int\n\n\tclosed bool\n\terr error\n\tinfo *ltx.FileInfo\n}\n\nfunc newFileIterator(ctx context.Context, client *ReplicaClient, level int, seek ltx.TXID, useMetadata bool) *fileIterator {\n\tctx, cancel := context.WithCancel(ctx)\n\n\tprefix := client.Path + \"/\" + fmt.Sprintf(\"%04x/\", level)\n\titr := \u0026fileIterator{\n\t\tctx: ctx,\n\t\tcancel: cancel,\n\t\tclient: client,\n\t\tlevel: level,\n\t\tseek: seek,\n\t\tprefix: prefix,\n\t\tuseMetadata: useMetadata,\n\t\tmetadataCache: make(map[string]time.Time),\n\t}\n\n\t// Create paginator for listing objects with level prefix\n\titr.paginator = s3.NewListObjectsV2Paginator(client.s3, \u0026s3.ListObjectsV2Input{\n\t\tBucket: aws.String(client.Bucket),\n\t\tPrefix: aws.String(prefix),\n\t})\n\n\treturn itr\n}\n\n// fetchMetadataBatch fetches timestamps from S3 metadata for a batch of keys in parallel.\nfunc (itr *fileIterator) fetchMetadataBatch(keys []string) error {\n\tif len(keys) == 0 {\n\t\treturn nil\n\t}\n\n\t// Determine concurrency limit\n\tconcurrency := itr.client.MetadataConcurrency\n\tif concurrency \u003c= 0 {\n\t\tconcurrency = DefaultMetadataConcurrency\n\t}\n\n\t// Pre-allocate results map to avoid lock contention during writes\n\tresults := make(map[string]time.Time, len(keys))\n\tvar mu sync.Mutex\n\n\t// Use x/sync/semaphore for precise concurrency control with context support\n\tsem := semaphore.NewWeighted(int64(concurrency))\n\tg, ctx := errgroup.WithContext(itr.ctx)\n\n\tfor _, key := range keys {\n\t\tkey := key // capture for goroutine\n\n\t\tg.Go(func() error {\n\t\t\t// Acquire semaphore slot (blocking with context cancellation)\n\t\t\tif err := sem.Acquire(ctx, 1); err != nil {\n\t\t\t\treturn err // context cancelled\n\t\t\t}\n\t\t\tdefer sem.Release(1)\n\n\t\t\theadInput := \u0026s3.HeadObjectInput{\n\t\t\t\tBucket: aws.String(itr.client.Bucket),\n\t\t\t\tKey: aws.String(key),\n\t\t\t}\n\n\t\t\t// Add SSE-C parameters if configured (required for reading SSE-C encrypted objects)\n\t\t\t// Note: SSE-KMS does not require parameters on HeadObject - access is automatic\n\t\t\tif itr.client.SSECustomerKey != \"\" {\n\t\t\t\theadInput.SSECustomerAlgorithm = aws.String(itr.client.SSECustomerAlgorithm)\n\t\t\t\theadInput.SSECustomerKey = aws.String(itr.client.SSECustomerKey)\n\t\t\t\theadInput.SSECustomerKeyMD5 = aws.String(itr.client.SSECustomerKeyMD5)\n\t\t\t}\n\n\t\t\thead, err := itr.client.s3.HeadObject(ctx, headInput)\n\t\t\tif err != nil {\n\t\t\t\t// Non-fatal: file might not have metadata, use LastModified\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif head.Metadata != nil {\n\t\t\t\tif ts, ok := head.Metadata[MetadataKeyTimestamp]; ok {\n\t\t\t\t\tif parsed, err := time.Parse(time.RFC3339Nano, ts); err == nil {\n\t\t\t\t\t\tmu.Lock()\n\t\t\t\t\t\tresults[key] = parsed\n\t\t\t\t\t\tmu.Unlock()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t}\n\n\tif err := g.Wait(); err != nil {\n\t\treturn err\n\t}\n\n\t// Merge results into cache\n\tfor k, v := range results {\n\t\titr.metadataCache[k] = v\n\t}\n\treturn nil\n}\n\n// Close stops iteration and returns any error that occurred during iteration.\nfunc (itr *fileIterator) Close() (err error) {\n\titr.closed = true\n\titr.cancel()\n\treturn itr.err\n}\n\n// Next returns the next file. Returns false when no more files are available.\nfunc (itr *fileIterator) Next() bool {\n\tif itr.closed || itr.err != nil {\n\t\treturn false\n\t}\n\n\t// Process objects until we find a valid LTX file\n\tfor {\n\t\t// Load next page if needed\n\t\tif itr.page == nil || itr.pageIndex \u003e= len(itr.page.Contents) {\n\t\t\tif !itr.paginator.HasMorePages() {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tvar err error\n\t\t\titr.page, err = itr.paginator.NextPage(itr.ctx)\n\t\t\tif err != nil {\n\t\t\t\titr.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\titr.pageIndex = 0\n\n\t\t\t// Log page contents for debugging.\n\t\t\tif len(itr.page.Contents) \u003e 0 {\n\t\t\t\tkeys := make([]string, 0, len(itr.page.Contents))\n\t\t\t\tfor _, obj := range itr.page.Contents {\n\t\t\t\t\tkeys = append(keys, path.Base(aws.ToString(obj.Key)))\n\t\t\t\t}\n\t\t\t\titr.client.logger.Debug(\"s3 LIST page\", \"prefix\", itr.prefix, \"keys\", keys)\n\t\t\t}\n\n\t\t\t// Batch fetch metadata for the entire page when useMetadata is true.\n\t\t\t// This uses parallel HeadObject calls controlled by MetadataConcurrency\n\t\t\t// to avoid the O(N) sequential calls that caused restore hangs (issue #930).\n\t\t\tif itr.useMetadata \u0026\u0026 len(itr.page.Contents) \u003e 0 {\n\t\t\t\tkeys := make([]string, 0, len(itr.page.Contents))\n\t\t\t\tfor _, obj := range itr.page.Contents {\n\t\t\t\t\tkeys = append(keys, aws.ToString(obj.Key))\n\t\t\t\t}\n\t\t\t\tif err := itr.fetchMetadataBatch(keys); err != nil {\n\t\t\t\t\titr.err = err\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Process current object\n\t\tif itr.pageIndex \u003c len(itr.page.Contents) {\n\t\t\tobj := itr.page.Contents[itr.pageIndex]\n\t\t\titr.pageIndex++\n\n\t\t\t// Extract file info from key\n\t\t\tfullKey := aws.ToString(obj.Key)\n\t\t\tkey := path.Base(fullKey)\n\t\t\tminTXID, maxTXID, err := ltx.ParseFilename(key)\n\t\t\tif err != nil {\n\t\t\t\tcontinue // Skip non-LTX files\n\t\t\t}\n\n\t\t\t// Build file info\n\t\t\tinfo := \u0026ltx.FileInfo{\n\t\t\t\tLevel: itr.level,\n\t\t\t\tMinTXID: minTXID,\n\t\t\t\tMaxTXID: maxTXID,\n\t\t\t}\n\n\t\t\t// Skip if below seek TXID\n\t\t\tif info.MinTXID \u003c itr.seek {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Skip if wrong level\n\t\t\tif info.Level != itr.level {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Set file info\n\t\t\tinfo.Size = aws.ToInt64(obj.Size)\n\n\t\t\t// Use cached metadata timestamp if available (from batch fetch),\n\t\t\t// otherwise fallback to LastModified from LIST operation.\n\t\t\tif itr.useMetadata {\n\t\t\t\tif ts, ok := itr.metadataCache[fullKey]; ok {\n\t\t\t\t\tinfo.CreatedAt = ts\n\t\t\t\t} else {\n\t\t\t\t\tinfo.CreatedAt = aws.ToTime(obj.LastModified).UTC()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinfo.CreatedAt = aws.ToTime(obj.LastModified).UTC()\n\t\t\t}\n\n\t\t\titr.info = info\n\t\t\treturn true\n\t\t}\n\t}\n}\n\n// Item returns the metadata for the current file.\nfunc (itr *fileIterator) Item() *ltx.FileInfo {\n\treturn itr.info\n}\n\n// Err returns any error that occurred during iteration.\nfunc (itr *fileIterator) Err() error {\n\treturn itr.err\n}\n\n// ParseURL parses an S3 URL into its host and path parts.\n// If endpoint is set, it can override the host.\nfunc ParseURL(s, endpoint string) (bucket, region, key string, err error) {\n\tu, err := url.Parse(s)\n\tif err != nil {\n\t\treturn \"\", \"\", \"\", err\n\t}\n\n\tif u.Scheme != \"s3\" {\n\t\treturn \"\", \"\", \"\", fmt.Errorf(\"s3: invalid url scheme\")\n\t}\n\n\t// Special handling for filebase.com\n\tif u.Host == \"filebase.com\" {\n\t\tparts := strings.SplitN(strings.TrimPrefix(u.Path, \"/\"), \"/\", 2)\n\t\tif len(parts) == 0 {\n\t\t\treturn \"\", \"\", \"\", fmt.Errorf(\"s3: bucket required\")\n\t\t}\n\t\tbucket = parts[0]\n\t\tif len(parts) \u003e 1 {\n\t\t\tkey = parts[1]\n\t\t}\n\t\treturn bucket, \"\", key, nil\n\t}\n\n\t// For other hosts, check if it's a special endpoint\n\tbucket, region, _, _ = ParseHost(u.Host)\n\tif bucket == \"\" {\n\t\tbucket = u.Host\n\t}\n\n\tkey = strings.TrimPrefix(u.Path, \"/\")\n\treturn bucket, region, key, nil\n}\n\n// ParseHost parses the host/endpoint for an S3-like storage system.\n// Endpoints: https://docs.aws.amazon.com/general/latest/gr/s3.html\nfunc ParseHost(host string) (bucket, region, endpoint string, forcePathStyle bool) {\n\t// Check for MinIO-style hosts (bucket.host:port)\n\tif strings.Contains(host, \":\") \u0026\u0026 !strings.Contains(host, \".com\") {\n\t\tparts := strings.SplitN(host, \".\", 2)\n\t\tif len(parts) == 2 {\n\t\t\t// Extract bucket from bucket.host:port format\n\t\t\tbucket = parts[0]\n\t\t\tendpoint = \"http://\" + parts[1]\n\t\t\treturn bucket, DefaultRegion, endpoint, true\n\t\t}\n\t\t// No bucket in host, just host:port\n\t\treturn \"\", \"\", \"http://\" + host, true\n\t}\n\n\t// Check common object storage providers\n\t// Check for AWS S3 URLs first\n\tif a := awsS3Regex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tbucket = a[1]\n\t\tif len(a) \u003e 2 \u0026\u0026 a[2] != \"\" {\n\t\t\tregion = a[2]\n\t\t}\n\t\treturn bucket, region, \"\", false\n\t} else if a := digitaloceanRegex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tbucket = a[1]\n\t\tregion = a[2]\n\t\treturn bucket, region, fmt.Sprintf(\"https://%s.digitaloceanspaces.com\", region), false\n\t} else if a := backblazeRegex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tregion = a[2]\n\t\tbucket = a[1]\n\t\tendpoint = fmt.Sprintf(\"https://s3.%s.backblazeb2.com\", region)\n\t\treturn bucket, region, endpoint, true\n\t} else if a := filebaseRegex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tbucket = a[1]\n\t\tendpoint = \"s3.filebase.com\"\n\t\treturn bucket, \"\", endpoint, false\n\t} else if a := scalewayRegex.FindStringSubmatch(host); len(a) \u003e 1 {\n\t\tregion = a[2]\n\t\tbucket = a[1]\n\t\tendpoint = fmt.Sprintf(\"s3.%s.scw.cloud\", region)\n\t\treturn bucket, region, endpoint, false\n\t}\n\n\t// For standard S3, the host is the bucket name\n\treturn host, \"\", \"\", false\n}\n\nvar (\n\tawsS3Regex = regexp.MustCompile(`^(.+)\\.s3(?:\\.([^.]+))?\\.amazonaws\\.com$`)\n\tdigitaloceanRegex = regexp.MustCompile(`^(?:(.+)\\.)?([^.]+)\\.digitaloceanspaces.com$`)\n\tbackblazeRegex = regexp.MustCompile(`^(?:(.+)\\.)?s3.([^.]+)\\.backblazeb2.com$`)\n\tfilebaseRegex = regexp.MustCompile(`^(?:(.+)\\.)?s3.filebase.com$`)\n\tscalewayRegex = regexp.MustCompile(`^(?:(.+)\\.)?s3.([^.]+)\\.scw\\.cloud$`)\n)\n\nfunc isNotExists(err error) bool {\n\tvar apiErr smithy.APIError\n\tif errors.As(err, \u0026apiErr) {\n\t\treturn apiErr.ErrorCode() == \"NoSuchKey\"\n\t}\n\treturn false\n}\n\nfunc deleteOutputError(out *s3.DeleteObjectsOutput) error {\n\tif len(out.Errors) == 0 {\n\t\treturn nil\n\t}\n\n\t// Build generic error\n\tvar b strings.Builder\n\tb.WriteString(\"failed to delete files:\")\n\tfor _, err := range out.Errors {\n\t\tfmt.Fprintf(\u0026b, \"\\n%s: %s\", aws.ToString(err.Key), aws.ToString(err.Message))\n\t}\n\treturn errors.New(b.String())\n}\n\n// parseS3DebugEnv parses the LITESTREAM_S3_DEBUG environment variable and returns\n// the corresponding AWS SDK ClientLogMode. Supports comma-separated values.\nfunc parseS3DebugEnv() aws.ClientLogMode {\n\tv := os.Getenv(\"LITESTREAM_S3_DEBUG\")\n\tif v == \"\" {\n\t\treturn 0\n\t}\n\n\tvar logMode aws.ClientLogMode\n\tfor _, mode := range strings.Split(v, \",\") {\n\t\tswitch strings.ToLower(strings.TrimSpace(mode)) {\n\t\tcase \"signing\":\n\t\t\tlogMode |= aws.LogSigning\n\t\tcase \"request\":\n\t\t\tlogMode |= aws.LogRequest\n\t\tcase \"request-with-body\":\n\t\t\tlogMode |= aws.LogRequestWithBody\n\t\tcase \"response\":\n\t\t\tlogMode |= aws.LogResponse\n\t\tcase \"response-with-body\":\n\t\t\tlogMode |= aws.LogResponseWithBody\n\t\tcase \"retries\":\n\t\t\tlogMode |= aws.LogRetries\n\t\tcase \"all\":\n\t\t\tlogMode |= aws.LogSigning | aws.LogRequest | aws.LogRequestWithBody |\n\t\t\t\taws.LogResponse | aws.LogResponseWithBody | aws.LogRetries\n\t\tdefault:\n\t\t\tslog.Warn(\"unknown LITESTREAM_S3_DEBUG value, expected: signing, request, request-with-body, response, response-with-body, retries, all\", \"value\", mode)\n\t\t}\n\t}\n\treturn logMode\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[21,29]}},{"name":"cmp","path":"cmp","span":{"start":[5,1],"end":[5,7],"bytes":[30,36]}},{"name":"context","path":"context","span":{"start":[6,1],"end":[6,11],"bytes":[37,47]}},{"name":"md5","path":"crypto/md5","span":{"start":[7,1],"end":[7,14],"bytes":[48,61]}},{"name":"tls","path":"crypto/tls","span":{"start":[8,1],"end":[8,14],"bytes":[62,75]}},{"name":"base64","path":"encoding/base64","span":{"start":[9,1],"end":[9,19],"bytes":[76,94]}},{"name":"errors","path":"errors","span":{"start":[10,1],"end":[10,10],"bytes":[95,104]}},{"name":"fmt","path":"fmt","span":{"start":[11,1],"end":[11,7],"bytes":[105,111]}},{"name":"io","path":"io","span":{"start":[12,1],"end":[12,6],"bytes":[112,117]}},{"name":"slog","path":"log/slog","span":{"start":[13,1],"end":[13,12],"bytes":[118,129]}},{"name":"net","path":"net","span":{"start":[14,1],"end":[14,7],"bytes":[130,136]}},{"name":"http","path":"net/http","span":{"start":[15,1],"end":[15,12],"bytes":[137,148]}},{"name":"url","path":"net/url","span":{"start":[16,1],"end":[16,11],"bytes":[149,159]}},{"name":"os","path":"os","span":{"start":[17,1],"end":[17,6],"bytes":[160,165]}},{"name":"path","path":"path","span":{"start":[18,1],"end":[18,8],"bytes":[166,173]}},{"name":"regexp","path":"regexp","span":{"start":[19,1],"end":[19,10],"bytes":[174,183]}},{"name":"slices","path":"slices","span":{"start":[20,1],"end":[20,10],"bytes":[184,193]}},{"name":"strings","path":"strings","span":{"start":[21,1],"end":[21,11],"bytes":[194,204]}},{"name":"sync","path":"sync","span":{"start":[22,1],"end":[22,8],"bytes":[205,212]}},{"name":"time","path":"time","span":{"start":[23,1],"end":[23,8],"bytes":[213,220]}},{"name":"aws","path":"github.com/aws/aws-sdk-go-v2/aws","span":{"start":[25,1],"end":[25,36],"bytes":[222,257]}},{"name":"ratelimit","path":"github.com/aws/aws-sdk-go-v2/aws/ratelimit","span":{"start":[26,1],"end":[26,46],"bytes":[258,303]}},{"name":"retry","path":"github.com/aws/aws-sdk-go-v2/aws/retry","span":{"start":[27,1],"end":[27,42],"bytes":[304,345]}},{"name":"v4","path":"github.com/aws/aws-sdk-go-v2/aws/signer/v4","alias":"v4","span":{"start":[28,1],"end":[28,49],"bytes":[346,394]}},{"name":"config","path":"github.com/aws/aws-sdk-go-v2/config","span":{"start":[29,1],"end":[29,39],"bytes":[395,433]}},{"name":"credentials","path":"github.com/aws/aws-sdk-go-v2/credentials","span":{"start":[30,1],"end":[30,44],"bytes":[434,477]}},{"name":"manager","path":"github.com/aws/aws-sdk-go-v2/feature/s3/manager","span":{"start":[31,1],"end":[31,51],"bytes":[478,528]}},{"name":"s3","path":"github.com/aws/aws-sdk-go-v2/service/s3","span":{"start":[32,1],"end":[32,43],"bytes":[529,571]}},{"name":"types","path":"github.com/aws/aws-sdk-go-v2/service/s3/types","span":{"start":[33,1],"end":[33,49],"bytes":[572,620]}},{"name":"smithy-go","path":"github.com/aws/smithy-go","span":{"start":[34,1],"end":[34,28],"bytes":[621,648]}},{"name":"xml","path":"github.com/aws/smithy-go/encoding/xml","alias":"smithyxml","span":{"start":[35,1],"end":[35,51],"bytes":[649,699]}},{"name":"middleware","path":"github.com/aws/smithy-go/middleware","span":{"start":[36,1],"end":[36,39],"bytes":[700,738]}},{"name":"time","path":"github.com/aws/smithy-go/time","alias":"smithytime","span":{"start":[37,1],"end":[37,44],"bytes":[739,782]}},{"name":"http","path":"github.com/aws/smithy-go/transport/http","alias":"smithyhttp","span":{"start":[38,1],"end":[38,54],"bytes":[783,836]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[39,1],"end":[39,27],"bytes":[837,863]}},{"name":"errgroup","path":"golang.org/x/sync/errgroup","span":{"start":[40,1],"end":[40,30],"bytes":[864,893]}},{"name":"semaphore","path":"golang.org/x/sync/semaphore","span":{"start":[41,1],"end":[41,31],"bytes":[894,924]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[43,1],"end":[43,37],"bytes":[926,962]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[44,1],"end":[44,46],"bytes":[963,1008]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient","kind":"struct","span":{"start":[87,1],"end":[127,2],"bytes":[2592,4007]},"callables":{"github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteAll":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteAll","kind":"method","span":{"start":[1282,1],"end":[1326,2],"bytes":[41353,42491]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1282,1],"end":[1282,63],"bytes":[41353,41415]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"1283:12":{"kind":"call","span":{"start":[1283,12],"end":[1283,23],"bytes":[41427,41438]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1290:15":{"kind":"call","span":{"start":[1290,15],"end":[1293,4],"bytes":[41563,41693]},"callee":null},"1291:11":{"kind":"call","span":{"start":[1291,11],"end":[1291,31],"bytes":[41632,41652]},"callee":null},"1292:11":{"kind":"call","span":{"start":[1292,11],"end":[1292,35],"bytes":[41664,41688]},"callee":null},"1296:6":{"kind":"call","span":{"start":[1296,6],"end":[1296,30],"bytes":[41730,41754]},"callee":null},"1297:16":{"kind":"call","span":{"start":[1297,16],"end":[1297,39],"bytes":[41772,41795]},"callee":null},"1299:11":{"kind":"call","span":{"start":[1299,11],"end":[1299,55],"bytes":[41824,41868]},"callee":null},"1304:13":{"kind":"call","span":{"start":[1304,13],"end":[1304,65],"bytes":[41956,42008]},"callee":null},"1309:6":{"kind":"call","span":{"start":[1309,6],"end":[1309,17],"bytes":[42066,42077]},"callee":null},"1310:12":{"kind":"call","span":{"start":[1310,12],"end":[1310,23],"bytes":[42095,42106]},"callee":null},"1310:8":{"kind":"call","span":{"start":[1310,8],"end":[1310,33],"bytes":[42091,42116]},"callee":null},"1312:15":{"kind":"call","span":{"start":[1312,15],"end":[1315,5],"bytes":[42132,42287]},"callee":null},"1313:12":{"kind":"call","span":{"start":[1313,12],"end":[1313,32],"bytes":[42191,42211]},"callee":null},"1314:54":{"kind":"call","span":{"start":[1314,54],"end":[1314,68],"bytes":[42266,42280]},"callee":null},"1317:11":{"kind":"call","span":{"start":[1317,11],"end":[1317,71],"bytes":[42316,42376]},"callee":null},"1318:20":{"kind":"call","span":{"start":[1318,20],"end":[1318,42],"bytes":[42396,42418]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.deleteOutputError"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[1206,1],"end":[1279,2],"bytes":[39234,41319]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1206,1],"end":[1206,87],"bytes":[39234,39320]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[1206,1],"end":[1206,87],"bytes":[39234,39320]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"1207:12":{"kind":"call","span":{"start":[1207,12],"end":[1207,23],"bytes":[39332,39343]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1211:5":{"kind":"call","span":{"start":[1211,5],"end":[1211,11],"bytes":[39379,39385]},"callee":null},"1216:12":{"kind":"call","span":{"start":[1216,12],"end":[1216,53],"bytes":[39466,39507]},"callee":null},"1216:46":{"kind":"call","span":{"start":[1216,46],"end":[1216,52],"bytes":[39500,39506]},"callee":null},"1218:15":{"kind":"call","span":{"start":[1218,15],"end":[1218,61],"bytes":[39548,39594]},"callee":null},"1219:25":{"kind":"call","span":{"start":[1219,25],"end":[1219,69],"bytes":[39619,39663]},"callee":null},"1220:12":{"kind":"call","span":{"start":[1220,12],"end":[1220,72],"bytes":[39675,39735]},"callee":null},"1220:55":{"kind":"call","span":{"start":[1220,55],"end":[1220,70],"bytes":[39718,39733]},"callee":null},"1222:3":{"kind":"call","span":{"start":[1222,3],"end":[1222,121],"bytes":[39739,39857]},"callee":null},"1226:6":{"kind":"call","span":{"start":[1226,6],"end":[1226,17],"bytes":[39889,39900]},"callee":null},"1227:12":{"kind":"call","span":{"start":[1227,12],"end":[1227,23],"bytes":[39918,39929]},"callee":null},"1227:8":{"kind":"call","span":{"start":[1227,8],"end":[1227,33],"bytes":[39914,39939]},"callee":null},"1229:3":{"kind":"call","span":{"start":[1229,3],"end":[1229,57],"bytes":[39943,39997]},"callee":null},"1231:12":{"kind":"call","span":{"start":[1231,12],"end":[1231,22],"bytes":[40010,40020]},"callee":null},"1232:15":{"kind":"call","span":{"start":[1232,15],"end":[1235,5],"bytes":[40035,40167]},"callee":null},"1233:12":{"kind":"call","span":{"start":[1233,12],"end":[1233,32],"bytes":[40094,40114]},"callee":null},"1236:15":{"kind":"call","span":{"start":[1236,15],"end":[1236,32],"bytes":[40182,40199]},"callee":null},"1237:3":{"kind":"call","span":{"start":[1237,3],"end":[1237,86],"bytes":[40202,40285]},"callee":null},"1237:95":{"kind":"call","span":{"start":[1237,95],"end":[1237,113],"bytes":[40294,40312]},"callee":null},"1240:11":{"kind":"call","span":{"start":[1240,11],"end":[1240,67],"bytes":[40343,40399]},"callee":null},"1245:14":{"kind":"call","span":{"start":[1245,14],"end":[1245,30],"bytes":[40451,40467]},"callee":null},"1247:3":{"kind":"call","span":{"start":[1247,3],"end":[1251,43],"bytes":[40474,40629]},"callee":null},"1250:14":{"kind":"call","span":{"start":[1250,14],"end":[1250,29],"bytes":[40570,40585]},"callee":null},"1251:19":{"kind":"call","span":{"start":[1251,19],"end":[1251,42],"bytes":[40605,40628]},"callee":null},"1252:3":{"kind":"call","span":{"start":[1252,3],"end":[1252,81],"bytes":[40632,40710]},"callee":null},"1252:86":{"kind":"call","span":{"start":[1252,86],"end":[1252,102],"bytes":[40715,40731]},"callee":null},"1254:6":{"kind":"call","span":{"start":[1254,6],"end":[1254,21],"bytes":[40739,40754]},"callee":null},"1256:13":{"kind":"call","span":{"start":[1256,13],"end":[1256,33],"bytes":[40807,40827]},"callee":null},"1257:5":{"kind":"call","span":{"start":[1257,5],"end":[1257,89],"bytes":[40832,40916]},"callee":null},"1260:6":{"kind":"call","span":{"start":[1260,6],"end":[1263,42],"bytes":[40944,41077]},"callee":null},"1261:14":{"kind":"call","span":{"start":[1261,14],"end":[1261,33],"bytes":[40995,41014]},"callee":null},"1263:18":{"kind":"call","span":{"start":[1263,18],"end":[1263,41],"bytes":[41053,41076]},"callee":null},"1266:7":{"kind":"call","span":{"start":[1266,7],"end":[1266,22],"bytes":[41095,41110]},"callee":null},"1267:5":{"kind":"call","span":{"start":[1267,5],"end":[1267,85],"bytes":[41121,41201]},"callee":null},"1267:67":{"kind":"call","span":{"start":[1267,67],"end":[1267,82],"bytes":[41183,41198]},"callee":null},"1271:13":{"kind":"call","span":{"start":[1271,13],"end":[1271,35],"bytes":[41224,41246]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.deleteOutputError"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.GenerationsV3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.GenerationsV3","kind":"method","span":{"start":[1329,1],"end":[1363,2],"bytes":[42566,43564]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.GenerationsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1329,1],"end":[1329,79],"bytes":[42566,42644]}}],"return_type":"([]string, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"1330:12":{"kind":"call","span":{"start":[1330,12],"end":[1330,23],"bytes":[42656,42667]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1334:12":{"kind":"call","span":{"start":[1334,12],"end":[1334,48],"bytes":[42715,42751]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.GenerationsPathV3"},"1337:15":{"kind":"call","span":{"start":[1337,15],"end":[1341,4],"bytes":[42833,42993]},"callee":null},"1338:14":{"kind":"call","span":{"start":[1338,14],"end":[1338,34],"bytes":[42905,42925]},"callee":null},"1339:14":{"kind":"call","span":{"start":[1339,14],"end":[1339,32],"bytes":[42940,42958]},"callee":null},"1340:14":{"kind":"call","span":{"start":[1340,14],"end":[1340,29],"bytes":[42973,42988]},"callee":null},"1344:6":{"kind":"call","span":{"start":[1344,6],"end":[1344,30],"bytes":[43026,43050]},"callee":null},"1345:16":{"kind":"call","span":{"start":[1345,16],"end":[1345,39],"bytes":[43068,43091]},"callee":null},"1347:16":{"kind":"call","span":{"start":[1347,16],"end":[1347,59],"bytes":[43125,43168]},"callee":null},"1352:9":{"kind":"call","span":{"start":[1352,9],"end":[1352,32],"bytes":[43324,43347]},"callee":null},"1353:8":{"kind":"call","span":{"start":[1353,8],"end":[1353,37],"bytes":[43355,43384]},"callee":null},"1354:8":{"kind":"call","span":{"start":[1354,8],"end":[1354,34],"bytes":[43392,43418]},"callee":null},"1355:7":{"kind":"call","span":{"start":[1355,7],"end":[1355,37],"bytes":[43425,43455]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.IsGenerationIDV3"},"1356:19":{"kind":"call","span":{"start":[1356,19],"end":[1356,41],"bytes":[43476,43498]},"callee":null},"1361:2":{"kind":"call","span":{"start":[1361,2],"end":[1361,26],"bytes":[43513,43537]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.Init":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","kind":"method","span":{"start":[352,1],"end":[504,2],"bytes":[10937,16109]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[352,1],"end":[352,64],"bytes":[10937,11000]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":15},"body":{"353:2":{"kind":"call","span":{"start":[353,2],"end":[353,13],"bytes":[11002,11013]},"callee":null},"354:8":{"kind":"call","span":{"start":[354,8],"end":[354,21],"bytes":[11021,11034]},"callee":null},"362:10":{"kind":"call","span":{"start":[362,10],"end":[362,51],"bytes":[11137,11178]},"callee":null},"366:12":{"kind":"call","span":{"start":[366,12],"end":[366,33],"bytes":[11225,11246]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.validateSSEConfig"},"376:21":{"kind":"call","span":{"start":[376,21],"end":[376,54],"bytes":[11525,11558]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.findBucketRegion"},"377:12":{"kind":"call","span":{"start":[377,12],"end":[377,66],"bytes":[11584,11638]},"callee":null},"414:3":{"kind":"call","span":{"start":[414,3],"end":[414,28],"bytes":[12719,12744]},"callee":null},"415:3":{"kind":"call","span":{"start":[415,3],"end":[415,42],"bytes":[12748,12787]},"callee":null},"419:15":{"kind":"call","span":{"start":[419,15],"end":[419,68],"bytes":[12847,12900]},"callee":null},"419:34":{"kind":"call","span":{"start":[419,34],"end":[419,67],"bytes":[12866,12899]},"callee":null},"429:16":{"kind":"call","span":{"start":[429,16],"end":[431,5],"bytes":[13328,13466]},"callee":null},"429:35":{"kind":"call","span":{"start":[429,35],"end":[431,4],"bytes":[13347,13465]},"callee":null},"430:4":{"kind":"call","span":{"start":[430,4],"end":[430,82],"bytes":[13382,13460]},"callee":null},"438:16":{"kind":"call","span":{"start":[438,16],"end":[438,33],"bytes":[13795,13812]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.parseS3DebugEnv"},"439:16":{"kind":"call","span":{"start":[439,16],"end":[439,69],"bytes":[13844,13897]},"callee":null},"439:35":{"kind":"call","span":{"start":[439,35],"end":[439,68],"bytes":[13863,13896]},"callee":null},"443:14":{"kind":"call","span":{"start":[443,14],"end":[443,58],"bytes":[13942,13986]},"callee":null},"445:10":{"kind":"call","span":{"start":[445,10],"end":[445,59],"bytes":[14013,14062]},"callee":null},"465:12":{"kind":"call","span":{"start":[465,12],"end":[468,5],"bytes":[14779,14974]},"callee":null},"472:2":{"kind":"call","span":{"start":[472,2],"end":[472,30],"bytes":[15017,15045]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint"},"475:9":{"kind":"call","span":{"start":[475,9],"end":[475,41],"bytes":[15076,15108]},"callee":null},"486:18":{"kind":"call","span":{"start":[486,18],"end":[488,5],"bytes":[15650,15780]},"callee":null},"492:18":{"kind":"call","span":{"start":[492,18],"end":[494,5],"bytes":[15823,15903]},"callee":null},"497:18":{"kind":"call","span":{"start":[497,18],"end":[499,5],"bytes":[15948,16034]},"callee":null},"501:15":{"kind":"call","span":{"start":[501,15],"end":[501,57],"bytes":[16052,16094]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init/github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_1","kind":"function","span":{"start":[450,1],"end":[455,5],"bytes":[14128,14325]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_1","parameters":[{"name":"o","type":"*github.com/aws/aws-sdk-go-v2/service/s3.Options","span":{"start":[450,1],"end":[450,24],"bytes":[14128,14151]}}],"body":{"454:19":{"kind":"call","span":{"start":[454,19],"end":[454,61],"bytes":[14278,14320]},"callee":null},"454:40":{"kind":"call","span":{"start":[454,40],"end":[454,60],"bytes":[14299,14319]},"callee":null}}},"closure_2":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init/github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_2","kind":"function","span":{"start":[465,1],"end":[468,5],"bytes":[14768,14974]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_2","parameters":[{"name":"o","type":"*github.com/aws/aws-sdk-go-v2/service/s3.Options","span":{"start":[465,1],"end":[465,48],"bytes":[14768,14815]}}],"body":{}},"closure_3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init/github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_3","kind":"function","span":{"start":[486,1],"end":[488,5],"bytes":[15633,15780]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_3","parameters":[{"name":"u","type":"*github.com/aws/aws-sdk-go-v2/feature/s3/manager.Uploader","span":{"start":[486,1],"end":[486,66],"bytes":[15633,15698]}}],"body":{}},"closure_4":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init/github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_4","kind":"function","span":{"start":[492,1],"end":[494,5],"bytes":[15806,15903]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_4","parameters":[{"name":"u","type":"*github.com/aws/aws-sdk-go-v2/feature/s3/manager.Uploader","span":{"start":[492,1],"end":[492,66],"bytes":[15806,15871]}}],"body":{}},"closure_5":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init/github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_5","kind":"function","span":{"start":[497,1],"end":[499,5],"bytes":[15931,16034]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Init.closure_5","parameters":[{"name":"u","type":"*github.com/aws/aws-sdk-go-v2/feature/s3/manager.Uploader","span":{"start":[497,1],"end":[497,66],"bytes":[15931,15996]}}],"body":{}}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.LTXFiles":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.LTXFiles","kind":"method","span":{"start":[665,1],"end":[670,2],"bytes":[21965,22213]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[665,1],"end":[665,126],"bytes":[21965,22090]}},{"name":"level","type":"int","span":{"start":[665,1],"end":[665,126],"bytes":[21965,22090]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[665,1],"end":[665,126],"bytes":[21965,22090]}},{"name":"useMetadata","type":"bool","span":{"start":[665,1],"end":[665,126],"bytes":[21965,22090]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"666:12":{"kind":"call","span":{"start":[666,12],"end":[666,23],"bytes":[22102,22113]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"669:9":{"kind":"call","span":{"start":[669,9],"end":[669,58],"bytes":[22157,22206]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.newFileIterator"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[674,1],"end":[712,2],"bytes":[22327,23541]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[674,1],"end":[674,140],"bytes":[22327,22466]}},{"name":"level","type":"int","span":{"start":[674,1],"end":[674,140],"bytes":[22327,22466]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[674,1],"end":[674,140],"bytes":[22327,22466]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[674,1],"end":[674,140],"bytes":[22327,22466]}},{"name":"offset","type":"int64","span":{"start":[674,1],"end":[674,140],"bytes":[22327,22466]}},{"name":"size","type":"int64","span":{"start":[674,1],"end":[674,140],"bytes":[22327,22466]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"675:12":{"kind":"call","span":{"start":[675,12],"end":[675,23],"bytes":[22478,22489]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"681:14":{"kind":"call","span":{"start":[681,14],"end":[681,63],"bytes":[22575,22624]},"callee":null},"683:14":{"kind":"call","span":{"start":[683,14],"end":[683,46],"bytes":[22648,22680]},"callee":null},"687:14":{"kind":"call","span":{"start":[687,14],"end":[687,50],"bytes":[22735,22771]},"callee":null},"688:24":{"kind":"call","span":{"start":[688,24],"end":[688,63],"bytes":[22795,22834]},"callee":null},"691:11":{"kind":"call","span":{"start":[691,11],"end":[691,31],"bytes":[22876,22896]},"callee":null},"692:11":{"kind":"call","span":{"start":[692,11],"end":[692,26],"bytes":[22908,22923]},"callee":null},"693:11":{"kind":"call","span":{"start":[693,11],"end":[693,31],"bytes":[22935,22955]},"callee":null},"699:32":{"kind":"call","span":{"start":[699,32],"end":[699,66],"bytes":[23187,23221]},"callee":null},"700:26":{"kind":"call","span":{"start":[700,26],"end":[700,54],"bytes":[23247,23275]},"callee":null},"701:29":{"kind":"call","span":{"start":[701,29],"end":[701,60],"bytes":[23304,23335]},"callee":null},"704:14":{"kind":"call","span":{"start":[704,14],"end":[704,40],"bytes":[23353,23379]},"callee":null},"706:6":{"kind":"call","span":{"start":[706,6],"end":[706,22],"bytes":[23402,23418]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists"},"709:15":{"kind":"call","span":{"start":[709,15],"end":[709,60],"bytes":[23469,23514]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3","kind":"method","span":{"start":[1455,1],"end":[1483,2],"bytes":[46180,46988]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1455,1],"end":[1455,115],"bytes":[46180,46294]}},{"name":"generation","type":"string","span":{"start":[1455,1],"end":[1455,115],"bytes":[46180,46294]}},{"name":"index","type":"int","span":{"start":[1455,1],"end":[1455,115],"bytes":[46180,46294]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"1456:12":{"kind":"call","span":{"start":[1456,12],"end":[1456,23],"bytes":[46306,46317]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1460:9":{"kind":"call","span":{"start":[1460,9],"end":[1460,61],"bytes":[46362,46414]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotPathV3"},"1463:11":{"kind":"call","span":{"start":[1463,11],"end":[1463,31],"bytes":[46456,46476]},"callee":null},"1464:11":{"kind":"call","span":{"start":[1464,11],"end":[1464,26],"bytes":[46488,46503]},"callee":null},"1469:32":{"kind":"call","span":{"start":[1469,32],"end":[1469,66],"bytes":[46608,46642]},"callee":null},"1470:26":{"kind":"call","span":{"start":[1470,26],"end":[1470,54],"bytes":[46668,46696]},"callee":null},"1471:29":{"kind":"call","span":{"start":[1471,29],"end":[1471,60],"bytes":[46725,46756]},"callee":null},"1474:14":{"kind":"call","span":{"start":[1474,14],"end":[1474,40],"bytes":[46774,46800]},"callee":null},"1476:6":{"kind":"call","span":{"start":[1476,6],"end":[1476,22],"bytes":[46823,46839]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists"},"1479:15":{"kind":"call","span":{"start":[1479,15],"end":[1479,62],"bytes":[46890,46937]},"callee":null},"1482:9":{"kind":"call","span":{"start":[1482,9],"end":[1482,40],"bytes":[46950,46981]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3","kind":"method","span":{"start":[1487,1],"end":[1515,2],"bytes":[47110,47947]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1487,1],"end":[1487,131],"bytes":[47110,47240]}},{"name":"generation","type":"string","span":{"start":[1487,1],"end":[1487,131],"bytes":[47110,47240]}},{"name":"index","type":"int","span":{"start":[1487,1],"end":[1487,131],"bytes":[47110,47240]}},{"name":"offset","type":"int64","span":{"start":[1487,1],"end":[1487,131],"bytes":[47110,47240]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"1488:12":{"kind":"call","span":{"start":[1488,12],"end":[1488,23],"bytes":[47252,47263]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1492:9":{"kind":"call","span":{"start":[1492,9],"end":[1492,71],"bytes":[47308,47370]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentPathV3"},"1495:11":{"kind":"call","span":{"start":[1495,11],"end":[1495,31],"bytes":[47412,47432]},"callee":null},"1496:11":{"kind":"call","span":{"start":[1496,11],"end":[1496,26],"bytes":[47444,47459]},"callee":null},"1501:32":{"kind":"call","span":{"start":[1501,32],"end":[1501,66],"bytes":[47564,47598]},"callee":null},"1502:26":{"kind":"call","span":{"start":[1502,26],"end":[1502,54],"bytes":[47624,47652]},"callee":null},"1503:29":{"kind":"call","span":{"start":[1503,29],"end":[1503,60],"bytes":[47681,47712]},"callee":null},"1506:14":{"kind":"call","span":{"start":[1506,14],"end":[1506,40],"bytes":[47730,47756]},"callee":null},"1508:6":{"kind":"call","span":{"start":[1508,6],"end":[1508,22],"bytes":[47779,47795]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists"},"1511:15":{"kind":"call","span":{"start":[1511,15],"end":[1511,65],"bytes":[47846,47896]},"callee":null},"1514:9":{"kind":"call","span":{"start":[1514,9],"end":[1514,40],"bytes":[47909,47940]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.SetLogger":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.SetLogger","kind":"method","span":{"start":[139,1],"end":[141,2],"bytes":[4292,4398]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[139,1],"end":[139,57],"bytes":[4292,4348]}}],"metrics":{"cyclomatic":1},"body":{"140:13":{"kind":"call","span":{"start":[140,13],"end":[140,48],"bytes":[4361,4396]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3","kind":"method","span":{"start":[1366,1],"end":[1405,2],"bytes":[43634,44751]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1366,1],"end":[1366,115],"bytes":[43634,43748]}},{"name":"generation","type":"string","span":{"start":[1366,1],"end":[1366,115],"bytes":[43634,43748]}}],"return_type":"([]github.com/benbjohnson/litestream.SnapshotInfoV3, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"1367:12":{"kind":"call","span":{"start":[1367,12],"end":[1367,23],"bytes":[43760,43771]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1371:12":{"kind":"call","span":{"start":[1371,12],"end":[1371,58],"bytes":[43819,43865]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotsPathV3"},"1373:15":{"kind":"call","span":{"start":[1373,15],"end":[1376,4],"bytes":[43887,44011]},"callee":null},"1374:11":{"kind":"call","span":{"start":[1374,11],"end":[1374,31],"bytes":[43956,43976]},"callee":null},"1375:11":{"kind":"call","span":{"start":[1375,11],"end":[1375,29],"bytes":[43988,44006]},"callee":null},"1379:6":{"kind":"call","span":{"start":[1379,6],"end":[1379,30],"bytes":[44061,44085]},"callee":null},"1380:16":{"kind":"call","span":{"start":[1380,16],"end":[1380,39],"bytes":[44103,44126]},"callee":null},"1382:16":{"kind":"call","span":{"start":[1382,16],"end":[1382,57],"bytes":[44160,44201]},"callee":null},"1386:11":{"kind":"call","span":{"start":[1386,11],"end":[1386,43],"bytes":[44255,44287]},"callee":null},"1386:21":{"kind":"call","span":{"start":[1386,21],"end":[1386,42],"bytes":[44265,44286]},"callee":null},"1387:18":{"kind":"call","span":{"start":[1387,18],"end":[1387,57],"bytes":[44305,44344]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseSnapshotFilenameV3"},"1392:16":{"kind":"call","span":{"start":[1392,16],"end":[1397,6],"bytes":[44424,44616]},"callee":null},"1395:17":{"kind":"call","span":{"start":[1395,17],"end":[1395,38],"bytes":[44536,44557]},"callee":null},"1396:17":{"kind":"call","span":{"start":[1396,17],"end":[1396,45],"bytes":[44575,44603]},"callee":null},"1401:2":{"kind":"call","span":{"start":[1401,2],"end":[1403,4],"bytes":[44626,44726]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3/github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3.closure_1","kind":"function","span":{"start":[1401,1],"end":[1403,4],"bytes":[44625,44726]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3.closure_1","parameters":[{"name":"a","type":"github.com/benbjohnson/litestream.SnapshotInfoV3","span":{"start":[1401,1],"end":[1401,71],"bytes":[44625,44695]}},{"name":"b","type":"github.com/benbjohnson/litestream.SnapshotInfoV3","span":{"start":[1401,1],"end":[1401,71],"bytes":[44625,44695]}}],"return_type":"int","body":{}}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.Type":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Type","kind":"method","span":{"start":[347,1],"end":[349,2],"bytes":[10796,10863]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3","kind":"method","span":{"start":[1408,1],"end":[1451,2],"bytes":[44838,46063]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1408,1],"end":[1408,119],"bytes":[44838,44956]}},{"name":"generation","type":"string","span":{"start":[1408,1],"end":[1408,119],"bytes":[44838,44956]}}],"return_type":"([]github.com/benbjohnson/litestream.WALSegmentInfoV3, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"1409:12":{"kind":"call","span":{"start":[1409,12],"end":[1409,23],"bytes":[44968,44979]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"1413:12":{"kind":"call","span":{"start":[1413,12],"end":[1413,52],"bytes":[45027,45067]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALPathV3"},"1415:15":{"kind":"call","span":{"start":[1415,15],"end":[1418,4],"bytes":[45089,45213]},"callee":null},"1416:11":{"kind":"call","span":{"start":[1416,11],"end":[1416,31],"bytes":[45158,45178]},"callee":null},"1417:11":{"kind":"call","span":{"start":[1417,11],"end":[1417,29],"bytes":[45190,45208]},"callee":null},"1421:6":{"kind":"call","span":{"start":[1421,6],"end":[1421,30],"bytes":[45264,45288]},"callee":null},"1422:16":{"kind":"call","span":{"start":[1422,16],"end":[1422,39],"bytes":[45306,45329]},"callee":null},"1424:16":{"kind":"call","span":{"start":[1424,16],"end":[1424,60],"bytes":[45363,45407]},"callee":null},"1428:11":{"kind":"call","span":{"start":[1428,11],"end":[1428,43],"bytes":[45461,45493]},"callee":null},"1428:21":{"kind":"call","span":{"start":[1428,21],"end":[1428,42],"bytes":[45471,45492]},"callee":null},"1429:26":{"kind":"call","span":{"start":[1429,26],"end":[1429,67],"bytes":[45519,45560]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3"},"1434:15":{"kind":"call","span":{"start":[1434,15],"end":[1440,6],"bytes":[45639,45856]},"callee":null},"1438:17":{"kind":"call","span":{"start":[1438,17],"end":[1438,38],"bytes":[45776,45797]},"callee":null},"1439:17":{"kind":"call","span":{"start":[1439,17],"end":[1439,45],"bytes":[45815,45843]},"callee":null},"1444:2":{"kind":"call","span":{"start":[1444,2],"end":[1449,4],"bytes":[45866,46039]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3/github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3.closure_1","kind":"function","span":{"start":[1444,1],"end":[1449,4],"bytes":[45865,46039]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3.closure_1","parameters":[{"name":"a","type":"github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[1444,1],"end":[1444,72],"bytes":[45865,45936]}},{"name":"b","type":"github.com/benbjohnson/litestream.WALSegmentInfoV3","span":{"start":[1444,1],"end":[1444,72],"bytes":[45865,45936]}}],"return_type":"int","body":{"1448:10":{"kind":"call","span":{"start":[1448,10],"end":[1448,41],"bytes":[46004,46035]},"callee":null}}}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[718,1],"end":[758,2],"bytes":[23853,25147]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[718,1],"end":[718,134],"bytes":[23853,23986]}},{"name":"level","type":"int","span":{"start":[718,1],"end":[718,134],"bytes":[23853,23986]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[718,1],"end":[718,134],"bytes":[23853,23986]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[718,1],"end":[718,134],"bytes":[23853,23986]}},{"name":"r","type":"io.Reader","span":{"start":[718,1],"end":[718,134],"bytes":[23853,23986]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"719:12":{"kind":"call","span":{"start":[719,12],"end":[719,23],"bytes":[23998,24009]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init"},"723:14":{"kind":"call","span":{"start":[723,14],"end":[723,50],"bytes":[24059,24095]},"callee":null},"724:24":{"kind":"call","span":{"start":[724,24],"end":[724,63],"bytes":[24119,24158]},"callee":null},"726:14":{"kind":"call","span":{"start":[726,14],"end":[726,50],"bytes":[24173,24209]},"callee":null},"735:15":{"kind":"call","span":{"start":[735,15],"end":[735,114],"bytes":[24496,24595]},"callee":null},"738:32":{"kind":"call","span":{"start":[738,32],"end":[738,66],"bytes":[24631,24665]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX"},"743:2":{"kind":"call","span":{"start":[743,2],"end":[743,77],"bytes":[24706,24781]},"callee":null},"744:2":{"kind":"call","span":{"start":[744,2],"end":[744,77],"bytes":[24789,24864]},"callee":null},"744:82":{"kind":"call","span":{"start":[744,82],"end":[744,95],"bytes":[24869,24882]},"callee":null},"748:15":{"kind":"call","span":{"start":[748,15],"end":[748,64],"bytes":[24954,25003]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint","kind":"method","span":{"start":[507,1],"end":[525,2],"bytes":[16199,16763]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint","parameters":[{"name":"opts","type":"*[]func(*github.com/aws/aws-sdk-go-v2/service/s3.Options)","span":{"start":[507,1],"end":[507,71],"bytes":[16199,16269]}}],"metrics":{"cyclomatic":4},"body":{"509:11":{"kind":"call","span":{"start":[509,11],"end":[523,5],"bytes":[16303,16758]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint.closure_1","kind":"function","span":{"start":[509,1],"end":[523,5],"bytes":[16293,16758]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint.closure_1","parameters":[{"name":"o","type":"*github.com/aws/aws-sdk-go-v2/service/s3.Options","span":{"start":[509,1],"end":[509,46],"bytes":[16293,16338]}}],"body":{"514:51":{"kind":"call","span":{"start":[514,51],"end":[514,90],"bytes":[16485,16524]},"callee":null},"514:8":{"kind":"call","span":{"start":[514,8],"end":[514,46],"bytes":[16442,16480]},"callee":null},"518:21":{"kind":"call","span":{"start":[518,21],"end":[518,41],"bytes":[16590,16610]},"callee":null},"520:7":{"kind":"call","span":{"start":[520,7],"end":[520,45],"bytes":[16666,16704]},"callee":null}}}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.findBucketRegion":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.findBucketRegion","kind":"method","span":{"start":[615,1],"end":[658,2],"bytes":[20313,21577]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.findBucketRegion","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[615,1],"end":[615,95],"bytes":[20313,20407]}},{"name":"bucket","type":"string","span":{"start":[615,1],"end":[615,95],"bytes":[20313,20407]}}],"return_type":"(string, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"618:3":{"kind":"call","span":{"start":[618,3],"end":[618,42],"bytes":[20510,20549]},"callee":null},"623:16":{"kind":"call","span":{"start":[623,16],"end":[625,5],"bytes":[20662,20800]},"callee":null},"623:35":{"kind":"call","span":{"start":[623,35],"end":[625,4],"bytes":[20681,20799]},"callee":null},"624:4":{"kind":"call","span":{"start":[624,4],"end":[624,82],"bytes":[20716,20794]},"callee":null},"629:14":{"kind":"call","span":{"start":[629,14],"end":[629,58],"bytes":[20845,20889]},"callee":null},"631:14":{"kind":"call","span":{"start":[631,14],"end":[631,81],"bytes":[20920,20987]},"callee":null},"641:2":{"kind":"call","span":{"start":[641,2],"end":[641,30],"bytes":[21182,21210]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint"},"643:12":{"kind":"call","span":{"start":[643,12],"end":[643,44],"bytes":[21223,21255]},"callee":null},"646:14":{"kind":"call","span":{"start":[646,14],"end":[648,4],"bytes":[21294,21385]},"callee":null},"647:11":{"kind":"call","span":{"start":[647,11],"end":[647,29],"bytes":[21362,21380]},"callee":null},"657:9":{"kind":"call","span":{"start":[657,9],"end":[657,39],"bytes":[21540,21570]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption","kind":"method","span":{"start":[887,1],"end":[1075,2],"bytes":[30071,36313]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption","parameters":[],"return_type":"func(*github.com/aws/smithy-go/middleware.Stack) error","metrics":{"cyclomatic":30},"body":{},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1","kind":"function","span":{"start":[888,1],"end":[1074,3],"bytes":[30146,36311]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1","parameters":[{"name":"stack","type":"*github.com/aws/smithy-go/middleware.Stack","span":{"start":[888,1],"end":[888,46],"bytes":[30146,30191]}}],"return_type":"error","error_channel":["error"],"body":{"1006:4":{"kind":"call","span":{"start":[1006,4],"end":[1006,52],"bytes":[34113,34161]},"callee":null},"1011:13":{"kind":"call","span":{"start":[1011,13],"end":[1028,4],"bytes":[34302,34885]},"callee":null},"1012:4":{"kind":"call","span":{"start":[1012,4],"end":[1026,5],"bytes":[34325,34859]},"callee":null},"1067:13":{"kind":"call","span":{"start":[1067,13],"end":[1067,113],"bytes":[36075,36175]},"callee":null},"1067:35":{"kind":"call","span":{"start":[1067,35],"end":[1067,50],"bytes":[36097,36112]},"callee":null},"1068:14":{"kind":"call","span":{"start":[1068,14],"end":[1068,67],"bytes":[36203,36256]},"callee":null},"1068:33":{"kind":"call","span":{"start":[1068,33],"end":[1068,48],"bytes":[36222,36237]},"callee":null},"890:14":{"kind":"call","span":{"start":[890,14],"end":[917,5],"bytes":[30232,31162]},"callee":null},"891:5":{"kind":"call","span":{"start":[891,5],"end":[915,6],"bytes":[30257,31133]},"callee":null},"922:13":{"kind":"call","span":{"start":[922,13],"end":[940,4],"bytes":[31214,31850]},"callee":null},"923:4":{"kind":"call","span":{"start":[923,4],"end":[938,5],"bytes":[31234,31824]},"callee":null},"944:6":{"kind":"call","span":{"start":[944,6],"end":[944,45],"bytes":[31889,31928]},"callee":null},"945:14":{"kind":"call","span":{"start":[945,14],"end":[958,5],"bytes":[31944,32405]},"callee":null},"946:5":{"kind":"call","span":{"start":[946,5],"end":[956,6],"bytes":[31965,32377]},"callee":null},"963:31":{"kind":"call","span":{"start":[963,31],"end":[963,82],"bytes":[32475,32526]},"callee":null},"964:14":{"kind":"call","span":{"start":[964,14],"end":[978,5],"bytes":[32542,33032]},"callee":null},"965:5":{"kind":"call","span":{"start":[965,5],"end":[975,6],"bytes":[32569,32988]},"callee":null},"988:8":{"kind":"call","span":{"start":[988,8],"end":[988,54],"bytes":[33334,33380]},"callee":null},"989:14":{"kind":"call","span":{"start":[989,14],"end":[989,52],"bytes":[33394,33432]},"callee":null},"992:8":{"kind":"call","span":{"start":[992,8],"end":[992,53],"bytes":[33474,33519]},"callee":null},"993:14":{"kind":"call","span":{"start":[993,14],"end":[993,56],"bytes":[33533,33575]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_1","kind":"function","span":{"start":[893,1],"end":[914,8],"bytes":[30335,31127]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[893,1],"end":[893,97],"bytes":[30335,30431]}},{"name":"in","type":"github.com/aws/smithy-go/middleware.SerializeInput","span":{"start":[893,1],"end":[893,97],"bytes":[30335,30431]}},{"name":"next","type":"github.com/aws/smithy-go/middleware.SerializeHandler","span":{"start":[893,1],"end":[893,97],"bytes":[30335,30431]}}],"return_type":"(github.com/aws/smithy-go/middleware.SerializeOutput, github.com/aws/smithy-go/middleware.Metadata, error)","error_channel":["error"],"body":{"896:10":{"kind":"call","span":{"start":[896,10],"end":[896,42],"bytes":[30529,30561]},"callee":null},"897:15":{"kind":"call","span":{"start":[897,15],"end":[897,44],"bytes":[30597,30626]},"callee":null},"901:56":{"kind":"call","span":{"start":[901,56],"end":[901,81],"bytes":[30749,30774]},"callee":null},"902:15":{"kind":"call","span":{"start":[902,15],"end":[902,44],"bytes":[30796,30825]},"callee":null},"905:24":{"kind":"call","span":{"start":[905,24],"end":[905,68],"bytes":[30858,30902]},"callee":null},"910:14":{"kind":"call","span":{"start":[910,14],"end":[910,76],"bytes":[31005,31067]},"callee":null},"913:14":{"kind":"call","span":{"start":[913,14],"end":[913,43],"bytes":[31090,31119]},"callee":null}}},"closure_2":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_2","kind":"function","span":{"start":[925,1],"end":[937,7],"bytes":[31293,31819]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_2","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[925,1],"end":[925,88],"bytes":[31293,31380]}},{"name":"in","type":"github.com/aws/smithy-go/middleware.BuildInput","span":{"start":[925,1],"end":[925,88],"bytes":[31293,31380]}},{"name":"next","type":"github.com/aws/smithy-go/middleware.BuildHandler","span":{"start":[925,1],"end":[925,88],"bytes":[31293,31380]}}],"return_type":"(github.com/aws/smithy-go/middleware.BuildOutput, github.com/aws/smithy-go/middleware.Metadata, error)","error_channel":["error"],"body":{"929:18":{"kind":"call","span":{"start":[929,18],"end":[929,46],"bytes":[31538,31566]},"callee":null},"931:8":{"kind":"call","span":{"start":[931,8],"end":[931,50],"bytes":[31599,31641]},"callee":null},"932:18":{"kind":"call","span":{"start":[932,18],"end":[932,57],"bytes":[31659,31698]},"callee":null},"933:8":{"kind":"call","span":{"start":[933,8],"end":[933,59],"bytes":[31708,31759]},"callee":null},"936:13":{"kind":"call","span":{"start":[936,13],"end":[936,38],"bytes":[31787,31812]},"callee":null}}},"closure_3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_3","kind":"function","span":{"start":[948,1],"end":[955,8],"bytes":[32032,32371]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[948,1],"end":[948,89],"bytes":[32032,32120]}},{"name":"in","type":"github.com/aws/smithy-go/middleware.BuildInput","span":{"start":[948,1],"end":[948,89],"bytes":[32032,32120]}},{"name":"next","type":"github.com/aws/smithy-go/middleware.BuildHandler","span":{"start":[948,1],"end":[948,89],"bytes":[32032,32120]}}],"return_type":"(github.com/aws/smithy-go/middleware.BuildOutput, github.com/aws/smithy-go/middleware.Metadata, error)","error_channel":["error"],"body":{"952:8":{"kind":"call","span":{"start":[952,8],"end":[952,53],"bytes":[32271,32316]},"callee":null},"954:14":{"kind":"call","span":{"start":[954,14],"end":[954,39],"bytes":[32338,32363]},"callee":null}}},"closure_4":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_4","kind":"function","span":{"start":[967,1],"end":[974,8],"bytes":[32643,32982]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_4","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[967,1],"end":[967,95],"bytes":[32643,32737]}},{"name":"in","type":"github.com/aws/smithy-go/middleware.FinalizeInput","span":{"start":[967,1],"end":[967,95],"bytes":[32643,32737]}},{"name":"next","type":"github.com/aws/smithy-go/middleware.FinalizeHandler","span":{"start":[967,1],"end":[967,95],"bytes":[32643,32737]}}],"return_type":"(github.com/aws/smithy-go/middleware.FinalizeOutput, github.com/aws/smithy-go/middleware.Metadata, error)","error_channel":["error"],"body":{"971:8":{"kind":"call","span":{"start":[971,8],"end":[971,41],"bytes":[32891,32924]},"callee":null},"973:14":{"kind":"call","span":{"start":[973,14],"end":[973,42],"bytes":[32946,32974]},"callee":null}}},"closure_5":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_5","kind":"function","span":{"start":[1014,1],"end":[1025,7],"bytes":[34390,34854]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_5","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1014,1],"end":[1014,94],"bytes":[34390,34483]}},{"name":"in","type":"github.com/aws/smithy-go/middleware.FinalizeInput","span":{"start":[1014,1],"end":[1014,94],"bytes":[34390,34483]}},{"name":"next","type":"github.com/aws/smithy-go/middleware.FinalizeHandler","span":{"start":[1014,1],"end":[1014,94],"bytes":[34390,34483]}}],"return_type":"(github.com/aws/smithy-go/middleware.FinalizeOutput, github.com/aws/smithy-go/middleware.Metadata, error)","error_channel":["error"],"body":{"1018:7":{"kind":"call","span":{"start":[1018,7],"end":[1022,8],"bytes":[34633,34799]},"callee":null},"1020:15":{"kind":"call","span":{"start":[1020,15],"end":[1020,31],"bytes":[34705,34721]},"callee":null},"1021:31":{"kind":"call","span":{"start":[1021,31],"end":[1021,68],"bytes":[34753,34790]},"callee":null},"1024:13":{"kind":"call","span":{"start":[1024,13],"end":[1024,41],"bytes":[34819,34847]},"callee":null}}},"closure_6":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_6","kind":"function","span":{"start":[1036,1],"end":[1062,4],"bytes":[34966,35818]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_6","parameters":[],"return_type":"github.com/aws/smithy-go/middleware.FinalizeMiddleware","body":{"1037:11":{"kind":"call","span":{"start":[1037,11],"end":[1061,5],"bytes":[35034,35814]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_6/github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_6.closure_1","kind":"function","span":{"start":[1039,1],"end":[1060,7],"bytes":[35103,35809]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.middlewareOption.closure_1.closure_6.closure_1","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1039,1],"end":[1039,94],"bytes":[35103,35196]}},{"name":"in","type":"github.com/aws/smithy-go/middleware.FinalizeInput","span":{"start":[1039,1],"end":[1039,94],"bytes":[35103,35196]}},{"name":"next","type":"github.com/aws/smithy-go/middleware.FinalizeHandler","span":{"start":[1039,1],"end":[1039,94],"bytes":[35103,35196]}}],"return_type":"(github.com/aws/smithy-go/middleware.FinalizeOutput, github.com/aws/smithy-go/middleware.Metadata, error)","error_channel":["error"],"body":{"1042:9":{"kind":"call","span":{"start":[1042,9],"end":[1042,41],"bytes":[35290,35322]},"callee":null},"1043:14":{"kind":"call","span":{"start":[1043,14],"end":[1043,42],"bytes":[35357,35385]},"callee":null},"1046:21":{"kind":"call","span":{"start":[1046,21],"end":[1046,72],"bytes":[35414,35465]},"callee":null},"1048:14":{"kind":"call","span":{"start":[1048,14],"end":[1048,42],"bytes":[35513,35541]},"callee":null},"1053:14":{"kind":"call","span":{"start":[1053,14],"end":[1053,42],"bytes":[35626,35654]},"callee":null},"1055:9":{"kind":"call","span":{"start":[1055,9],"end":[1055,38],"bytes":[35670,35699]},"callee":null},"1056:7":{"kind":"call","span":{"start":[1056,7],"end":[1056,46],"bytes":[35714,35753]},"callee":null},"1059:13":{"kind":"call","span":{"start":[1059,13],"end":[1059,41],"bytes":[35774,35802]},"callee":null}}}}}}}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput","kind":"method","span":{"start":[858,1],"end":[885,2],"bytes":[29179,30069]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput","parameters":[{"name":"key","type":"string","span":{"start":[858,1],"end":[858,93],"bytes":[29179,29271]}},{"name":"timestamp","type":"time.Time","span":{"start":[858,1],"end":[858,93],"bytes":[29179,29271]}}],"return_type":"*github.com/aws/aws-sdk-go-v2/service/s3.PutObjectInput","metrics":{"cyclomatic":4},"body":{"860:11":{"kind":"call","span":{"start":[860,11],"end":[860,31],"bytes":[29312,29332]},"callee":null},"861:11":{"kind":"call","span":{"start":[861,11],"end":[861,26],"bytes":[29344,29359]},"callee":null},"864:26":{"kind":"call","span":{"start":[864,26],"end":[864,60],"bytes":[29486,29520]},"callee":null},"868:24":{"kind":"call","span":{"start":[868,24],"end":[868,58],"bytes":[29580,29614]},"callee":null},"873:32":{"kind":"call","span":{"start":[873,32],"end":[873,66],"bytes":[29718,29752]},"callee":null},"874:26":{"kind":"call","span":{"start":[874,26],"end":[874,54],"bytes":[29778,29806]},"callee":null},"875:29":{"kind":"call","span":{"start":[875,29],"end":[875,60],"bytes":[29835,29866]},"callee":null},"881:23":{"kind":"call","span":{"start":[881,23],"end":[881,48],"bytes":[30024,30049]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX","kind":"method","span":{"start":[762,1],"end":[773,2],"bytes":[25286,25901]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[762,1],"end":[762,133],"bytes":[25286,25418]}},{"name":"key","type":"string","span":{"start":[762,1],"end":[762,133],"bytes":[25286,25418]}},{"name":"r","type":"io.Reader","span":{"start":[762,1],"end":[762,133],"bytes":[25286,25418]}},{"name":"partSize","type":"int64","span":{"start":[762,1],"end":[762,133],"bytes":[25286,25418]}}],"return_type":"(int64, time.Time, *string, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"766:20":{"kind":"call","span":{"start":[766,20],"end":[766,46],"bytes":[25610,25636]},"callee":null},"767:11":{"kind":"call","span":{"start":[767,11],"end":[767,58],"bytes":[25661,25708]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadSizedLTX"},"772:9":{"kind":"call","span":{"start":[772,9],"end":[772,51],"bytes":[25857,25899]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.uploadSizedLTX":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadSizedLTX","kind":"method","span":{"start":[776,1],"end":[816,2],"bytes":[25973,27460]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.uploadSizedLTX","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[776,1],"end":[776,150],"bytes":[25973,26122]}},{"name":"key","type":"string","span":{"start":[776,1],"end":[776,150],"bytes":[25973,26122]}},{"name":"rs","type":"io.ReadSeeker","span":{"start":[776,1],"end":[776,150],"bytes":[25973,26122]}},{"name":"start","type":"int64","span":{"start":[776,1],"end":[776,150],"bytes":[25973,26122]}},{"name":"partSize","type":"int64","span":{"start":[776,1],"end":[776,150],"bytes":[25973,26122]}}],"return_type":"(int64, time.Time, *string, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"777:14":{"kind":"call","span":{"start":[777,14],"end":[777,36],"bytes":[26136,26158]},"callee":null},"779:31":{"kind":"call","span":{"start":[779,31],"end":[779,79],"bytes":[26206,26254]},"callee":null},"782:15":{"kind":"call","span":{"start":[782,15],"end":[782,43],"bytes":[26293,26321]},"callee":null},"783:31":{"kind":"call","span":{"start":[783,31],"end":[783,81],"bytes":[26366,26416]},"callee":null},"788:17":{"kind":"call","span":{"start":[788,17],"end":[788,35],"bytes":[26526,26544]},"callee":null},"790:31":{"kind":"call","span":{"start":[790,31],"end":[790,87],"bytes":[26592,26648]},"callee":null},"792:15":{"kind":"call","span":{"start":[792,15],"end":[792,44],"bytes":[26666,26695]},"callee":null},"793:15":{"kind":"call","span":{"start":[793,15],"end":[793,43],"bytes":[26716,26744]},"callee":null},"794:31":{"kind":"call","span":{"start":[794,31],"end":[794,81],"bytes":[26789,26839]},"callee":null},"797:11":{"kind":"call","span":{"start":[797,11],"end":[797,43],"bytes":[26854,26886]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput"},"801:25":{"kind":"call","span":{"start":[801,25],"end":[801,40],"bytes":[26951,26966]},"callee":null},"802:15":{"kind":"call","span":{"start":[802,15],"end":[802,41],"bytes":[26981,27007]},"callee":null},"804:32":{"kind":"call","span":{"start":[804,32],"end":[804,77],"bytes":[27057,27102]},"callee":null},"811:14":{"kind":"call","span":{"start":[811,14],"end":[811,43],"bytes":[27295,27324]},"callee":null},"813:31":{"kind":"call","span":{"start":[813,31],"end":[813,75],"bytes":[27372,27416]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX","kind":"method","span":{"start":[820,1],"end":[854,2],"bytes":[27615,29032]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[820,1],"end":[820,141],"bytes":[27615,27755]}},{"name":"key","type":"string","span":{"start":[820,1],"end":[820,141],"bytes":[27615,27755]}},{"name":"r","type":"io.Reader","span":{"start":[820,1],"end":[820,141],"bytes":[27615,27755]}},{"name":"partSize","type":"int64","span":{"start":[820,1],"end":[820,141],"bytes":[27615,27755]}}],"return_type":"(int64, time.Time, *string, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"823:17":{"kind":"call","span":{"start":[823,17],"end":[823,54],"bytes":[27867,27904]},"callee":null},"823:32":{"kind":"call","span":{"start":[823,32],"end":[823,53],"bytes":[27882,27903]},"callee":null},"825:31":{"kind":"call","span":{"start":[825,31],"end":[825,87],"bytes":[27952,28008]},"callee":null},"827:15":{"kind":"call","span":{"start":[827,15],"end":[827,44],"bytes":[28026,28055]},"callee":null},"829:15":{"kind":"call","span":{"start":[829,15],"end":[829,59],"bytes":[28077,28121]},"callee":null},"829:42":{"kind":"call","span":{"start":[829,42],"end":[829,58],"bytes":[28104,28120]},"callee":null},"829:48":{"kind":"call","span":{"start":[829,48],"end":[829,57],"bytes":[28110,28119]},"callee":null},"829:76":{"kind":"call","span":{"start":[829,76],"end":[829,98],"bytes":[28138,28160]},"callee":null},"830:31":{"kind":"call","span":{"start":[830,31],"end":[830,83],"bytes":[28193,28245]},"callee":null},"833:11":{"kind":"call","span":{"start":[833,11],"end":[833,43],"bytes":[28260,28292]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput"},"836:13":{"kind":"call","span":{"start":[836,13],"end":[836,29],"bytes":[28380,28396]},"callee":null},"836:19":{"kind":"call","span":{"start":[836,19],"end":[836,28],"bytes":[28386,28395]},"callee":null},"837:16":{"kind":"call","span":{"start":[837,16],"end":[837,44],"bytes":[28431,28459]},"callee":null},"837:32":{"kind":"call","span":{"start":[837,32],"end":[837,43],"bytes":[28447,28458]},"callee":null},"838:25":{"kind":"call","span":{"start":[838,25],"end":[838,40],"bytes":[28484,28499]},"callee":null},"839:15":{"kind":"call","span":{"start":[839,15],"end":[839,41],"bytes":[28514,28540]},"callee":null},"841:32":{"kind":"call","span":{"start":[841,32],"end":[841,77],"bytes":[28590,28635]},"callee":null},"847:32":{"kind":"call","span":{"start":[847,32],"end":[847,79],"bytes":[28786,28833]},"callee":null},"847:47":{"kind":"call","span":{"start":[847,47],"end":[847,75],"bytes":[28801,28829]},"callee":null},"847:63":{"kind":"call","span":{"start":[847,63],"end":[847,74],"bytes":[28817,28828]},"callee":null},"847:8":{"kind":"call","span":{"start":[847,8],"end":[847,80],"bytes":[28762,28834]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter"},"849:14":{"kind":"call","span":{"start":[849,14],"end":[849,43],"bytes":[28865,28894]},"callee":null},"851:31":{"kind":"call","span":{"start":[851,31],"end":[851,75],"bytes":[28942,28986]},"callee":null},"853:9":{"kind":"call","span":{"start":[853,9],"end":[853,15],"bytes":[28998,29004]},"callee":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N"}}},"github.com/benbjohnson/litestream/s3.ReplicaClient.validateSSEConfig":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.validateSSEConfig","kind":"method","span":{"start":[528,1],"end":[582,2],"bytes":[16834,18856]},"signature":"github.com/benbjohnson/litestream/s3.ReplicaClient.validateSSEConfig","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":14},"body":{"531:10":{"kind":"call","span":{"start":[531,10],"end":[531,108],"bytes":[17014,17112]},"callee":null},"540:11":{"kind":"call","span":{"start":[540,11],"end":[540,98],"bytes":[17360,17447]},"callee":null},"544:20":{"kind":"call","span":{"start":[544,20],"end":[544,69],"bytes":[17547,17596]},"callee":null},"546:11":{"kind":"call","span":{"start":[546,11],"end":[546,75],"bytes":[17625,17689]},"callee":null},"548:6":{"kind":"call","span":{"start":[548,6],"end":[548,19],"bytes":[17699,17712]},"callee":null},"549:100":{"kind":"call","span":{"start":[549,100],"end":[549,113],"bytes":[17820,17833]},"callee":null},"549:11":{"kind":"call","span":{"start":[549,11],"end":[549,114],"bytes":[17731,17834]},"callee":null},"554:11":{"kind":"call","span":{"start":[554,11],"end":[554,28],"bytes":[17921,17938]},"callee":null},"555:26":{"kind":"call","span":{"start":[555,26],"end":[555,67],"bytes":[17964,18005]},"callee":null},"561:51":{"kind":"call","span":{"start":[561,51],"end":[561,90],"bytes":[18189,18228]},"callee":null},"561:8":{"kind":"call","span":{"start":[561,8],"end":[561,46],"bytes":[18146,18184]},"callee":null},"564:7":{"kind":"call","span":{"start":[564,7],"end":[564,45],"bytes":[18279,18317]},"callee":null},"565:15":{"kind":"call","span":{"start":[565,15],"end":[565,34],"bytes":[18334,18353]},"callee":null},"567:14":{"kind":"call","span":{"start":[567,14],"end":[567,26],"bytes":[18387,18399]},"callee":null},"571:22":{"kind":"call","span":{"start":[571,22],"end":[571,39],"bytes":[18518,18535]},"callee":null},"571:55":{"kind":"call","span":{"start":[571,55],"end":[571,70],"bytes":[18551,18566]},"callee":null},"571:74":{"kind":"call","span":{"start":[571,74],"end":[571,88],"bytes":[18570,18584]},"callee":null},"574:14":{"kind":"call","span":{"start":[574,14],"end":[574,123],"bytes":[18707,18816]},"callee":null}}}},"fields":{"AccessKeyID":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/AccessKeyID","kind":"field","type":"string","span":{"start":[94,1],"end":[94,24],"bytes":[2757,2780]}},"Bucket":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/Bucket","kind":"field","type":"string","span":{"start":[99,1],"end":[99,27],"bytes":[2859,2885]}},"Concurrency":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/Concurrency","kind":"field","type":"int","span":{"start":[111,1],"end":[111,72],"bytes":[3187,3258]}},"Endpoint":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/Endpoint","kind":"field","type":"string","span":{"start":[101,1],"end":[101,27],"bytes":[2913,2939]}},"ForcePathStyle":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/ForcePathStyle","kind":"field","type":"bool","span":{"start":[102,1],"end":[102,25],"bytes":[2940,2964]}},"MetadataConcurrency":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/MetadataConcurrency","kind":"field","type":"int","span":{"start":[116,1],"end":[116,25],"bytes":[3473,3497]}},"PartSize":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/PartSize","kind":"field","type":"int64","span":{"start":[110,1],"end":[110,69],"bytes":[3118,3186]}},"Path":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[100,1],"end":[100,27],"bytes":[2886,2912]}},"Region":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/Region","kind":"field","type":"string","span":{"start":[98,1],"end":[98,27],"bytes":[2832,2858]}},"RequireContentMD5":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/RequireContentMD5","kind":"field","type":"bool","span":{"start":[106,1],"end":[106,25],"bytes":[3040,3064]}},"SSECustomerAlgorithm":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SSECustomerAlgorithm","kind":"field","type":"string","span":{"start":[120,1],"end":[120,56],"bytes":[3631,3686]}},"SSECustomerKey":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SSECustomerKey","kind":"field","type":"string","span":{"start":[121,1],"end":[121,80],"bytes":[3687,3766]}},"SSECustomerKeyMD5":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SSECustomerKeyMD5","kind":"field","type":"string","span":{"start":[122,1],"end":[122,85],"bytes":[3767,3851]}},"SSEKMSKeyID":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SSEKMSKeyID","kind":"field","type":"string","span":{"start":[126,1],"end":[126,49],"bytes":[3957,4005]}},"SecretAccessKey":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SecretAccessKey","kind":"field","type":"string","span":{"start":[95,1],"end":[95,24],"bytes":[2781,2804]}},"SignAcceptEncoding":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SignAcceptEncoding","kind":"field","type":"bool","span":{"start":[105,1],"end":[105,25],"bytes":[3015,3039]}},"SignPayload":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SignPayload","kind":"field","type":"bool","span":{"start":[104,1],"end":[104,25],"bytes":[2990,3014]}},"SkipVerify":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/SkipVerify","kind":"field","type":"bool","span":{"start":[103,1],"end":[103,25],"bytes":[2965,2989]}},"StorageClass":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/StorageClass","kind":"field","type":"string","span":{"start":[107,1],"end":[107,27],"bytes":[3065,3091]}},"logger":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[91,1],"end":[91,23],"bytes":[2704,2726]}},"mu":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[88,1],"end":[88,21],"bytes":[2620,2640]}},"s3":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/s3","kind":"field","type":"*github.com/aws/aws-sdk-go-v2/service/s3.Client","span":{"start":[89,1],"end":[89,35],"bytes":[2641,2675]}},"uploader":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/uploader","kind":"field","type":"*github.com/aws/aws-sdk-go-v2/feature/s3/manager.Uploader","span":{"start":[90,1],"end":[90,28],"bytes":[2676,2703]}}}},"contentMD5StackKey":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.contentMD5StackKey","kind":"struct","span":{"start":[81,1],"end":[81,33],"bytes":[2387,2419]},"callables":{}},"fileIterator":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator","kind":"struct","span":{"start":[1518,1],"end":[1536,2],"bytes":[48010,48466]},"callables":{"github.com/benbjohnson/litestream/s3.fileIterator.Close":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.Close","kind":"method","span":{"start":[1636,1],"end":[1640,2],"bytes":[51301,51398]},"signature":"github.com/benbjohnson/litestream/s3.fileIterator.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"1638:2":{"kind":"call","span":{"start":[1638,2],"end":[1638,14],"bytes":[51368,51380]},"callee":null}}},"github.com/benbjohnson/litestream/s3.fileIterator.Err":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.Err","kind":"method","span":{"start":[1745,1],"end":[1747,2],"bytes":[54089,54145]},"signature":"github.com/benbjohnson/litestream/s3.fileIterator.Err","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/s3.fileIterator.Item":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.Item","kind":"method","span":{"start":[1740,1],"end":[1742,2],"bytes":[53964,54030]},"signature":"github.com/benbjohnson/litestream/s3.fileIterator.Item","parameters":[],"return_type":"*github.com/superfly/ltx.FileInfo","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/s3.fileIterator.Next":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.Next","kind":"method","span":{"start":[1643,1],"end":[1737,2],"bytes":[51479,53911]},"signature":"github.com/benbjohnson/litestream/s3.fileIterator.Next","parameters":[],"return_type":"bool","metrics":{"cyclomatic":17},"body":{"1651:42":{"kind":"call","span":{"start":[1651,42],"end":[1651,64],"bytes":[51701,51723]},"callee":null},"1652:8":{"kind":"call","span":{"start":[1652,8],"end":[1652,36],"bytes":[51733,51761]},"callee":null},"1657:20":{"kind":"call","span":{"start":[1657,20],"end":[1657,51],"bytes":[51823,51854]},"callee":null},"1665:7":{"kind":"call","span":{"start":[1665,7],"end":[1665,29],"bytes":[51981,52003]},"callee":null},"1666:13":{"kind":"call","span":{"start":[1666,13],"end":[1666,54],"bytes":[52022,52063]},"callee":null},"1666:31":{"kind":"call","span":{"start":[1666,31],"end":[1666,53],"bytes":[52040,52062]},"callee":null},"1668:13":{"kind":"call","span":{"start":[1668,13],"end":[1668,59],"bytes":[52120,52166]},"callee":null},"1668:26":{"kind":"call","span":{"start":[1668,26],"end":[1668,58],"bytes":[52133,52165]},"callee":null},"1668:36":{"kind":"call","span":{"start":[1668,36],"end":[1668,57],"bytes":[52143,52164]},"callee":null},"1670:5":{"kind":"call","span":{"start":[1670,5],"end":[1670,80],"bytes":[52177,52252]},"callee":null},"1676:26":{"kind":"call","span":{"start":[1676,26],"end":[1676,48],"bytes":[52514,52536]},"callee":null},"1677:13":{"kind":"call","span":{"start":[1677,13],"end":[1677,54],"bytes":[52555,52596]},"callee":null},"1677:31":{"kind":"call","span":{"start":[1677,31],"end":[1677,53],"bytes":[52573,52595]},"callee":null},"1679:13":{"kind":"call","span":{"start":[1679,13],"end":[1679,48],"bytes":[52653,52688]},"callee":null},"1679:26":{"kind":"call","span":{"start":[1679,26],"end":[1679,47],"bytes":[52666,52687]},"callee":null},"1681:15":{"kind":"call","span":{"start":[1681,15],"end":[1681,43],"bytes":[52709,52737]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch"},"1689:22":{"kind":"call","span":{"start":[1689,22],"end":[1689,44],"bytes":[52854,52876]},"callee":null},"1694:15":{"kind":"call","span":{"start":[1694,15],"end":[1694,36],"bytes":[52989,53010]},"callee":null},"1695:11":{"kind":"call","span":{"start":[1695,11],"end":[1695,29],"bytes":[53021,53039]},"callee":null},"1696:29":{"kind":"call","span":{"start":[1696,29],"end":[1696,51],"bytes":[53068,53090]},"callee":null},"1719:16":{"kind":"call","span":{"start":[1719,16],"end":[1719,37],"bytes":[53466,53487]},"callee":null},"1727:23":{"kind":"call","span":{"start":[1727,23],"end":[1727,51],"bytes":[53754,53782]},"callee":null},"1730:22":{"kind":"call","span":{"start":[1730,22],"end":[1730,50],"bytes":[53828,53856]},"callee":null}}},"github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch","kind":"method","span":{"start":[1563,1],"end":[1633,2],"bytes":[49257,51220]},"signature":"github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch","parameters":[{"name":"keys","type":"[]string","span":{"start":[1563,1],"end":[1563,67],"bytes":[49257,49323]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"1564:5":{"kind":"call","span":{"start":[1564,5],"end":[1564,14],"bytes":[49328,49337]},"callee":null},"1575:13":{"kind":"call","span":{"start":[1575,13],"end":[1575,50],"bytes":[49591,49628]},"callee":null},"1575:40":{"kind":"call","span":{"start":[1575,40],"end":[1575,49],"bytes":[49618,49627]},"callee":null},"1579:31":{"kind":"call","span":{"start":[1579,31],"end":[1579,49],"bytes":[49757,49775]},"callee":null},"1579:9":{"kind":"call","span":{"start":[1579,9],"end":[1579,50],"bytes":[49735,49776]},"callee":null},"1580:12":{"kind":"call","span":{"start":[1580,12],"end":[1580,41],"bytes":[49788,49817]},"callee":null},"1585:3":{"kind":"call","span":{"start":[1585,3],"end":[1621,5],"bytes":[49888,51063]},"callee":null},"1624:12":{"kind":"call","span":{"start":[1624,12],"end":[1624,20],"bytes":[51079,51087]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch/github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch.closure_1","kind":"function","span":{"start":[1585,1],"end":[1621,5],"bytes":[49886,51063]},"signature":"github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch.closure_1","parameters":[],"return_type":"error","error_channel":["error"],"body":{"1587:14":{"kind":"call","span":{"start":[1587,14],"end":[1587,33],"bytes":[49987,50006]},"callee":null},"1590:10":{"kind":"call","span":{"start":[1590,10],"end":[1590,24],"bytes":[50071,50085]},"callee":null},"1593:13":{"kind":"call","span":{"start":[1593,13],"end":[1593,42],"bytes":[50136,50165]},"callee":null},"1594:13":{"kind":"call","span":{"start":[1594,13],"end":[1594,28],"bytes":[50179,50194]},"callee":null},"1600:38":{"kind":"call","span":{"start":[1600,38],"end":[1600,81],"bytes":[50451,50494]},"callee":null},"1601:32":{"kind":"call","span":{"start":[1601,32],"end":[1601,69],"bytes":[50526,50563]},"callee":null},"1602:35":{"kind":"call","span":{"start":[1602,35],"end":[1602,75],"bytes":[50598,50638]},"callee":null},"1605:17":{"kind":"call","span":{"start":[1605,17],"end":[1605,57],"bytes":[50661,50701]},"callee":null},"1613:24":{"kind":"call","span":{"start":[1613,24],"end":[1613,56],"bytes":[50918,50950]},"callee":null},"1614:7":{"kind":"call","span":{"start":[1614,7],"end":[1614,16],"bytes":[50971,50980]},"callee":null},"1616:7":{"kind":"call","span":{"start":[1616,7],"end":[1616,18],"bytes":[51015,51026]},"callee":null}}}}}},"fields":{"cancel":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/cancel","kind":"field","type":"context.CancelFunc","span":{"start":[1520,1],"end":[1520,27],"bytes":[48061,48087]}},"client":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/client","kind":"field","type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","span":{"start":[1521,1],"end":[1521,23],"bytes":[48088,48110]}},"closed":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/closed","kind":"field","type":"bool","span":{"start":[1533,1],"end":[1533,13],"bytes":[48416,48428]}},"ctx":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/ctx","kind":"field","type":"context.Context","span":{"start":[1519,1],"end":[1519,24],"bytes":[48037,48060]}},"err":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/err","kind":"field","type":"error","span":{"start":[1534,1],"end":[1534,14],"bytes":[48429,48442]}},"info":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/info","kind":"field","type":"*github.com/superfly/ltx.FileInfo","span":{"start":[1535,1],"end":[1535,22],"bytes":[48443,48464]}},"level":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/level","kind":"field","type":"int","span":{"start":[1522,1],"end":[1522,12],"bytes":[48111,48122]}},"metadataCache":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/metadataCache","kind":"field","type":"map[string]time.Time","span":{"start":[1527,1],"end":[1527,80],"bytes":[48246,48325]}},"page":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/page","kind":"field","type":"*github.com/aws/aws-sdk-go-v2/service/s3.ListObjectsV2Output","span":{"start":[1530,1],"end":[1530,35],"bytes":[48365,48399]}},"pageIndex":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/pageIndex","kind":"field","type":"int","span":{"start":[1531,1],"end":[1531,15],"bytes":[48400,48414]}},"paginator":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/paginator","kind":"field","type":"*github.com/aws/aws-sdk-go-v2/service/s3.ListObjectsV2Paginator","span":{"start":[1529,1],"end":[1529,38],"bytes":[48327,48364]}},"prefix":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/prefix","kind":"field","type":"string","span":{"start":[1524,1],"end":[1524,15],"bytes":[48140,48154]}},"seek":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/seek","kind":"field","type":"github.com/superfly/ltx.TXID","span":{"start":[1523,1],"end":[1523,17],"bytes":[48123,48139]}},"useMetadata":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/useMetadata","kind":"field","type":"bool","span":{"start":[1526,1],"end":[1526,90],"bytes":[48156,48245]}}}}},"functions":{"github.com/benbjohnson/litestream/s3.NewReplicaClient":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","kind":"function","span":{"start":[130,1],"end":[137,2],"bytes":[4070,4290]},"signature":"github.com/benbjohnson/litestream/s3.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","metrics":{"cyclomatic":1},"body":{"132:23":{"kind":"call","span":{"start":[132,23],"end":[132,37],"bytes":[4157,4171]},"callee":null}}},"github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","kind":"function","span":{"start":[145,1],"end":[344,2],"bytes":[4536,10753]},"signature":"github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[145,1],"end":[145,137],"bytes":[4536,4672]}},{"name":"host","type":"string","span":{"start":[145,1],"end":[145,137],"bytes":[4536,4672]}},{"name":"urlPath","type":"string","span":{"start":[145,1],"end":[145,137],"bytes":[4536,4672]}},{"name":"query","type":"net/url.Values","span":{"start":[145,1],"end":[145,137],"bytes":[4536,4672]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[145,1],"end":[145,137],"bytes":[4536,4672]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":47},"body":{"146:12":{"kind":"call","span":{"start":[146,12],"end":[146,30],"bytes":[4684,4702]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient"},"167:5":{"kind":"call","span":{"start":[167,5],"end":[167,36],"bytes":[5199,5230]},"callee":null},"169:12":{"kind":"call","span":{"start":[169,12],"end":[169,44],"bytes":[5260,5292]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegionFromS3ARN"},"171:46":{"kind":"call","span":{"start":[171,46],"end":[171,61],"bytes":[5348,5363]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost"},"175:18":{"kind":"call","span":{"start":[175,18],"end":[175,39],"bytes":[5432,5453]},"callee":null},"177:18":{"kind":"call","span":{"start":[177,18],"end":[177,60],"bytes":[5576,5618]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme"},"180:15":{"kind":"call","span":{"start":[180,15],"end":[180,85],"bytes":[5735,5805]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"184:16":{"kind":"call","span":{"start":[184,16],"end":[184,35],"bytes":[5865,5884]},"callee":null},"187:14":{"kind":"call","span":{"start":[187,14],"end":[187,84],"bytes":[5937,6007]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"190:14":{"kind":"call","span":{"start":[190,14],"end":[190,75],"bytes":[6051,6112]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"193:14":{"kind":"call","span":{"start":[193,14],"end":[193,77],"bytes":[6152,6215]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"197:14":{"kind":"call","span":{"start":[197,14],"end":[197,92],"bytes":[6280,6358]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"201:14":{"kind":"call","span":{"start":[201,14],"end":[201,90],"bytes":[6437,6513]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue"},"205:19":{"kind":"call","span":{"start":[205,19],"end":[205,65],"bytes":[6581,6627]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue"},"208:17":{"kind":"call","span":{"start":[208,17],"end":[208,23],"bytes":[6692,6698]},"callee":null},"211:19":{"kind":"call","span":{"start":[211,19],"end":[211,75],"bytes":[6744,6800]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue"},"216:10":{"kind":"call","span":{"start":[216,10],"end":[216,35],"bytes":[6876,6901]},"callee":null},"218:17":{"kind":"call","span":{"start":[218,17],"end":[218,43],"bytes":[6948,6974]},"callee":null},"224:15":{"kind":"call","span":{"start":[224,15],"end":[224,63],"bytes":[7067,7115]},"callee":null},"228:23":{"kind":"call","span":{"start":[228,23],"end":[228,50],"bytes":[7210,7237]},"callee":null},"228:60":{"kind":"call","span":{"start":[228,60],"end":[228,89],"bytes":[7247,7276]},"callee":null},"231:10":{"kind":"call","span":{"start":[231,10],"end":[231,40],"bytes":[7344,7374]},"callee":null},"233:17":{"kind":"call","span":{"start":[233,17],"end":[233,54],"bytes":[7427,7464]},"callee":null},"236:10":{"kind":"call","span":{"start":[236,10],"end":[236,44],"bytes":[7513,7547]},"callee":null},"238:17":{"kind":"call","span":{"start":[238,17],"end":[238,58],"bytes":[7604,7645]},"callee":null},"243:11":{"kind":"call","span":{"start":[243,11],"end":[243,46],"bytes":[7721,7756]},"callee":null},"244:18":{"kind":"call","span":{"start":[244,18],"end":[244,52],"bytes":[7785,7819]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme"},"252:15":{"kind":"call","span":{"start":[252,15],"end":[252,53],"bytes":[7979,8017]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsHetznerEndpoint"},"253:14":{"kind":"call","span":{"start":[253,14],"end":[253,51],"bytes":[8031,8068]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsTigrisEndpoint"},"254:20":{"kind":"call","span":{"start":[254,20],"end":[254,63],"bytes":[8088,8131]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsDigitalOceanEndpoint"},"255:17":{"kind":"call","span":{"start":[255,17],"end":[255,57],"bytes":[8148,8188]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsBackblazeEndpoint"},"256:16":{"kind":"call","span":{"start":[256,16],"end":[256,55],"bytes":[8204,8243]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsFilebaseEndpoint"},"257:16":{"kind":"call","span":{"start":[257,16],"end":[257,55],"bytes":[8259,8298]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsScalewayEndpoint"},"258:20":{"kind":"call","span":{"start":[258,20],"end":[258,63],"bytes":[8318,8361]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsCloudflareR2Endpoint"},"259:13":{"kind":"call","span":{"start":[259,13],"end":[259,49],"bytes":[8374,8410]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsMinIOEndpoint"},"260:16":{"kind":"call","span":{"start":[260,16],"end":[260,55],"bytes":[8426,8465]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsSupabaseEndpoint"},"320:10":{"kind":"call","span":{"start":[320,10],"end":[320,43],"bytes":[10010,10043]},"callee":null},"322:17":{"kind":"call","span":{"start":[322,17],"end":[322,52],"bytes":[10105,10140]},"callee":null},"325:10":{"kind":"call","span":{"start":[325,10],"end":[325,37],"bytes":[10198,10225]},"callee":null},"327:17":{"kind":"call","span":{"start":[327,17],"end":[327,46],"bytes":[10281,10310]},"callee":null},"330:10":{"kind":"call","span":{"start":[330,10],"end":[330,40],"bytes":[10362,10392]},"callee":null},"332:17":{"kind":"call","span":{"start":[332,17],"end":[332,50],"bytes":[10451,10484]},"callee":null},"337:10":{"kind":"call","span":{"start":[337,10],"end":[337,34],"bytes":[10587,10611]},"callee":null},"339:17":{"kind":"call","span":{"start":[339,17],"end":[339,44],"bytes":[10664,10691]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ParseHost":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost","kind":"function","span":{"start":[1786,1],"end":[1830,2],"bytes":[55152,56729]},"signature":"github.com/benbjohnson/litestream/s3.ParseHost","parameters":[{"name":"host","type":"string","span":{"start":[1786,1],"end":[1786,85],"bytes":[55152,55236]}}],"return_type":"(string, string, string, bool)","metrics":{"cyclomatic":9},"body":{"1788:37":{"kind":"call","span":{"start":[1788,37],"end":[1788,67],"bytes":[55324,55354]},"callee":null},"1788:5":{"kind":"call","span":{"start":[1788,5],"end":[1788,32],"bytes":[55292,55319]},"callee":null},"1789:12":{"kind":"call","span":{"start":[1789,12],"end":[1789,40],"bytes":[55368,55396]},"callee":null},"1790:6":{"kind":"call","span":{"start":[1790,6],"end":[1790,16],"bytes":[55402,55412]},"callee":null},"1802:10":{"kind":"call","span":{"start":[1802,10],"end":[1802,45],"bytes":[55744,55779]},"callee":null},"1802:47":{"kind":"call","span":{"start":[1802,47],"end":[1802,53],"bytes":[55781,55787]},"callee":null},"1804:6":{"kind":"call","span":{"start":[1804,6],"end":[1804,12],"bytes":[55815,55821]},"callee":null},"1808:17":{"kind":"call","span":{"start":[1808,17],"end":[1808,59],"bytes":[55914,55956]},"callee":null},"1808:61":{"kind":"call","span":{"start":[1808,61],"end":[1808,67],"bytes":[55958,55964]},"callee":null},"1811:26":{"kind":"call","span":{"start":[1811,26],"end":[1811,82],"bytes":[56028,56084]},"callee":null},"1812:17":{"kind":"call","span":{"start":[1812,17],"end":[1812,56],"bytes":[56108,56147]},"callee":null},"1812:58":{"kind":"call","span":{"start":[1812,58],"end":[1812,64],"bytes":[56149,56155]},"callee":null},"1815:14":{"kind":"call","span":{"start":[1815,14],"end":[1815,66],"bytes":[56207,56259]},"callee":null},"1817:17":{"kind":"call","span":{"start":[1817,17],"end":[1817,55],"bytes":[56316,56354]},"callee":null},"1817:57":{"kind":"call","span":{"start":[1817,57],"end":[1817,63],"bytes":[56356,56362]},"callee":null},"1821:17":{"kind":"call","span":{"start":[1821,17],"end":[1821,55],"bytes":[56469,56507]},"callee":null},"1821:57":{"kind":"call","span":{"start":[1821,57],"end":[1821,63],"bytes":[56509,56515]},"callee":null},"1824:14":{"kind":"call","span":{"start":[1824,14],"end":[1824,52],"bytes":[56567,56605]},"callee":null}}},"github.com/benbjohnson/litestream/s3.ParseURL":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseURL","kind":"function","span":{"start":[1751,1],"end":[1782,2],"bytes":[54255,55013]},"signature":"github.com/benbjohnson/litestream/s3.ParseURL","parameters":[{"name":"s","type":"string","span":{"start":[1751,1],"end":[1751,76],"bytes":[54255,54330]}},{"name":"endpoint","type":"string","span":{"start":[1751,1],"end":[1751,76],"bytes":[54255,54330]}}],"return_type":"(string, string, string, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"1752:12":{"kind":"call","span":{"start":[1752,12],"end":[1752,24],"bytes":[54342,54354]},"callee":null},"1758:22":{"kind":"call","span":{"start":[1758,22],"end":[1758,58],"bytes":[54445,54481]},"callee":null},"1763:12":{"kind":"call","span":{"start":[1763,12],"end":[1763,67],"bytes":[54566,54621]},"callee":null},"1763:27":{"kind":"call","span":{"start":[1763,27],"end":[1763,58],"bytes":[54581,54612]},"callee":null},"1764:6":{"kind":"call","span":{"start":[1764,6],"end":[1764,16],"bytes":[54627,54637]},"callee":null},"1765:23":{"kind":"call","span":{"start":[1765,23],"end":[1765,56],"bytes":[54667,54700]},"callee":null},"1768:6":{"kind":"call","span":{"start":[1768,6],"end":[1768,16],"bytes":[54730,54740]},"callee":null},"1775:25":{"kind":"call","span":{"start":[1775,25],"end":[1775,42],"bytes":[54881,54898]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost"},"1780:8":{"kind":"call","span":{"start":[1780,8],"end":[1780,39],"bytes":[54947,54978]},"callee":null}}},"github.com/benbjohnson/litestream/s3.computeDeleteObjectsContentMD5":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.computeDeleteObjectsContentMD5","kind":"function","span":{"start":[1077,1],"end":[1092,2],"bytes":[36315,36656]},"signature":"github.com/benbjohnson/litestream/s3.computeDeleteObjectsContentMD5","parameters":[{"name":"deleteInput","type":"*github.com/aws/aws-sdk-go-v2/service/s3/types.Delete","span":{"start":[1077,1],"end":[1077,81],"bytes":[36315,36395]}}],"return_type":"(string, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1082:18":{"kind":"call","span":{"start":[1082,18],"end":[1082,51],"bytes":[36459,36492]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.marshalDeleteObjects"},"1086:5":{"kind":"call","span":{"start":[1086,5],"end":[1086,17],"bytes":[36534,36546]},"callee":null},"1090:9":{"kind":"call","span":{"start":[1090,9],"end":[1090,25],"bytes":[36583,36599]},"callee":null},"1091:9":{"kind":"call","span":{"start":[1091,9],"end":[1091,50],"bytes":[36608,36649]},"callee":null}}},"github.com/benbjohnson/litestream/s3.deleteOutputError":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.deleteOutputError","kind":"function","span":{"start":[1848,1],"end":[1860,2],"bytes":[57303,57645]},"signature":"github.com/benbjohnson/litestream/s3.deleteOutputError","parameters":[{"name":"out","type":"*github.com/aws/aws-sdk-go-v2/service/s3.DeleteObjectsOutput","span":{"start":[1848,1],"end":[1848,60],"bytes":[57303,57362]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"1849:5":{"kind":"call","span":{"start":[1849,5],"end":[1849,20],"bytes":[57367,57382]},"callee":null},"1855:2":{"kind":"call","span":{"start":[1855,2],"end":[1855,42],"bytes":[57455,57495]},"callee":null},"1857:3":{"kind":"call","span":{"start":[1857,3],"end":[1857,80],"bytes":[57532,57609]},"callee":null},"1857:31":{"kind":"call","span":{"start":[1857,31],"end":[1857,52],"bytes":[57560,57581]},"callee":null},"1857:54":{"kind":"call","span":{"start":[1857,54],"end":[1857,79],"bytes":[57583,57608]},"callee":null},"1859:20":{"kind":"call","span":{"start":[1859,20],"end":[1859,30],"bytes":[57632,57642]},"callee":null},"1859:9":{"kind":"call","span":{"start":[1859,9],"end":[1859,31],"bytes":[57621,57643]},"callee":null}}},"github.com/benbjohnson/litestream/s3.encodeDeleteDocument":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeDeleteDocument","kind":"function","span":{"start":[1117,1],"end":[1140,2],"bytes":[37177,37694]},"signature":"github.com/benbjohnson/litestream/s3.encodeDeleteDocument","parameters":[{"name":"v","type":"*github.com/aws/aws-sdk-go-v2/service/s3/types.Delete","span":{"start":[1117,1],"end":[1117,74],"bytes":[37177,37250]}},{"name":"value","type":"github.com/aws/smithy-go/encoding/xml.Value","span":{"start":[1117,1],"end":[1117,74],"bytes":[37177,37250]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1118:8":{"kind":"call","span":{"start":[1118,8],"end":[1118,21],"bytes":[37258,37271]},"callee":null},"1125:9":{"kind":"call","span":{"start":[1125,9],"end":[1125,37],"bytes":[37393,37421]},"callee":null},"1126:13":{"kind":"call","span":{"start":[1126,13],"end":[1126,54],"bytes":[37434,37475]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifierList"},"1136:9":{"kind":"call","span":{"start":[1136,9],"end":[1136,34],"bytes":[37629,37654]},"callee":null},"1137:3":{"kind":"call","span":{"start":[1137,3],"end":[1137,23],"bytes":[37657,37677]},"callee":null}}},"github.com/benbjohnson/litestream/s3.encodeObjectIdentifier":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifier","kind":"function","span":{"start":[1160,1],"end":[1203,2],"bytes":[38235,39183]},"signature":"github.com/benbjohnson/litestream/s3.encodeObjectIdentifier","parameters":[{"name":"v","type":"*github.com/aws/aws-sdk-go-v2/service/s3/types.ObjectIdentifier","span":{"start":[1160,1],"end":[1160,86],"bytes":[38235,38320]}},{"name":"value","type":"github.com/aws/smithy-go/encoding/xml.Value","span":{"start":[1160,1],"end":[1160,86],"bytes":[38235,38320]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"1161:8":{"kind":"call","span":{"start":[1161,8],"end":[1161,21],"bytes":[38328,38341]},"callee":null},"1163:9":{"kind":"call","span":{"start":[1163,9],"end":[1167,5],"bytes":[38370,38468]},"callee":null},"1168:3":{"kind":"call","span":{"start":[1168,3],"end":[1168,21],"bytes":[38471,38489]},"callee":null},"1171:9":{"kind":"call","span":{"start":[1171,9],"end":[1175,5],"bytes":[38520,38617]},"callee":null},"1176:3":{"kind":"call","span":{"start":[1176,3],"end":[1176,20],"bytes":[38620,38637]},"callee":null},"1179:9":{"kind":"call","span":{"start":[1179,9],"end":[1183,5],"bytes":[38681,38791]},"callee":null},"1184:13":{"kind":"call","span":{"start":[1184,13],"end":[1184,59],"bytes":[38804,38850]},"callee":null},"1184:3":{"kind":"call","span":{"start":[1184,3],"end":[1184,60],"bytes":[38794,38851]},"callee":null},"1187:9":{"kind":"call","span":{"start":[1187,9],"end":[1191,5],"bytes":[38883,38981]},"callee":null},"1192:3":{"kind":"call","span":{"start":[1192,3],"end":[1192,19],"bytes":[38984,39000]},"callee":null},"1195:9":{"kind":"call","span":{"start":[1195,9],"end":[1199,5],"bytes":[39037,39140]},"callee":null},"1200:3":{"kind":"call","span":{"start":[1200,3],"end":[1200,26],"bytes":[39143,39166]},"callee":null}}},"github.com/benbjohnson/litestream/s3.encodeObjectIdentifierList":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifierList","kind":"function","span":{"start":[1142,1],"end":[1155,2],"bytes":[37696,38009]},"signature":"github.com/benbjohnson/litestream/s3.encodeObjectIdentifierList","parameters":[{"name":"v","type":"[]github.com/aws/aws-sdk-go-v2/service/s3/types.ObjectIdentifier","span":{"start":[1142,1],"end":[1142,91],"bytes":[37696,37786]}},{"name":"value","type":"github.com/aws/smithy-go/encoding/xml.Value","span":{"start":[1142,1],"end":[1142,91],"bytes":[37696,37786]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"1143:6":{"kind":"call","span":{"start":[1143,6],"end":[1143,25],"bytes":[37792,37811]},"callee":null},"1144:9":{"kind":"call","span":{"start":[1144,9],"end":[1144,22],"bytes":[37822,37835]},"callee":null},"1147:11":{"kind":"call","span":{"start":[1147,11],"end":[1147,24],"bytes":[37850,37863]},"callee":null},"1149:13":{"kind":"call","span":{"start":[1149,13],"end":[1149,27],"bytes":[37896,37910]},"callee":null},"1150:13":{"kind":"call","span":{"start":[1150,13],"end":[1150,50],"bytes":[37923,37960]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifier"}}},"github.com/benbjohnson/litestream/s3.init":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.init","kind":"function","span":{"start":[47,1],"end":[49,2],"bytes":[1012,1099]},"signature":"github.com/benbjohnson/litestream/s3.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"48:2":{"kind":"call","span":{"start":[48,2],"end":[48,72],"bytes":[1027,1097]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}},"github.com/benbjohnson/litestream/s3.isNotExists":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists","kind":"function","span":{"start":[1840,1],"end":[1846,2],"bytes":[57147,57301]},"signature":"github.com/benbjohnson/litestream/s3.isNotExists","parameters":[{"name":"err","type":"error","span":{"start":[1840,1],"end":[1840,35],"bytes":[57147,57181]}}],"return_type":"bool","metrics":{"cyclomatic":2},"body":{"1842:5":{"kind":"call","span":{"start":[1842,5],"end":[1842,28],"bytes":[57214,57237]},"callee":null},"1843:10":{"kind":"call","span":{"start":[1843,10],"end":[1843,28],"bytes":[57249,57267]},"callee":null}}},"github.com/benbjohnson/litestream/s3.marshalDeleteObjects":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.marshalDeleteObjects","kind":"function","span":{"start":[1094,1],"end":[1115,2],"bytes":[36658,37175]},"signature":"github.com/benbjohnson/litestream/s3.marshalDeleteObjects","parameters":[{"name":"deleteInput","type":"*github.com/aws/aws-sdk-go-v2/service/s3/types.Delete","span":{"start":[1094,1],"end":[1094,71],"bytes":[36658,36728]}}],"return_type":"([]byte, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"1100:13":{"kind":"call","span":{"start":[1100,13],"end":[1100,39],"bytes":[36810,36836]},"callee":null},"1106:4":{"kind":"call","span":{"start":[1106,4],"end":[1106,82],"bytes":[36948,37026]},"callee":null},"1110:12":{"kind":"call","span":{"start":[1110,12],"end":[1110,72],"bytes":[37048,37108]},"callee":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeDeleteDocument"},"1110:46":{"kind":"call","span":{"start":[1110,46],"end":[1110,71],"bytes":[37082,37107]},"callee":null},"1114:9":{"kind":"call","span":{"start":[1114,9],"end":[1114,24],"bytes":[37153,37168]},"callee":null}}},"github.com/benbjohnson/litestream/s3.newFileIterator":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.newFileIterator","kind":"function","span":{"start":[1538,1],"end":[1560,2],"bytes":[48468,49164]},"signature":"github.com/benbjohnson/litestream/s3.newFileIterator","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[1538,1],"end":[1538,125],"bytes":[48468,48592]}},{"name":"client","type":"*github.com/benbjohnson/litestream/s3.ReplicaClient","span":{"start":[1538,1],"end":[1538,125],"bytes":[48468,48592]}},{"name":"level","type":"int","span":{"start":[1538,1],"end":[1538,125],"bytes":[48468,48592]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[1538,1],"end":[1538,125],"bytes":[48468,48592]}},{"name":"useMetadata","type":"bool","span":{"start":[1538,1],"end":[1538,125],"bytes":[48468,48592]}}],"return_type":"*github.com/benbjohnson/litestream/s3.fileIterator","metrics":{"cyclomatic":1},"body":{"1539:17":{"kind":"call","span":{"start":[1539,17],"end":[1539,40],"bytes":[48609,48632]},"callee":null},"1541:32":{"kind":"call","span":{"start":[1541,32],"end":[1541,59],"bytes":[48665,48692]},"callee":null},"1550:18":{"kind":"call","span":{"start":[1550,18],"end":[1550,44],"bytes":[48907,48933]},"callee":null},"1554:18":{"kind":"call","span":{"start":[1554,18],"end":[1557,4],"bytes":[49015,49149]},"callee":null},"1555:11":{"kind":"call","span":{"start":[1555,11],"end":[1555,36],"bytes":[49089,49114]},"callee":null},"1556:11":{"kind":"call","span":{"start":[1556,11],"end":[1556,29],"bytes":[49126,49144]},"callee":null}}},"github.com/benbjohnson/litestream/s3.newTransportRetryer":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.newTransportRetryer","kind":"function","span":{"start":[594,1],"end":[612,2],"bytes":[19486,20228]},"signature":"github.com/benbjohnson/litestream/s3.newTransportRetryer","parameters":[],"return_type":"github.com/aws/aws-sdk-go-v2/aws.Retryer","metrics":{"cyclomatic":1},"body":{"595:9":{"kind":"call","span":{"start":[595,9],"end":[611,4],"bytes":[19535,20226]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.newTransportRetryer/github.com/benbjohnson/litestream/s3.newTransportRetryer.closure_1","kind":"function","span":{"start":[595,1],"end":[611,4],"bytes":[19527,20226]},"signature":"github.com/benbjohnson/litestream/s3.newTransportRetryer.closure_1","parameters":[{"name":"o","type":"*github.com/aws/aws-sdk-go-v2/aws/retry.StandardOptions","span":{"start":[595,1],"end":[595,59],"bytes":[19527,19585]}}],"body":{"603:18":{"kind":"call","span":{"start":[603,18],"end":[610,4],"bytes":[20008,20222]},"callee":null}}}}},"github.com/benbjohnson/litestream/s3.parseS3DebugEnv":{"id":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.parseS3DebugEnv","kind":"function","span":{"start":[1864,1],"end":[1893,2],"bytes":[57807,58710]},"signature":"github.com/benbjohnson/litestream/s3.parseS3DebugEnv","parameters":[],"return_type":"github.com/aws/aws-sdk-go-v2/aws.ClientLogMode","metrics":{"cyclomatic":12},"body":{"1865:7":{"kind":"call","span":{"start":[1865,7],"end":[1865,39],"bytes":[57856,57888]},"callee":null},"1871:23":{"kind":"call","span":{"start":[1871,23],"end":[1871,44],"bytes":[57971,57992]},"callee":null},"1872:10":{"kind":"call","span":{"start":[1872,10],"end":[1872,50],"bytes":[58004,58044]},"callee":null},"1872:26":{"kind":"call","span":{"start":[1872,26],"end":[1872,49],"bytes":[58020,58043]},"callee":null},"1889:4":{"kind":"call","span":{"start":[1889,4],"end":[1889,156],"bytes":[58533,58685]},"callee":null}}}},"content_hash":"067ee2bdceaeb371ea22bf7d32034bcfa8e86ff8c0292bcb38d3d784db69cc78"},"server.go":{"id":"can://go/litestream/server.go","kind":"module","span":{"start":[1,1],"end":[681,1],"bytes":[0,17841]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/pprof\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n)\n\n// SocketConfig configures the Unix socket for control commands.\ntype SocketConfig struct {\n\tEnabled bool `yaml:\"enabled\"`\n\tPath string `yaml:\"path\"`\n\tPermissions uint32 `yaml:\"permissions\"`\n}\n\n// DefaultSocketConfig returns the default socket configuration.\nfunc DefaultSocketConfig() SocketConfig {\n\treturn SocketConfig{\n\t\tEnabled: false,\n\t\tPath: \"/var/run/litestream.sock\",\n\t\tPermissions: 0600,\n\t}\n}\n\n// Server manages runtime control via Unix socket using HTTP.\ntype Server struct {\n\tstore *Store\n\n\t// SocketPath is the path to the Unix socket.\n\tSocketPath string\n\n\t// SocketPerms is the file permissions for the socket.\n\tSocketPerms uint32\n\n\t// PathExpander optionally expands paths (e.g., ~ expansion).\n\t// If nil, paths are used as-is.\n\tPathExpander func(string) (string, error)\n\n\t// Version is the version string to report in /info.\n\tVersion string\n\n\t// startedAt is set when the server starts.\n\tstartedAt time.Time\n\n\tsocketListener net.Listener\n\thttpServer *http.Server\n\n\tctx context.Context\n\tcancel context.CancelFunc\n\twg sync.WaitGroup\n\n\tlogger *slog.Logger\n}\n\n// NewServer creates a new Server instance.\nfunc NewServer(store *Store) *Server {\n\tctx, cancel := context.WithCancel(context.Background())\n\ts := \u0026Server{\n\t\tstore: store,\n\t\tSocketPerms: 0600,\n\t\tctx: ctx,\n\t\tcancel: cancel,\n\t\tlogger: slog.Default().With(LogKeySystem, LogSystemServer),\n\t}\n\n\tmux := http.NewServeMux()\n\tmux.HandleFunc(\"POST /start\", s.handleStart)\n\tmux.HandleFunc(\"POST /stop\", s.handleStop)\n\tmux.HandleFunc(\"GET /txid\", s.handleTXID)\n\tmux.HandleFunc(\"POST /register\", s.handleRegister)\n\tmux.HandleFunc(\"POST /unregister\", s.handleUnregister)\n\tmux.HandleFunc(\"POST /sync\", s.handleSync)\n\tmux.HandleFunc(\"GET /list\", s.handleList)\n\tmux.HandleFunc(\"GET /info\", s.handleInfo)\n\tmux.HandleFunc(\"GET /debug/sync-status\", s.handleSyncStatus)\n\n\t// pprof endpoints\n\tmux.HandleFunc(\"GET /debug/pprof/\", pprof.Index)\n\tmux.HandleFunc(\"GET /debug/pprof/cmdline\", pprof.Cmdline)\n\tmux.HandleFunc(\"GET /debug/pprof/profile\", pprof.Profile)\n\tmux.HandleFunc(\"GET /debug/pprof/symbol\", pprof.Symbol)\n\tmux.HandleFunc(\"GET /debug/pprof/trace\", pprof.Trace)\n\n\ts.httpServer = \u0026http.Server{Handler: mux}\n\n\treturn s\n}\n\n// Start begins listening for control connections.\nfunc (s *Server) Start() error {\n\tif s.SocketPath == \"\" {\n\t\treturn fmt.Errorf(\"socket path required\")\n\t}\n\n\t// Check if socket file exists and is actually a socket before removing\n\tif info, err := os.Lstat(s.SocketPath); err == nil {\n\t\tif info.Mode()\u0026os.ModeSocket != 0 {\n\t\t\tif err := os.Remove(s.SocketPath); err != nil {\n\t\t\t\treturn fmt.Errorf(\"remove existing socket: %w\", err)\n\t\t\t}\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"socket path exists but is not a socket: %s\", s.SocketPath)\n\t\t}\n\t} else if !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"check socket path: %w\", err)\n\t}\n\n\tlistener, err := net.Listen(\"unix\", s.SocketPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"listen on unix socket: %w\", err)\n\t}\n\ts.socketListener = listener\n\n\tif err := os.Chmod(s.SocketPath, os.FileMode(s.SocketPerms)); err != nil {\n\t\tlistener.Close()\n\t\treturn fmt.Errorf(\"chmod socket: %w\", err)\n\t}\n\n\t// Set startedAt after successful socket setup to ensure uptime reflects\n\t// the actual time the server became available.\n\ts.startedAt = time.Now()\n\n\ts.logger.Info(\"control socket listening\", \"path\", s.SocketPath)\n\n\ts.wg.Add(1)\n\tgo func() {\n\t\tdefer s.wg.Done()\n\t\tif err := s.httpServer.Serve(listener); err != nil \u0026\u0026 err != http.ErrServerClosed {\n\t\t\ts.logger.Error(\"http server error\", \"error\", err)\n\t\t}\n\t}()\n\n\treturn nil\n}\n\n// Close gracefully shuts down the control server.\nfunc (s *Server) Close() error {\n\ts.cancel()\n\n\tctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)\n\tdefer cancel()\n\n\tif s.httpServer != nil {\n\t\tif err := s.httpServer.Shutdown(ctx); err != nil {\n\t\t\ts.logger.Error(\"http server shutdown error\", \"error\", err)\n\t\t}\n\t}\n\ts.wg.Wait()\n\treturn nil\n}\n\n// expandPath expands the path using PathExpander if set.\nfunc (s *Server) expandPath(path string) (string, error) {\n\tif s.PathExpander != nil {\n\t\treturn s.PathExpander(path)\n\t}\n\treturn path, nil\n}\n\nfunc (s *Server) handleStart(w http.ResponseWriter, r *http.Request) {\n\tvar req StartRequest\n\tif err := json.NewDecoder(r.Body).Decode(\u0026req); err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, \"invalid request body\", err.Error())\n\t\treturn\n\t}\n\n\tif req.Path == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"path required\", nil)\n\t\treturn\n\t}\n\n\texpandedPath, err := s.expandPath(req.Path)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\treturn\n\t}\n\n\tctx := s.ctx\n\tif req.Timeout \u003e 0 {\n\t\tvar cancel context.CancelFunc\n\t\tctx, cancel = context.WithTimeout(s.ctx, time.Duration(req.Timeout)*time.Second)\n\t\tdefer cancel()\n\t}\n\n\tdb := s.store.FindDB(expandedPath)\n\tif db == nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, fmt.Sprintf(\"database not found: %s\", expandedPath), nil)\n\t\treturn\n\t}\n\n\tstatus := \"started\"\n\tif db.IsOpen() {\n\t\tstatus = \"already_running\"\n\t} else {\n\t\tif err := s.store.EnableDB(ctx, expandedPath); err != nil {\n\t\t\twriteJSONError(w, http.StatusInternalServerError, err.Error(), nil)\n\t\t\treturn\n\t\t}\n\t}\n\ttxID, err := s.storeTXID(expandedPath)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, err.Error(), nil)\n\t\treturn\n\t}\n\n\twriteJSON(w, http.StatusOK, StartResponse{\n\t\tStatus: status,\n\t\tPath: expandedPath,\n\t\tTXID: txID,\n\t})\n}\n\nfunc (s *Server) handleStop(w http.ResponseWriter, r *http.Request) {\n\tvar req StopRequest\n\tif err := json.NewDecoder(r.Body).Decode(\u0026req); err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, \"invalid request body\", err.Error())\n\t\treturn\n\t}\n\n\tif req.Path == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"path required\", nil)\n\t\treturn\n\t}\n\n\texpandedPath, err := s.expandPath(req.Path)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\treturn\n\t}\n\n\ttimeout := req.Timeout\n\tif timeout == 0 {\n\t\ttimeout = 30\n\t}\n\tctx, cancel := context.WithTimeout(s.ctx, time.Duration(timeout)*time.Second)\n\tdefer cancel()\n\n\tdb := s.store.FindDB(expandedPath)\n\tif db == nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, fmt.Sprintf(\"database not found: %s\", expandedPath), nil)\n\t\treturn\n\t}\n\n\tstatus := \"stopped\"\n\tif !db.IsOpen() {\n\t\tstatus = \"already_stopped\"\n\t} else {\n\t\tif err := s.store.DisableDB(ctx, expandedPath); err != nil {\n\t\t\twriteJSONError(w, http.StatusInternalServerError, err.Error(), nil)\n\t\t\treturn\n\t\t}\n\t}\n\ttxID, err := s.storeTXID(expandedPath)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, err.Error(), nil)\n\t\treturn\n\t}\n\n\twriteJSON(w, http.StatusOK, StopResponse{\n\t\tStatus: status,\n\t\tPath: expandedPath,\n\t\tTXID: txID,\n\t})\n}\n\nfunc (s *Server) storeTXID(path string) (uint64, error) {\n\tdb := s.store.FindDB(path)\n\tif db == nil {\n\t\treturn 0, fmt.Errorf(\"database not found: %s\", path)\n\t}\n\n\t_, maxTXID, err := db.MaxLTX()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"read txid: %w\", err)\n\t}\n\treturn uint64(maxTXID), nil\n}\n\nfunc (s *Server) handleTXID(w http.ResponseWriter, r *http.Request) {\n\tpath := r.URL.Query().Get(\"path\")\n\tif path == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"path required\", nil)\n\t\treturn\n\t}\n\n\texpandedPath, err := s.expandPath(path)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\treturn\n\t}\n\n\tdb := s.store.FindDB(expandedPath)\n\tif db == nil {\n\t\twriteJSONError(w, http.StatusNotFound, \"database not found\", nil)\n\t\treturn\n\t}\n\n\tpos, err := db.Pos()\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, err.Error(), nil)\n\t\treturn\n\t}\n\n\twriteJSON(w, http.StatusOK, TXIDResponse{\n\t\tTXID: uint64(pos.TXID),\n\t})\n}\n\nfunc (s *Server) handleSyncStatus(w http.ResponseWriter, r *http.Request) {\n\tpath := r.URL.Query().Get(\"path\")\n\tif path != \"\" {\n\t\texpandedPath, err := s.expandPath(path)\n\t\tif err != nil {\n\t\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\t\treturn\n\t\t}\n\n\t\tdb := s.store.FindDB(expandedPath)\n\t\tif db == nil {\n\t\t\twriteJSONError(w, http.StatusNotFound, \"database not found\", nil)\n\t\t\treturn\n\t\t}\n\n\t\twriteJSON(w, http.StatusOK, SyncDiagnosticsResponse{\n\t\t\tDatabases: []SyncDiagnostic{db.SyncDiagnostic()},\n\t\t})\n\t\treturn\n\t}\n\n\tdbs := s.store.DBs()\n\tdiagnostics := make([]SyncDiagnostic, 0, len(dbs))\n\tfor _, db := range dbs {\n\t\tdiagnostics = append(diagnostics, db.SyncDiagnostic())\n\t}\n\twriteJSON(w, http.StatusOK, SyncDiagnosticsResponse{Databases: diagnostics})\n}\n\nfunc writeJSON(w http.ResponseWriter, status int, v interface{}) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tw.WriteHeader(status)\n\tjson.NewEncoder(w).Encode(v)\n}\n\nfunc writeJSONError(w http.ResponseWriter, status int, message string, details interface{}) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tw.WriteHeader(status)\n\tjson.NewEncoder(w).Encode(ErrorResponse{\n\t\tError: message,\n\t\tDetails: details,\n\t})\n}\n\n// StartRequest is the request body for the /start endpoint.\ntype StartRequest struct {\n\tPath string `json:\"path\"`\n\tTimeout int `json:\"timeout,omitempty\"`\n}\n\n// StartResponse is the response body for the /start endpoint.\ntype StartResponse struct {\n\tStatus string `json:\"status\"`\n\tPath string `json:\"path\"`\n\tTXID uint64 `json:\"txid\"`\n}\n\n// StopRequest is the request body for the /stop endpoint.\ntype StopRequest struct {\n\tPath string `json:\"path\"`\n\tTimeout int `json:\"timeout,omitempty\"`\n}\n\n// StopResponse is the response body for the /stop endpoint.\ntype StopResponse struct {\n\tStatus string `json:\"status\"`\n\tPath string `json:\"path\"`\n\tTXID uint64 `json:\"txid\"`\n}\n\n// ErrorResponse is returned when an error occurs.\ntype ErrorResponse struct {\n\tError string `json:\"error\"`\n\tDetails interface{} `json:\"details,omitempty\"`\n}\n\n// TXIDResponse is the response body for the /txid endpoint.\ntype TXIDResponse struct {\n\tTXID uint64 `json:\"txid\"`\n}\n\n// SyncDiagnosticsResponse is the response body for /debug/sync-status.\ntype SyncDiagnosticsResponse struct {\n\tDatabases []SyncDiagnostic `json:\"databases\"`\n}\n\nfunc (s *Server) handleSync(w http.ResponseWriter, r *http.Request) {\n\tvar req SyncRequest\n\tif err := json.NewDecoder(r.Body).Decode(\u0026req); err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, \"invalid request body\", err.Error())\n\t\treturn\n\t}\n\n\tif req.Path == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"path required\", nil)\n\t\treturn\n\t}\n\n\texpandedPath, err := s.expandPath(req.Path)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\treturn\n\t}\n\n\tctx := s.ctx\n\tif req.Wait \u0026\u0026 req.Timeout == 0 {\n\t\treq.Timeout = 30\n\t}\n\tif req.Timeout \u003e 0 {\n\t\tvar cancel context.CancelFunc\n\t\tctx, cancel = context.WithTimeout(s.ctx, time.Duration(req.Timeout)*time.Second)\n\t\tdefer cancel()\n\t}\n\n\tresult, err := s.store.SyncDB(ctx, expandedPath, req.Wait)\n\tif err != nil {\n\t\tswitch {\n\t\tcase errors.Is(err, ErrDatabaseNotFound):\n\t\t\twriteJSONError(w, http.StatusNotFound, err.Error(), nil)\n\t\tcase errors.Is(err, ErrDatabaseNotOpen):\n\t\t\twriteJSONError(w, http.StatusConflict, err.Error(), nil)\n\t\tdefault:\n\t\t\twriteJSONError(w, http.StatusInternalServerError, err.Error(), nil)\n\t\t}\n\t\treturn\n\t}\n\n\tvar status string\n\tif !result.Changed {\n\t\tstatus = \"no_change\"\n\t} else if req.Wait {\n\t\tstatus = \"synced\"\n\t} else {\n\t\tstatus = \"synced_local\"\n\t}\n\n\twriteJSON(w, http.StatusOK, SyncResponse{\n\t\tStatus: status,\n\t\tPath: expandedPath,\n\t\tTXID: result.TXID,\n\t\tReplicatedTXID: result.ReplicatedTXID,\n\t})\n}\n\n// SyncRequest is the request body for the /sync endpoint.\ntype SyncRequest struct {\n\tPath string `json:\"path\"`\n\tWait bool `json:\"wait,omitempty\"`\n\tTimeout int `json:\"timeout,omitempty\"`\n}\n\n// SyncResponse is the response body for the /sync endpoint.\ntype SyncResponse struct {\n\tStatus string `json:\"status\"`\n\tPath string `json:\"path\"`\n\tTXID uint64 `json:\"txid\"`\n\tReplicatedTXID uint64 `json:\"replicated_txid\"`\n}\n\nfunc (s *Server) handleList(w http.ResponseWriter, _ *http.Request) {\n\tdbs := s.store.DBs()\n\tresp := ListResponse{\n\t\tDatabases: make([]DatabaseSummary, 0, len(dbs)),\n\t}\n\n\tfor _, db := range dbs {\n\t\tvar status string\n\t\tif db.IsOpen() {\n\t\t\tif db.Replica != nil \u0026\u0026 db.Replica.MonitorEnabled {\n\t\t\t\tstatus = \"replicating\"\n\t\t\t} else {\n\t\t\t\tstatus = \"open\"\n\t\t\t}\n\t\t} else {\n\t\t\tstatus = \"stopped\"\n\t\t}\n\n\t\tsummary := DatabaseSummary{\n\t\t\tPath: db.Path(),\n\t\t\tStatus: status,\n\t\t}\n\n\t\tif t := db.LastSuccessfulSyncAt(); !t.IsZero() {\n\t\t\tsummary.LastSyncAt = \u0026t\n\t\t}\n\n\t\tresp.Databases = append(resp.Databases, summary)\n\t}\n\n\twriteJSON(w, http.StatusOK, resp)\n}\n\nfunc (s *Server) handleInfo(w http.ResponseWriter, _ *http.Request) {\n\tresp := InfoResponse{\n\t\tVersion: s.Version,\n\t\tPID: os.Getpid(),\n\t\tStartedAt: s.startedAt,\n\t\tUptimeSeconds: int64(time.Since(s.startedAt).Seconds()),\n\t\tDatabaseCount: len(s.store.DBs()),\n\t}\n\n\twriteJSON(w, http.StatusOK, resp)\n}\n\n// ListResponse is the response body for the /list endpoint.\ntype ListResponse struct {\n\tDatabases []DatabaseSummary `json:\"databases\"`\n}\n\n// DatabaseSummary contains summary information about a database.\ntype DatabaseSummary struct {\n\tPath string `json:\"path\"`\n\tStatus string `json:\"status\"`\n\n\t// LastSyncAt is the timestamp of the last successful replica sync.\n\t// This reflects when data was last successfully uploaded to the replica\n\t// storage backend, not just when the local WAL was processed.\n\tLastSyncAt *time.Time `json:\"last_sync_at,omitempty\"`\n}\n\n// InfoResponse is the response body for the /info endpoint.\ntype InfoResponse struct {\n\tVersion string `json:\"version\"`\n\tPID int `json:\"pid\"`\n\tUptimeSeconds int64 `json:\"uptime_seconds\"`\n\tStartedAt time.Time `json:\"started_at\"`\n\tDatabaseCount int `json:\"database_count\"`\n}\n\n// RegisterDatabaseRequest is the request body for the /register endpoint.\ntype RegisterDatabaseRequest struct {\n\tPath string `json:\"path\"`\n\tReplicaURL string `json:\"replica_url\"`\n}\n\n// RegisterDatabaseResponse is the response body for the /register endpoint.\ntype RegisterDatabaseResponse struct {\n\tStatus string `json:\"status\"`\n\tPath string `json:\"path\"`\n}\n\n// UnregisterDatabaseRequest is the request body for the /unregister endpoint.\ntype UnregisterDatabaseRequest struct {\n\tPath string `json:\"path\"`\n\tTimeout int `json:\"timeout,omitempty\"`\n}\n\n// UnregisterDatabaseResponse is the response body for the /unregister endpoint.\ntype UnregisterDatabaseResponse struct {\n\tStatus string `json:\"status\"`\n\tPath string `json:\"path\"`\n\tTXID uint64 `json:\"txid\"`\n}\n\nfunc (s *Server) handleRegister(w http.ResponseWriter, r *http.Request) {\n\tvar req RegisterDatabaseRequest\n\tif err := json.NewDecoder(r.Body).Decode(\u0026req); err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, \"invalid request body\", err.Error())\n\t\treturn\n\t}\n\n\tif req.Path == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"path required\", nil)\n\t\treturn\n\t}\n\n\tif req.ReplicaURL == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"replica_url required\", nil)\n\t\treturn\n\t}\n\n\texpandedPath, err := s.expandPath(req.Path)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\treturn\n\t}\n\n\t// Check if database already exists.\n\tif existing := s.store.FindDB(expandedPath); existing != nil {\n\t\twriteJSON(w, http.StatusOK, RegisterDatabaseResponse{\n\t\t\tStatus: \"already_registered\",\n\t\t\tPath: expandedPath,\n\t\t})\n\t\treturn\n\t}\n\n\t// Create replica client from URL.\n\tclient, err := NewReplicaClientFromURL(req.ReplicaURL)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid replica url: %v\", err), nil)\n\t\treturn\n\t}\n\n\t// Create new database.\n\tdb := NewDB(expandedPath)\n\n\t// Create replica and attach client.\n\treplica := NewReplica(db)\n\treplica.Client = client\n\tdb.Replica = replica\n\n\t// Register database with store (this also opens the database).\n\tif err := s.store.RegisterDB(db); err != nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, fmt.Sprintf(\"failed to register database: %v\", err), nil)\n\t\treturn\n\t}\n\n\twriteJSON(w, http.StatusOK, RegisterDatabaseResponse{\n\t\tStatus: \"registered\",\n\t\tPath: expandedPath,\n\t})\n}\n\nfunc (s *Server) handleUnregister(w http.ResponseWriter, r *http.Request) {\n\tvar req UnregisterDatabaseRequest\n\tif err := json.NewDecoder(r.Body).Decode(\u0026req); err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, \"invalid request body\", err.Error())\n\t\treturn\n\t}\n\n\tif req.Path == \"\" {\n\t\twriteJSONError(w, http.StatusBadRequest, \"path required\", nil)\n\t\treturn\n\t}\n\n\texpandedPath, err := s.expandPath(req.Path)\n\tif err != nil {\n\t\twriteJSONError(w, http.StatusBadRequest, fmt.Sprintf(\"invalid path: %v\", err), nil)\n\t\treturn\n\t}\n\n\t// Set up timeout context. Treat non-positive values as default.\n\ttimeout := req.Timeout\n\tif timeout \u003c= 0 {\n\t\ttimeout = 30\n\t}\n\tctx, cancel := context.WithTimeout(s.ctx, time.Duration(timeout)*time.Second)\n\tdefer cancel()\n\n\tdb := s.store.FindDB(expandedPath)\n\n\t// Remove database from store (this also closes it).\n\tif err := s.store.UnregisterDB(ctx, expandedPath); err != nil {\n\t\twriteJSONError(w, http.StatusInternalServerError, fmt.Sprintf(\"failed to unregister database: %v\", err), nil)\n\t\treturn\n\t}\n\tvar txID uint64\n\tstatus := \"already_unregistered\"\n\tif db != nil {\n\t\t_, maxTXID, err := db.MaxLTX()\n\t\tif err != nil {\n\t\t\twriteJSONError(w, http.StatusInternalServerError, fmt.Sprintf(\"failed to read final txid: %v\", err), nil)\n\t\t\treturn\n\t\t}\n\t\ttxID = uint64(maxTXID)\n\t\tstatus = \"unregistered\"\n\t}\n\n\twriteJSON(w, http.StatusOK, UnregisterDatabaseResponse{\n\t\tStatus: status,\n\t\tPath: expandedPath,\n\t\tTXID: txID,\n\t})\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"json","path":"encoding/json","span":{"start":[5,1],"end":[5,17],"bytes":[40,56]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[57,66]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[67,73]}},{"name":"slog","path":"log/slog","span":{"start":[8,1],"end":[8,12],"bytes":[74,85]}},{"name":"net","path":"net","span":{"start":[9,1],"end":[9,7],"bytes":[86,92]}},{"name":"http","path":"net/http","span":{"start":[10,1],"end":[10,12],"bytes":[93,104]}},{"name":"pprof","path":"net/http/pprof","span":{"start":[11,1],"end":[11,18],"bytes":[105,122]}},{"name":"os","path":"os","span":{"start":[12,1],"end":[12,6],"bytes":[123,128]}},{"name":"sync","path":"sync","span":{"start":[13,1],"end":[13,8],"bytes":[129,136]}},{"name":"time","path":"time","span":{"start":[14,1],"end":[14,8],"bytes":[137,144]}}],"types":{"DatabaseSummary":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DatabaseSummary","kind":"struct","span":{"start":[527,1],"end":[535,2],"bytes":[13353,13707]},"callables":{},"fields":{"LastSyncAt":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DatabaseSummary/LastSyncAt","kind":"field","type":"*time.Time","span":{"start":[534,1],"end":[534,55],"bytes":[13651,13705]}},"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DatabaseSummary/Path","kind":"field","type":"string","span":{"start":[528,1],"end":[528,29],"bytes":[13383,13411]}},"Status":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DatabaseSummary/Status","kind":"field","type":"string","span":{"start":[529,1],"end":[529,31],"bytes":[13412,13442]}}}},"ErrorResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.ErrorResponse","kind":"struct","span":{"start":[388,1],"end":[391,2],"bytes":[9884,9997]},"callables":{},"fields":{"Details":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.ErrorResponse/Details","kind":"field","type":"interface{}","span":{"start":[390,1],"end":[390,48],"bytes":[9948,9995]}},"Error":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.ErrorResponse/Error","kind":"field","type":"string","span":{"start":[389,1],"end":[389,36],"bytes":[9912,9947]}}}},"InfoResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.InfoResponse","kind":"struct","span":{"start":[538,1],"end":[544,2],"bytes":[13770,14021]},"callables":{},"fields":{"DatabaseCount":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.InfoResponse/DatabaseCount","kind":"field","type":"int","span":{"start":[543,1],"end":[543,49],"bytes":[13971,14019]}},"PID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.InfoResponse/PID","kind":"field","type":"int","span":{"start":[540,1],"end":[540,38],"bytes":[13839,13876]}},"StartedAt":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.InfoResponse/StartedAt","kind":"field","type":"time.Time","span":{"start":[542,1],"end":[542,45],"bytes":[13926,13970]}},"UptimeSeconds":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.InfoResponse/UptimeSeconds","kind":"field","type":"int64","span":{"start":[541,1],"end":[541,49],"bytes":[13877,13925]}},"Version":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.InfoResponse/Version","kind":"field","type":"string","span":{"start":[539,1],"end":[539,42],"bytes":[13797,13838]}}}},"ListResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.ListResponse","kind":"struct","span":{"start":[522,1],"end":[524,2],"bytes":[13209,13285]},"callables":{},"fields":{"Databases":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.ListResponse/Databases","kind":"field","type":"[]github.com/benbjohnson/litestream.DatabaseSummary","span":{"start":[523,1],"end":[523,48],"bytes":[13236,13283]}}}},"RegisterDatabaseRequest":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.RegisterDatabaseRequest","kind":"struct","span":{"start":[547,1],"end":[550,2],"bytes":[14098,14210]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.RegisterDatabaseRequest/Path","kind":"field","type":"string","span":{"start":[548,1],"end":[548,33],"bytes":[14136,14168]}},"ReplicaURL":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.RegisterDatabaseRequest/ReplicaURL","kind":"field","type":"string","span":{"start":[549,1],"end":[549,40],"bytes":[14169,14208]}}}},"RegisterDatabaseResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.RegisterDatabaseResponse","kind":"struct","span":{"start":[553,1],"end":[556,2],"bytes":[14289,14389]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.RegisterDatabaseResponse/Path","kind":"field","type":"string","span":{"start":[555,1],"end":[555,29],"bytes":[14359,14387]}},"Status":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.RegisterDatabaseResponse/Status","kind":"field","type":"string","span":{"start":[554,1],"end":[554,31],"bytes":[14328,14358]}}}},"Server":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server","kind":"struct","span":{"start":[34,1],"end":[61,2],"bytes":[638,1253]},"callables":{"github.com/benbjohnson/litestream.Server.Close":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Close","kind":"method","span":{"start":[145,1],"end":[158,2],"bytes":[3780,4090]},"signature":"github.com/benbjohnson/litestream.Server.Close","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"146:2":{"kind":"call","span":{"start":[146,2],"end":[146,12],"bytes":[3814,3824]},"callee":null},"148:17":{"kind":"call","span":{"start":[148,17],"end":[148,73],"bytes":[3842,3898]},"callee":null},"148:37":{"kind":"call","span":{"start":[148,37],"end":[148,57],"bytes":[3862,3882]},"callee":null},"149:8":{"kind":"call","span":{"start":[149,8],"end":[149,16],"bytes":[3906,3914]},"callee":null},"152:13":{"kind":"call","span":{"start":[152,13],"end":[152,39],"bytes":[3954,3980]},"callee":null},"153:4":{"kind":"call","span":{"start":[153,4],"end":[153,62],"bytes":[3998,4056]},"callee":null},"156:2":{"kind":"call","span":{"start":[156,2],"end":[156,13],"bytes":[4065,4076]},"callee":null}}},"github.com/benbjohnson/litestream.Server.Start":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Start","kind":"method","span":{"start":[98,1],"end":[142,2],"bytes":[2437,3727]},"signature":"github.com/benbjohnson/litestream.Server.Start","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"100:10":{"kind":"call","span":{"start":[100,10],"end":[100,44],"bytes":[2504,2538]},"callee":null},"104:18":{"kind":"call","span":{"start":[104,18],"end":[104,40],"bytes":[2633,2655]},"callee":null},"105:6":{"kind":"call","span":{"start":[105,6],"end":[105,17],"bytes":[2675,2686]},"callee":null},"106:14":{"kind":"call","span":{"start":[106,14],"end":[106,37],"bytes":[2721,2744]},"callee":null},"107:12":{"kind":"call","span":{"start":[107,12],"end":[107,57],"bytes":[2770,2815]},"callee":null},"110:11":{"kind":"call","span":{"start":[110,11],"end":[110,81],"bytes":[2842,2912]},"callee":null},"112:13":{"kind":"call","span":{"start":[112,13],"end":[112,31],"bytes":[2929,2947]},"callee":null},"113:10":{"kind":"call","span":{"start":[113,10],"end":[113,50],"bytes":[2959,2999]},"callee":null},"116:19":{"kind":"call","span":{"start":[116,19],"end":[116,51],"bytes":[3022,3054]},"callee":null},"118:10":{"kind":"call","span":{"start":[118,10],"end":[118,54],"bytes":[3081,3125]},"callee":null},"122:12":{"kind":"call","span":{"start":[122,12],"end":[122,62],"bytes":[3170,3220]},"callee":null},"122:35":{"kind":"call","span":{"start":[122,35],"end":[122,61],"bytes":[3193,3219]},"callee":null},"123:3":{"kind":"call","span":{"start":[123,3],"end":[123,19],"bytes":[3237,3253]},"callee":null},"124:10":{"kind":"call","span":{"start":[124,10],"end":[124,45],"bytes":[3263,3298]},"callee":null},"129:16":{"kind":"call","span":{"start":[129,16],"end":[129,26],"bytes":[3441,3451]},"callee":null},"131:2":{"kind":"call","span":{"start":[131,2],"end":[131,65],"bytes":[3454,3517]},"callee":null},"133:2":{"kind":"call","span":{"start":[133,2],"end":[133,13],"bytes":[3520,3531]},"callee":null},"134:5":{"kind":"call","span":{"start":[134,5],"end":[139,5],"bytes":[3536,3712]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Start/github.com/benbjohnson/litestream.Server.Start.closure_1","kind":"function","span":{"start":[134,1],"end":[139,5],"bytes":[3532,3712]},"signature":"github.com/benbjohnson/litestream.Server.Start.closure_1","parameters":[],"body":{"135:9":{"kind":"call","span":{"start":[135,9],"end":[135,20],"bytes":[3553,3564]},"callee":null},"136:13":{"kind":"call","span":{"start":[136,13],"end":[136,41],"bytes":[3577,3605]},"callee":null},"137:4":{"kind":"call","span":{"start":[137,4],"end":[137,53],"bytes":[3654,3703]},"callee":null}}}}},"github.com/benbjohnson/litestream.Server.expandPath":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","kind":"method","span":{"start":[161,1],"end":[166,2],"bytes":[4150,4289]},"signature":"github.com/benbjohnson/litestream.Server.expandPath","parameters":[{"name":"path","type":"string","span":{"start":[161,1],"end":[161,59],"bytes":[4150,4208]}}],"return_type":"(string, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"163:10":{"kind":"call","span":{"start":[163,10],"end":[163,30],"bytes":[4246,4266]},"callee":null}}},"github.com/benbjohnson/litestream.Server.handleInfo":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleInfo","kind":"method","span":{"start":[509,1],"end":[519,2],"bytes":[12829,13146]},"signature":"github.com/benbjohnson/litestream.Server.handleInfo","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[509,1],"end":[509,70],"bytes":[12829,12898]}},{"name":"_","type":"*net/http.Request","span":{"start":[509,1],"end":[509,70],"bytes":[12829,12898]}}],"metrics":{"cyclomatic":1},"body":{"512:18":{"kind":"call","span":{"start":[512,18],"end":[512,29],"bytes":[12967,12978]},"callee":null},"514:18":{"kind":"call","span":{"start":[514,18],"end":[514,58],"bytes":[13027,13067]},"callee":null},"514:24":{"kind":"call","span":{"start":[514,24],"end":[514,47],"bytes":[13033,13056]},"callee":null},"515:18":{"kind":"call","span":{"start":[515,18],"end":[515,36],"bytes":[13086,13104]},"callee":null},"515:22":{"kind":"call","span":{"start":[515,22],"end":[515,35],"bytes":[13090,13103]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"518:2":{"kind":"call","span":{"start":[518,2],"end":[518,35],"bytes":[13111,13144]},"callee":null}}},"github.com/benbjohnson/litestream.Server.handleList":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleList","kind":"method","span":{"start":[476,1],"end":[507,2],"bytes":[12185,12827]},"signature":"github.com/benbjohnson/litestream.Server.handleList","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[476,1],"end":[476,70],"bytes":[12185,12254]}},{"name":"_","type":"*net/http.Request","span":{"start":[476,1],"end":[476,70],"bytes":[12185,12254]}}],"metrics":{"cyclomatic":5},"body":{"477:9":{"kind":"call","span":{"start":[477,9],"end":[477,22],"bytes":[12263,12276]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"479:14":{"kind":"call","span":{"start":[479,14],"end":[479,50],"bytes":[12313,12349]},"callee":null},"479:41":{"kind":"call","span":{"start":[479,41],"end":[479,49],"bytes":[12340,12348]},"callee":null},"484:6":{"kind":"call","span":{"start":[484,6],"end":[484,17],"bytes":[12406,12417]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"495:12":{"kind":"call","span":{"start":[495,12],"end":[495,21],"bytes":[12618,12627]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"499:11":{"kind":"call","span":{"start":[499,11],"end":[499,36],"bytes":[12663,12688]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt"},"499:39":{"kind":"call","span":{"start":[499,39],"end":[499,49],"bytes":[12691,12701]},"callee":null},"503:20":{"kind":"call","span":{"start":[503,20],"end":[503,51],"bytes":[12755,12786]},"callee":null},"506:2":{"kind":"call","span":{"start":[506,2],"end":[506,35],"bytes":[12792,12825]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.handleRegister":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","kind":"method","span":{"start":[571,1],"end":[628,2],"bytes":[14800,16393]},"signature":"github.com/benbjohnson/litestream.Server.handleRegister","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[571,1],"end":[571,74],"bytes":[14800,14873]}},{"name":"r","type":"*net/http.Request","span":{"start":[571,1],"end":[571,74],"bytes":[14800,14873]}}],"metrics":{"cyclomatic":8},"body":{"573:12":{"kind":"call","span":{"start":[573,12],"end":[573,35],"bytes":[14918,14941]},"callee":null},"574:3":{"kind":"call","span":{"start":[574,3],"end":[574,80],"bytes":[14971,15048]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"574:68":{"kind":"call","span":{"start":[574,68],"end":[574,79],"bytes":[15036,15047]},"callee":null},"579:3":{"kind":"call","span":{"start":[579,3],"end":[579,65],"bytes":[15085,15147]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"584:3":{"kind":"call","span":{"start":[584,3],"end":[584,72],"bytes":[15190,15259]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"588:23":{"kind":"call","span":{"start":[588,23],"end":[588,45],"bytes":[15295,15317]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath"},"590:3":{"kind":"call","span":{"start":[590,3],"end":[590,86],"bytes":[15337,15420]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"590:44":{"kind":"call","span":{"start":[590,44],"end":[590,80],"bytes":[15378,15414]},"callee":null},"595:17":{"kind":"call","span":{"start":[595,17],"end":[595,45],"bytes":[15488,15516]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"596:3":{"kind":"call","span":{"start":[596,3],"end":[599,5],"bytes":[15538,15654]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"},"604:17":{"kind":"call","span":{"start":[604,17],"end":[604,56],"bytes":[15720,15759]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.NewReplicaClientFromURL"},"606:3":{"kind":"call","span":{"start":[606,3],"end":[606,93],"bytes":[15779,15869]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"606:44":{"kind":"call","span":{"start":[606,44],"end":[606,87],"bytes":[15820,15863]},"callee":null},"611:8":{"kind":"call","span":{"start":[611,8],"end":[611,27],"bytes":[15915,15934]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB"},"614:13":{"kind":"call","span":{"start":[614,13],"end":[614,27],"bytes":[15986,16000]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica"},"619:12":{"kind":"call","span":{"start":[619,12],"end":[619,34],"bytes":[16125,16147]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB"},"620:3":{"kind":"call","span":{"start":[620,3],"end":[620,110],"bytes":[16164,16271]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"620:53":{"kind":"call","span":{"start":[620,53],"end":[620,104],"bytes":[16214,16265]},"callee":null},"624:2":{"kind":"call","span":{"start":[624,2],"end":[627,4],"bytes":[16286,16391]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.handleStart":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","kind":"method","span":{"start":[168,1],"end":[219,2],"bytes":[4291,5621]},"signature":"github.com/benbjohnson/litestream.Server.handleStart","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[168,1],"end":[168,71],"bytes":[4291,4361]}},{"name":"r","type":"*net/http.Request","span":{"start":[168,1],"end":[168,71],"bytes":[4291,4361]}}],"metrics":{"cyclomatic":9},"body":{"170:12":{"kind":"call","span":{"start":[170,12],"end":[170,35],"bytes":[4395,4418]},"callee":null},"171:3":{"kind":"call","span":{"start":[171,3],"end":[171,80],"bytes":[4448,4525]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"171:68":{"kind":"call","span":{"start":[171,68],"end":[171,79],"bytes":[4513,4524]},"callee":null},"176:3":{"kind":"call","span":{"start":[176,3],"end":[176,65],"bytes":[4562,4624]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"180:23":{"kind":"call","span":{"start":[180,23],"end":[180,45],"bytes":[4660,4682]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath"},"182:3":{"kind":"call","span":{"start":[182,3],"end":[182,86],"bytes":[4702,4785]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"182:44":{"kind":"call","span":{"start":[182,44],"end":[182,80],"bytes":[4743,4779]},"callee":null},"189:17":{"kind":"call","span":{"start":[189,17],"end":[189,83],"bytes":[4883,4949]},"callee":null},"189:44":{"kind":"call","span":{"start":[189,44],"end":[189,70],"bytes":[4910,4936]},"callee":null},"190:9":{"kind":"call","span":{"start":[190,9],"end":[190,17],"bytes":[4958,4966]},"callee":null},"193:8":{"kind":"call","span":{"start":[193,8],"end":[193,36],"bytes":[4978,5006]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"195:3":{"kind":"call","span":{"start":[195,3],"end":[195,110],"bytes":[5025,5132]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"195:53":{"kind":"call","span":{"start":[195,53],"end":[195,104],"bytes":[5075,5126]},"callee":null},"200:5":{"kind":"call","span":{"start":[200,5],"end":[200,16],"bytes":[5171,5182]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"203:13":{"kind":"call","span":{"start":[203,13],"end":[203,48],"bytes":[5236,5271]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnableDB"},"204:4":{"kind":"call","span":{"start":[204,4],"end":[204,71],"bytes":[5289,5356]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"204:54":{"kind":"call","span":{"start":[204,54],"end":[204,65],"bytes":[5339,5350]},"callee":null},"208:15":{"kind":"call","span":{"start":[208,15],"end":[208,40],"bytes":[5388,5413]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID"},"210:3":{"kind":"call","span":{"start":[210,3],"end":[210,70],"bytes":[5433,5500]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"210:53":{"kind":"call","span":{"start":[210,53],"end":[210,64],"bytes":[5483,5494]},"callee":null},"214:2":{"kind":"call","span":{"start":[214,2],"end":[218,4],"bytes":[5515,5619]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.handleStop":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","kind":"method","span":{"start":[221,1],"end":[272,2],"bytes":[5623,6937]},"signature":"github.com/benbjohnson/litestream.Server.handleStop","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[221,1],"end":[221,70],"bytes":[5623,5692]}},{"name":"r","type":"*net/http.Request","span":{"start":[221,1],"end":[221,70],"bytes":[5623,5692]}}],"metrics":{"cyclomatic":9},"body":{"223:12":{"kind":"call","span":{"start":[223,12],"end":[223,35],"bytes":[5725,5748]},"callee":null},"224:3":{"kind":"call","span":{"start":[224,3],"end":[224,80],"bytes":[5778,5855]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"224:68":{"kind":"call","span":{"start":[224,68],"end":[224,79],"bytes":[5843,5854]},"callee":null},"229:3":{"kind":"call","span":{"start":[229,3],"end":[229,65],"bytes":[5892,5954]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"233:23":{"kind":"call","span":{"start":[233,23],"end":[233,45],"bytes":[5990,6012]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath"},"235:3":{"kind":"call","span":{"start":[235,3],"end":[235,86],"bytes":[6032,6115]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"235:44":{"kind":"call","span":{"start":[235,44],"end":[235,80],"bytes":[6073,6109]},"callee":null},"243:17":{"kind":"call","span":{"start":[243,17],"end":[243,79],"bytes":[6206,6268]},"callee":null},"243:44":{"kind":"call","span":{"start":[243,44],"end":[243,66],"bytes":[6233,6255]},"callee":null},"244:8":{"kind":"call","span":{"start":[244,8],"end":[244,16],"bytes":[6276,6284]},"callee":null},"246:8":{"kind":"call","span":{"start":[246,8],"end":[246,36],"bytes":[6293,6321]},"callee":null},"248:3":{"kind":"call","span":{"start":[248,3],"end":[248,110],"bytes":[6340,6447]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"248:53":{"kind":"call","span":{"start":[248,53],"end":[248,104],"bytes":[6390,6441]},"callee":null},"253:6":{"kind":"call","span":{"start":[253,6],"end":[253,17],"bytes":[6487,6498]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"256:13":{"kind":"call","span":{"start":[256,13],"end":[256,49],"bytes":[6552,6588]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DisableDB"},"257:4":{"kind":"call","span":{"start":[257,4],"end":[257,71],"bytes":[6606,6673]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"257:54":{"kind":"call","span":{"start":[257,54],"end":[257,65],"bytes":[6656,6667]},"callee":null},"261:15":{"kind":"call","span":{"start":[261,15],"end":[261,40],"bytes":[6705,6730]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID"},"263:3":{"kind":"call","span":{"start":[263,3],"end":[263,70],"bytes":[6750,6817]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"263:53":{"kind":"call","span":{"start":[263,53],"end":[263,64],"bytes":[6800,6811]},"callee":null},"267:2":{"kind":"call","span":{"start":[267,2],"end":[271,4],"bytes":[6832,6935]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.handleSync":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSync","kind":"method","span":{"start":[403,1],"end":[459,2],"bytes":[10277,11730]},"signature":"github.com/benbjohnson/litestream.Server.handleSync","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[403,1],"end":[403,70],"bytes":[10277,10346]}},{"name":"r","type":"*net/http.Request","span":{"start":[403,1],"end":[403,70],"bytes":[10277,10346]}}],"metrics":{"cyclomatic":13},"body":{"405:12":{"kind":"call","span":{"start":[405,12],"end":[405,35],"bytes":[10379,10402]},"callee":null},"406:3":{"kind":"call","span":{"start":[406,3],"end":[406,80],"bytes":[10432,10509]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"406:68":{"kind":"call","span":{"start":[406,68],"end":[406,79],"bytes":[10497,10508]},"callee":null},"411:3":{"kind":"call","span":{"start":[411,3],"end":[411,65],"bytes":[10546,10608]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"415:23":{"kind":"call","span":{"start":[415,23],"end":[415,45],"bytes":[10644,10666]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath"},"417:3":{"kind":"call","span":{"start":[417,3],"end":[417,86],"bytes":[10686,10769]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"417:44":{"kind":"call","span":{"start":[417,44],"end":[417,80],"bytes":[10727,10763]},"callee":null},"427:17":{"kind":"call","span":{"start":[427,17],"end":[427,83],"bytes":[10924,10990]},"callee":null},"427:44":{"kind":"call","span":{"start":[427,44],"end":[427,70],"bytes":[10951,10977]},"callee":null},"428:9":{"kind":"call","span":{"start":[428,9],"end":[428,17],"bytes":[10999,11007]},"callee":null},"431:17":{"kind":"call","span":{"start":[431,17],"end":[431,60],"bytes":[11028,11071]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB"},"434:8":{"kind":"call","span":{"start":[434,8],"end":[434,43],"bytes":[11107,11142]},"callee":null},"435:4":{"kind":"call","span":{"start":[435,4],"end":[435,60],"bytes":[11147,11203]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"435:43":{"kind":"call","span":{"start":[435,43],"end":[435,54],"bytes":[11186,11197]},"callee":null},"436:8":{"kind":"call","span":{"start":[436,8],"end":[436,42],"bytes":[11211,11245]},"callee":null},"437:4":{"kind":"call","span":{"start":[437,4],"end":[437,60],"bytes":[11250,11306]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"437:43":{"kind":"call","span":{"start":[437,43],"end":[437,54],"bytes":[11289,11300]},"callee":null},"439:4":{"kind":"call","span":{"start":[439,4],"end":[439,71],"bytes":[11321,11388]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"439:54":{"kind":"call","span":{"start":[439,54],"end":[439,65],"bytes":[11371,11382]},"callee":null},"453:2":{"kind":"call","span":{"start":[453,2],"end":[458,4],"bytes":[11553,11728]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.handleSyncStatus":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","kind":"method","span":{"start":[317,1],"end":[344,2],"bytes":[7917,8710]},"signature":"github.com/benbjohnson/litestream.Server.handleSyncStatus","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[317,1],"end":[317,76],"bytes":[7917,7992]}},{"name":"r","type":"*net/http.Request","span":{"start":[317,1],"end":[317,76],"bytes":[7917,7992]}}],"metrics":{"cyclomatic":5},"body":{"318:10":{"kind":"call","span":{"start":[318,10],"end":[318,23],"bytes":[8002,8015]},"callee":null},"320:24":{"kind":"call","span":{"start":[320,24],"end":[320,42],"bytes":[8068,8086]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath"},"322:4":{"kind":"call","span":{"start":[322,4],"end":[322,87],"bytes":[8108,8191]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"322:45":{"kind":"call","span":{"start":[322,45],"end":[322,81],"bytes":[8149,8185]},"callee":null},"326:9":{"kind":"call","span":{"start":[326,9],"end":[326,37],"bytes":[8215,8243]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"328:4":{"kind":"call","span":{"start":[328,4],"end":[328,69],"bytes":[8264,8329]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"332:3":{"kind":"call","span":{"start":[332,3],"end":[334,5],"bytes":[8347,8457]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"},"333:32":{"kind":"call","span":{"start":[333,32],"end":[333,51],"bytes":[8431,8450]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncDiagnostic"},"338:9":{"kind":"call","span":{"start":[338,9],"end":[338,22],"bytes":[8479,8492]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"339:17":{"kind":"call","span":{"start":[339,17],"end":[339,52],"bytes":[8509,8544]},"callee":null},"339:43":{"kind":"call","span":{"start":[339,43],"end":[339,51],"bytes":[8535,8543]},"callee":null},"341:17":{"kind":"call","span":{"start":[341,17],"end":[341,57],"bytes":[8587,8627]},"callee":null},"341:37":{"kind":"call","span":{"start":[341,37],"end":[341,56],"bytes":[8607,8626]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncDiagnostic"},"343:2":{"kind":"call","span":{"start":[343,2],"end":[343,78],"bytes":[8632,8708]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.handleTXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleTXID","kind":"method","span":{"start":[287,1],"end":[315,2],"bytes":[7229,7915]},"signature":"github.com/benbjohnson/litestream.Server.handleTXID","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[287,1],"end":[287,70],"bytes":[7229,7298]}},{"name":"r","type":"*net/http.Request","span":{"start":[287,1],"end":[287,70],"bytes":[7229,7298]}}],"metrics":{"cyclomatic":5},"body":{"288:10":{"kind":"call","span":{"start":[288,10],"end":[288,23],"bytes":[7308,7321]},"callee":null},"290:3":{"kind":"call","span":{"start":[290,3],"end":[290,65],"bytes":[7353,7415]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"294:23":{"kind":"call","span":{"start":[294,23],"end":[294,41],"bytes":[7451,7469]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath"},"296:3":{"kind":"call","span":{"start":[296,3],"end":[296,86],"bytes":[7489,7572]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"296:44":{"kind":"call","span":{"start":[296,44],"end":[296,80],"bytes":[7530,7566]},"callee":null},"300:8":{"kind":"call","span":{"start":[300,8],"end":[300,36],"bytes":[7593,7621]},"callee":null},"302:3":{"kind":"call","span":{"start":[302,3],"end":[302,68],"bytes":[7640,7705]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"306:14":{"kind":"call","span":{"start":[306,14],"end":[306,22],"bytes":[7732,7740]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"308:3":{"kind":"call","span":{"start":[308,3],"end":[308,70],"bytes":[7760,7827]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"308:53":{"kind":"call","span":{"start":[308,53],"end":[308,64],"bytes":[7810,7821]},"callee":null},"312:2":{"kind":"call","span":{"start":[312,2],"end":[314,4],"bytes":[7842,7913]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"},"313:9":{"kind":"call","span":{"start":[313,9],"end":[313,25],"bytes":[7892,7908]},"callee":null}}},"github.com/benbjohnson/litestream.Server.handleUnregister":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleUnregister","kind":"method","span":{"start":[630,1],"end":[680,2],"bytes":[16395,17840]},"signature":"github.com/benbjohnson/litestream.Server.handleUnregister","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[630,1],"end":[630,76],"bytes":[16395,16470]}},{"name":"r","type":"*net/http.Request","span":{"start":[630,1],"end":[630,76],"bytes":[16395,16470]}}],"metrics":{"cyclomatic":8},"body":{"632:12":{"kind":"call","span":{"start":[632,12],"end":[632,35],"bytes":[16517,16540]},"callee":null},"633:3":{"kind":"call","span":{"start":[633,3],"end":[633,80],"bytes":[16570,16647]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"633:68":{"kind":"call","span":{"start":[633,68],"end":[633,79],"bytes":[16635,16646]},"callee":null},"638:3":{"kind":"call","span":{"start":[638,3],"end":[638,65],"bytes":[16684,16746]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"642:23":{"kind":"call","span":{"start":[642,23],"end":[642,45],"bytes":[16782,16804]},"callee":null},"644:3":{"kind":"call","span":{"start":[644,3],"end":[644,86],"bytes":[16824,16907]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"644:44":{"kind":"call","span":{"start":[644,44],"end":[644,80],"bytes":[16865,16901]},"callee":null},"653:17":{"kind":"call","span":{"start":[653,17],"end":[653,79],"bytes":[17064,17126]},"callee":null},"653:44":{"kind":"call","span":{"start":[653,44],"end":[653,66],"bytes":[17091,17113]},"callee":null},"654:8":{"kind":"call","span":{"start":[654,8],"end":[654,16],"bytes":[17134,17142]},"callee":null},"656:8":{"kind":"call","span":{"start":[656,8],"end":[656,36],"bytes":[17151,17179]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"659:12":{"kind":"call","span":{"start":[659,12],"end":[659,51],"bytes":[17246,17285]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB"},"660:3":{"kind":"call","span":{"start":[660,3],"end":[660,112],"bytes":[17302,17411]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"660:53":{"kind":"call","span":{"start":[660,53],"end":[660,106],"bytes":[17352,17405]},"callee":null},"666:22":{"kind":"call","span":{"start":[666,22],"end":[666,33],"bytes":[17512,17523]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX"},"668:4":{"kind":"call","span":{"start":[668,4],"end":[668,109],"bytes":[17545,17650]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"668:54":{"kind":"call","span":{"start":[668,54],"end":[668,103],"bytes":[17595,17644]},"callee":null},"671:10":{"kind":"call","span":{"start":[671,10],"end":[671,25],"bytes":[17674,17689]},"callee":null},"675:2":{"kind":"call","span":{"start":[675,2],"end":[679,4],"bytes":[17721,17838]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"}}},"github.com/benbjohnson/litestream.Server.storeTXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID","kind":"method","span":{"start":[274,1],"end":[285,2],"bytes":[6939,7227]},"signature":"github.com/benbjohnson/litestream.Server.storeTXID","parameters":[{"name":"path","type":"string","span":{"start":[274,1],"end":[274,58],"bytes":[6939,6996]}}],"return_type":"(uint64, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"275:8":{"kind":"call","span":{"start":[275,8],"end":[275,28],"bytes":[7004,7024]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"277:13":{"kind":"call","span":{"start":[277,13],"end":[277,55],"bytes":[7053,7095]},"callee":null},"280:21":{"kind":"call","span":{"start":[280,21],"end":[280,32],"bytes":[7120,7131]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX"},"282:13":{"kind":"call","span":{"start":[282,13],"end":[282,45],"bytes":[7161,7193]},"callee":null},"284:9":{"kind":"call","span":{"start":[284,9],"end":[284,24],"bytes":[7205,7220]},"callee":null}}}},"fields":{"PathExpander":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/PathExpander","kind":"field","type":"func(string) (string, error)","span":{"start":[45,1],"end":[45,43],"bytes":[915,957]}},"SocketPath":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/SocketPath","kind":"field","type":"string","span":{"start":[38,1],"end":[38,19],"bytes":[721,739]}},"SocketPerms":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/SocketPerms","kind":"field","type":"uint32","span":{"start":[41,1],"end":[41,20],"bytes":[797,816]}},"Version":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/Version","kind":"field","type":"string","span":{"start":[48,1],"end":[48,16],"bytes":[1013,1028]}},"cancel":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/cancel","kind":"field","type":"context.CancelFunc","span":{"start":[57,1],"end":[57,27],"bytes":[1180,1206]}},"ctx":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/ctx","kind":"field","type":"context.Context","span":{"start":[56,1],"end":[56,24],"bytes":[1156,1179]}},"httpServer":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/httpServer","kind":"field","type":"*net/http.Server","span":{"start":[54,1],"end":[54,29],"bytes":[1126,1154]}},"logger":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[60,1],"end":[60,21],"bytes":[1231,1251]}},"socketListener":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/socketListener","kind":"field","type":"net.Listener","span":{"start":[53,1],"end":[53,29],"bytes":[1097,1125]}},"startedAt":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/startedAt","kind":"field","type":"time.Time","span":{"start":[51,1],"end":[51,21],"bytes":[1075,1095]}},"store":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/store","kind":"field","type":"*github.com/benbjohnson/litestream.Store","span":{"start":[35,1],"end":[35,14],"bytes":[659,672]}},"wg":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/wg","kind":"field","type":"sync.WaitGroup","span":{"start":[58,1],"end":[58,23],"bytes":[1207,1229]}}}},"SocketConfig":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SocketConfig","kind":"struct","span":{"start":[18,1],"end":[22,2],"bytes":[213,353]},"callables":{},"fields":{"Enabled":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SocketConfig/Enabled","kind":"field","type":"bool","span":{"start":[19,1],"end":[19,37],"bytes":[240,276]}},"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SocketConfig/Path","kind":"field","type":"string","span":{"start":[20,1],"end":[20,34],"bytes":[277,310]}},"Permissions":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SocketConfig/Permissions","kind":"field","type":"uint32","span":{"start":[21,1],"end":[21,41],"bytes":[311,351]}}}},"StartRequest":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartRequest","kind":"struct","span":{"start":[362,1],"end":[365,2],"bytes":[9206,9307]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartRequest/Path","kind":"field","type":"string","span":{"start":[363,1],"end":[363,30],"bytes":[9233,9262]}},"Timeout":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartRequest/Timeout","kind":"field","type":"int","span":{"start":[364,1],"end":[364,43],"bytes":[9263,9305]}}}},"StartResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartResponse","kind":"struct","span":{"start":[368,1],"end":[372,2],"bytes":[9372,9490]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartResponse/Path","kind":"field","type":"string","span":{"start":[370,1],"end":[370,29],"bytes":[9431,9459]}},"Status":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartResponse/Status","kind":"field","type":"string","span":{"start":[369,1],"end":[369,31],"bytes":[9400,9430]}},"TXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StartResponse/TXID","kind":"field","type":"uint64","span":{"start":[371,1],"end":[371,29],"bytes":[9460,9488]}}}},"StopRequest":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopRequest","kind":"struct","span":{"start":[375,1],"end":[378,2],"bytes":[9551,9651]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopRequest/Path","kind":"field","type":"string","span":{"start":[376,1],"end":[376,30],"bytes":[9577,9606]}},"Timeout":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopRequest/Timeout","kind":"field","type":"int","span":{"start":[377,1],"end":[377,43],"bytes":[9607,9649]}}}},"StopResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopResponse","kind":"struct","span":{"start":[381,1],"end":[385,2],"bytes":[9714,9831]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopResponse/Path","kind":"field","type":"string","span":{"start":[383,1],"end":[383,29],"bytes":[9772,9800]}},"Status":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopResponse/Status","kind":"field","type":"string","span":{"start":[382,1],"end":[382,31],"bytes":[9741,9771]}},"TXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.StopResponse/TXID","kind":"field","type":"uint64","span":{"start":[384,1],"end":[384,29],"bytes":[9801,9829]}}}},"SyncDiagnosticsResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncDiagnosticsResponse","kind":"struct","span":{"start":[399,1],"end":[401,2],"bytes":[10189,10275]},"callables":{},"fields":{"Databases":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncDiagnosticsResponse/Databases","kind":"field","type":"[]github.com/benbjohnson/litestream.SyncDiagnostic","span":{"start":[400,1],"end":[400,47],"bytes":[10227,10273]}}}},"SyncRequest":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncRequest","kind":"struct","span":{"start":[462,1],"end":[466,2],"bytes":[11791,11931]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncRequest/Path","kind":"field","type":"string","span":{"start":[463,1],"end":[463,30],"bytes":[11817,11846]}},"Timeout":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncRequest/Timeout","kind":"field","type":"int","span":{"start":[465,1],"end":[465,43],"bytes":[11887,11929]}},"Wait":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncRequest/Wait","kind":"field","type":"bool","span":{"start":[464,1],"end":[464,40],"bytes":[11847,11886]}}}},"SyncResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncResponse","kind":"struct","span":{"start":[469,1],"end":[474,2],"bytes":[11994,12183]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncResponse/Path","kind":"field","type":"string","span":{"start":[471,1],"end":[471,37],"bytes":[12060,12096]}},"ReplicatedTXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncResponse/ReplicatedTXID","kind":"field","type":"uint64","span":{"start":[473,1],"end":[473,48],"bytes":[12134,12181]}},"Status":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncResponse/Status","kind":"field","type":"string","span":{"start":[470,1],"end":[470,39],"bytes":[12021,12059]}},"TXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.SyncResponse/TXID","kind":"field","type":"uint64","span":{"start":[472,1],"end":[472,37],"bytes":[12097,12133]}}}},"TXIDResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.TXIDResponse","kind":"struct","span":{"start":[394,1],"end":[396,2],"bytes":[10060,10115]},"callables":{},"fields":{"TXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.TXIDResponse/TXID","kind":"field","type":"uint64","span":{"start":[395,1],"end":[395,27],"bytes":[10087,10113]}}}},"UnregisterDatabaseRequest":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseRequest","kind":"struct","span":{"start":[559,1],"end":[562,2],"bytes":[14470,14584]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseRequest/Path","kind":"field","type":"string","span":{"start":[560,1],"end":[560,30],"bytes":[14510,14539]}},"Timeout":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseRequest/Timeout","kind":"field","type":"int","span":{"start":[561,1],"end":[561,43],"bytes":[14540,14582]}}}},"UnregisterDatabaseResponse":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseResponse","kind":"struct","span":{"start":[565,1],"end":[569,2],"bytes":[14667,14798]},"callables":{},"fields":{"Path":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseResponse/Path","kind":"field","type":"string","span":{"start":[567,1],"end":[567,29],"bytes":[14739,14767]}},"Status":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseResponse/Status","kind":"field","type":"string","span":{"start":[566,1],"end":[566,31],"bytes":[14708,14738]}},"TXID":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.UnregisterDatabaseResponse/TXID","kind":"field","type":"uint64","span":{"start":[568,1],"end":[568,29],"bytes":[14768,14796]}}}}},"functions":{"github.com/benbjohnson/litestream.DefaultSocketConfig":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DefaultSocketConfig","kind":"function","span":{"start":[25,1],"end":[31,2],"bytes":[420,574]},"signature":"github.com/benbjohnson/litestream.DefaultSocketConfig","parameters":[],"return_type":"github.com/benbjohnson/litestream.SocketConfig","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.NewServer":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.NewServer","kind":"function","span":{"start":[64,1],"end":[95,2],"bytes":[1299,2384]},"signature":"github.com/benbjohnson/litestream.NewServer","parameters":[{"name":"store","type":"*github.com/benbjohnson/litestream.Store","span":{"start":[64,1],"end":[64,39],"bytes":[1299,1337]}}],"return_type":"*github.com/benbjohnson/litestream.Server","metrics":{"cyclomatic":1},"body":{"65:17":{"kind":"call","span":{"start":[65,17],"end":[65,57],"bytes":[1354,1394]},"callee":null},"65:36":{"kind":"call","span":{"start":[65,36],"end":[65,56],"bytes":[1373,1393]},"callee":null},"71:16":{"kind":"call","span":{"start":[71,16],"end":[71,30],"bytes":[1511,1525]},"callee":null},"74:9":{"kind":"call","span":{"start":[74,9],"end":[74,27],"bytes":[1575,1593]},"callee":null},"75:2":{"kind":"call","span":{"start":[75,2],"end":[75,46],"bytes":[1595,1639]},"callee":null},"76:2":{"kind":"call","span":{"start":[76,2],"end":[76,44],"bytes":[1641,1683]},"callee":null},"77:2":{"kind":"call","span":{"start":[77,2],"end":[77,43],"bytes":[1685,1726]},"callee":null},"78:2":{"kind":"call","span":{"start":[78,2],"end":[78,52],"bytes":[1728,1778]},"callee":null},"79:2":{"kind":"call","span":{"start":[79,2],"end":[79,56],"bytes":[1780,1834]},"callee":null},"80:2":{"kind":"call","span":{"start":[80,2],"end":[80,44],"bytes":[1836,1878]},"callee":null},"81:2":{"kind":"call","span":{"start":[81,2],"end":[81,43],"bytes":[1880,1921]},"callee":null},"82:2":{"kind":"call","span":{"start":[82,2],"end":[82,43],"bytes":[1923,1964]},"callee":null},"83:2":{"kind":"call","span":{"start":[83,2],"end":[83,62],"bytes":[1966,2026]},"callee":null},"86:2":{"kind":"call","span":{"start":[86,2],"end":[86,50],"bytes":[2049,2097]},"callee":null},"87:2":{"kind":"call","span":{"start":[87,2],"end":[87,59],"bytes":[2099,2156]},"callee":null},"88:2":{"kind":"call","span":{"start":[88,2],"end":[88,59],"bytes":[2158,2215]},"callee":null},"89:2":{"kind":"call","span":{"start":[89,2],"end":[89,57],"bytes":[2217,2272]},"callee":null},"90:2":{"kind":"call","span":{"start":[90,2],"end":[90,55],"bytes":[2274,2327]},"callee":null}}},"github.com/benbjohnson/litestream.writeJSON":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","kind":"function","span":{"start":[346,1],"end":[350,2],"bytes":[8712,8885]},"signature":"github.com/benbjohnson/litestream.writeJSON","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[346,1],"end":[346,67],"bytes":[8712,8778]}},{"name":"status","type":"int","span":{"start":[346,1],"end":[346,67],"bytes":[8712,8778]}},{"name":"v","type":"interface{}","span":{"start":[346,1],"end":[346,67],"bytes":[8712,8778]}}],"metrics":{"cyclomatic":1},"body":{"347:2":{"kind":"call","span":{"start":[347,2],"end":[347,12],"bytes":[8780,8790]},"callee":null},"348:2":{"kind":"call","span":{"start":[348,2],"end":[348,23],"bytes":[8832,8853]},"callee":null},"349:2":{"kind":"call","span":{"start":[349,2],"end":[349,20],"bytes":[8855,8873]},"callee":null}}},"github.com/benbjohnson/litestream.writeJSONError":{"id":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","kind":"function","span":{"start":[352,1],"end":[359,2],"bytes":[8887,9143]},"signature":"github.com/benbjohnson/litestream.writeJSONError","parameters":[{"name":"w","type":"net/http.ResponseWriter","span":{"start":[352,1],"end":[352,94],"bytes":[8887,8980]}},{"name":"status","type":"int","span":{"start":[352,1],"end":[352,94],"bytes":[8887,8980]}},{"name":"message","type":"string","span":{"start":[352,1],"end":[352,94],"bytes":[8887,8980]}},{"name":"details","type":"interface{}","span":{"start":[352,1],"end":[352,94],"bytes":[8887,8980]}}],"metrics":{"cyclomatic":1},"body":{"353:2":{"kind":"call","span":{"start":[353,2],"end":[353,12],"bytes":[8982,8992]},"callee":null},"354:2":{"kind":"call","span":{"start":[354,2],"end":[354,23],"bytes":[9034,9055]},"callee":null},"355:2":{"kind":"call","span":{"start":[355,2],"end":[355,20],"bytes":[9057,9075]},"callee":null}}}},"content_hash":"e3f807d05a146d30c5e210067903fb9f8756128b292c0e8c140648ec80767946"},"sftp/replica_client.go":{"id":"can://go/litestream/sftp/replica_client.go","kind":"module","span":{"start":[1,1],"end":[431,1],"bytes":[0,11844]},"package":"sftp","source":"package sftp\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/pkg/sftp\"\n\t\"github.com/superfly/ltx\"\n\t\"golang.org/x/crypto/ssh\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"sftp\", NewReplicaClientFromURL)\n}\n\n// ReplicaClientType is the client type for this package.\nconst ReplicaClientType = \"sftp\"\n\n// Default settings for replica client.\nconst (\n\tDefaultDialTimeout = 30 * time.Second\n)\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\n// ReplicaClient is a client for writing LTX files over SFTP.\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\tsshClient *ssh.Client\n\tsftpClient *sftp.Client\n\tlogger *slog.Logger\n\n\t// SFTP connection info\n\tHost string\n\tUser string\n\tPassword string\n\tPath string\n\tKeyPath string\n\tHostKey string\n\tDialTimeout time.Duration\n\n\t// ConcurrentWrites enables concurrent writes for better performance.\n\t// Note: This makes resuming failed transfers unsafe.\n\tConcurrentWrites bool\n}\n\n// NewReplicaClient returns a new instance of ReplicaClient.\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t\tDialTimeout: DefaultDialTimeout,\n\t\tConcurrentWrites: true, // Default to true for better performance\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\n// URL format: sftp://[user[:password]@]host[:port]/path\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tclient := NewReplicaClient()\n\n\t// Extract credentials from userinfo\n\tif userinfo != nil {\n\t\tclient.User = userinfo.Username()\n\t\tclient.Password, _ = userinfo.Password()\n\t}\n\n\tclient.Host = host\n\tclient.Path = urlPath\n\n\tif client.Host == \"\" {\n\t\treturn nil, fmt.Errorf(\"host required for sftp replica URL\")\n\t}\n\tif client.User == \"\" {\n\t\treturn nil, fmt.Errorf(\"user required for sftp replica URL\")\n\t}\n\n\treturn client, nil\n}\n\n// Type returns \"sftp\" as the client type.\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\n// Init initializes the connection to SFTP. No-op if already initialized.\nfunc (c *ReplicaClient) Init(ctx context.Context) error {\n\t_, err := c.init(ctx)\n\treturn err\n}\n\n// init initializes the connection and returns the SFTP client.\nfunc (c *ReplicaClient) init(ctx context.Context) (_ *sftp.Client, err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.sftpClient != nil {\n\t\treturn c.sftpClient, nil\n\t}\n\n\tif c.User == \"\" {\n\t\treturn nil, fmt.Errorf(\"sftp user required\")\n\t}\n\n\t// Build SSH configuration \u0026 auth methods\n\tvar hostkey ssh.HostKeyCallback\n\tif c.HostKey != \"\" {\n\t\tvar pubkey, _, _, _, err = ssh.ParseAuthorizedKey([]byte(c.HostKey))\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot parse sftp host key: %w\", err)\n\t\t}\n\t\thostkey = ssh.FixedHostKey(pubkey)\n\t} else {\n\t\tslog.Warn(\"sftp host key not verified\", \"host\", c.Host)\n\t\thostkey = ssh.InsecureIgnoreHostKey()\n\t}\n\tconfig := \u0026ssh.ClientConfig{\n\t\tUser: c.User,\n\t\tHostKeyCallback: hostkey,\n\t\tBannerCallback: ssh.BannerDisplayStderr(),\n\t}\n\tif c.Password != \"\" {\n\t\tconfig.Auth = append(config.Auth, ssh.Password(c.Password))\n\t}\n\n\tif c.KeyPath != \"\" {\n\t\tbuf, err := os.ReadFile(c.KeyPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"sftp: cannot read sftp key path: %w\", err)\n\t\t}\n\n\t\tsigner, err := ssh.ParsePrivateKey(buf)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"sftp: cannot parse sftp key path: %w\", err)\n\t\t}\n\t\tconfig.Auth = append(config.Auth, ssh.PublicKeys(signer))\n\t}\n\n\t// Append standard port, if necessary.\n\thost := c.Host\n\tif _, _, err := net.SplitHostPort(c.Host); err != nil {\n\t\thost = net.JoinHostPort(c.Host, \"22\")\n\t}\n\n\t// Connect via SSH.\n\tif c.sshClient, err = ssh.Dial(\"tcp\", host, config); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Wrap connection with an SFTP client.\n\t// Configure options based on client settings\n\topts := []sftp.ClientOption{}\n\tif c.ConcurrentWrites {\n\t\topts = append(opts, sftp.UseConcurrentWrites(true))\n\t}\n\n\tif c.sftpClient, err = sftp.NewClient(c.sshClient, opts...); err != nil {\n\t\tc.sshClient.Close()\n\t\tc.sshClient = nil\n\t\treturn nil, err\n\t}\n\n\treturn c.sftpClient, nil\n}\n\n// DeleteAll deletes all LTX files.\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) (err error) {\n\tdefer func() { c.resetOnConnError(err) }()\n\n\tsftpClient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar dirs []string\n\twalker := sftpClient.Walk(c.Path)\n\tfor walker.Step() {\n\t\tif err := walker.Err(); os.IsNotExist(err) {\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn fmt.Errorf(\"sftp: cannot walk path %q: %w\", walker.Path(), err)\n\t\t}\n\t\tif walker.Stat().IsDir() {\n\t\t\tdirs = append(dirs, walker.Path())\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := sftpClient.Remove(walker.Path()); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"sftp: cannot delete file %q: %w\", walker.Path(), err)\n\t\t}\n\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\t// Remove directories in reverse order after they have been emptied.\n\tfor i := len(dirs) - 1; i \u003e= 0; i-- {\n\t\tfilename := dirs[i]\n\t\tif err := sftpClient.RemoveDirectory(filename); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"sftp: cannot delete directory %q: %w\", filename, err)\n\t\t}\n\t}\n\n\t// log.Printf(\"%s(%s): retainer: deleting all\", r.db.Path(), r.Name())\n\n\treturn nil\n}\n\n// LTXFiles returns an iterator over all available LTX files for a level.\n// SFTP uses file ModTime for timestamps, which is set via Chtimes() to preserve original timestamp.\n// The useMetadata parameter is ignored since ModTime always contains the accurate timestamp.\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, _ bool) (_ ltx.FileIterator, err error) {\n\tdefer func() { c.resetOnConnError(err) }()\n\n\tsftpClient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdir := litestream.LTXLevelDir(c.Path, level)\n\tfis, err := sftpClient.ReadDir(dir)\n\tif os.IsNotExist(err) {\n\t\treturn ltx.NewFileInfoSliceIterator(nil), nil\n\t} else if err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Iterate over every file and convert to metadata.\n\tinfos := make([]*ltx.FileInfo, 0, len(fis))\n\tfor _, fi := range fis {\n\t\tminTXID, maxTXID, err := ltx.ParseFilename(path.Base(fi.Name()))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t} else if minTXID \u003c seek {\n\t\t\tcontinue\n\t\t}\n\n\t\tinfos = append(infos, \u0026ltx.FileInfo{\n\t\t\tLevel: level,\n\t\t\tMinTXID: minTXID,\n\t\t\tMaxTXID: maxTXID,\n\t\t\tSize: fi.Size(),\n\t\t\tCreatedAt: fi.ModTime().UTC(), // ModTime contains accurate timestamp from Chtimes()\n\t\t})\n\t}\n\n\treturn ltx.NewFileInfoSliceIterator(infos), nil\n}\n\n// WriteLTXFile writes a LTX file from rd into a remote file.\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, rd io.Reader) (info *ltx.FileInfo, err error) {\n\tdefer func() { c.resetOnConnError(err) }()\n\n\tsftpClient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfilename := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\n\t// Use TeeReader to peek at LTX header while preserving data for upload\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(rd, \u0026buf)\n\n\t// Extract timestamp from LTX header\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Combine buffered data with rest of reader\n\tfullReader := io.MultiReader(\u0026buf, rd)\n\n\tif err := sftpClient.MkdirAll(path.Dir(filename)); err != nil {\n\t\treturn nil, fmt.Errorf(\"sftp: cannot make parent snapshot directory %q: %w\", path.Dir(filename), err)\n\t}\n\n\ttmpFilename := fmt.Sprintf(\"%s.%d.%d.tmp\", filename, os.Getpid(), time.Now().UnixNano())\n\tf, err := sftpClient.OpenFile(tmpFilename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"sftp: cannot open temporary snapshot file for writing: %w\", err)\n\t}\n\tdefer func() {\n\t\tif f != nil {\n\t\t\t_ = f.Close()\n\t\t}\n\t\tif err != nil {\n\t\t\t_ = sftpClient.Remove(tmpFilename)\n\t\t}\n\t}()\n\n\tn, err := io.Copy(f, fullReader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Flush the data to stable storage before the rename so a server crash\n\t// cannot leave an empty file at the final path. Servers that do not\n\t// advertise fsync@openssh.com are left to their own write-back policy.\n\tif _, ok := sftpClient.HasExtension(\"fsync@openssh.com\"); ok {\n\t\tif err := f.Sync(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"sftp: cannot sync temporary ltx file %q: %w\", tmpFilename, err)\n\t\t}\n\t}\n\n\tif err := f.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\tf = nil\n\n\tif err := sftpClient.Chtimes(tmpFilename, timestamp, timestamp); err != nil {\n\t\treturn nil, fmt.Errorf(\"sftp: cannot set file timestamps: %w\", err)\n\t}\n\n\tif err := sftpClient.Rename(tmpFilename, filename); err != nil {\n\t\treturn nil, fmt.Errorf(\"sftp: cannot rename temporary ltx file %q to %q: %w\", tmpFilename, filename, err)\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(n))\n\n\treturn \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: n,\n\t\tCreatedAt: timestamp,\n\t}, nil\n}\n\n// OpenLTXFile returns a reader for an LTX file.\n// Returns os.ErrNotExist if no matching position is found.\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (_ io.ReadCloser, err error) {\n\tdefer func() { c.resetOnConnError(err) }()\n\n\tsftpClient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfilename := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\tf, err := sftpClient.OpenFile(filename, os.O_RDONLY)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif offset \u003e 0 {\n\t\tif _, err := f.Seek(offset, io.SeekStart); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Inc()\n\n\tif size \u003e 0 {\n\t\treturn internal.LimitReadCloser(f, size), nil\n\t}\n\treturn f, nil\n}\n\n// DeleteLTXFiles deletes LTX files with at the given positions.\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) (err error) {\n\tdefer func() { c.resetOnConnError(err) }()\n\n\tsftpClient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, info := range a {\n\t\tfilename := litestream.LTXFilePath(c.Path, info.Level, info.MinTXID, info.MaxTXID)\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"path\", filename)\n\n\t\tif err := sftpClient.Remove(filename); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"sftp: cannot delete ltx file %q: %w\", filename, err)\n\t\t}\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\treturn nil\n}\n\n// Cleanup deletes path \u0026 directories after empty.\nfunc (c *ReplicaClient) Cleanup(ctx context.Context) (err error) {\n\tdefer func() { c.resetOnConnError(err) }()\n\n\tsftpClient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := sftpClient.RemoveDirectory(c.Path); err != nil \u0026\u0026 !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"sftp: cannot delete path: %w\", err)\n\t}\n\treturn nil\n}\n\n// resetOnConnError closes \u0026 clears the client if a connection error occurs.\nfunc (c *ReplicaClient) resetOnConnError(err error) {\n\tif !errors.Is(err, sftp.ErrSSHFxConnectionLost) {\n\t\treturn\n\t}\n\n\tif c.sftpClient != nil {\n\t\tc.sftpClient.Close()\n\t\tc.sftpClient = nil\n\t}\n\tif c.sshClient != nil {\n\t\tc.sshClient.Close()\n\t\tc.sshClient = nil\n\t}\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[23,31]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[32,42]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[43,52]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[53,59]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[60,65]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[66,77]}},{"name":"net","path":"net","span":{"start":[10,1],"end":[10,7],"bytes":[78,84]}},{"name":"url","path":"net/url","span":{"start":[11,1],"end":[11,11],"bytes":[85,95]}},{"name":"os","path":"os","span":{"start":[12,1],"end":[12,6],"bytes":[96,101]}},{"name":"path","path":"path","span":{"start":[13,1],"end":[13,8],"bytes":[102,109]}},{"name":"sync","path":"sync","span":{"start":[14,1],"end":[14,8],"bytes":[110,117]}},{"name":"time","path":"time","span":{"start":[15,1],"end":[15,8],"bytes":[118,125]}},{"name":"sftp","path":"github.com/pkg/sftp","span":{"start":[17,1],"end":[17,23],"bytes":[127,149]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[18,1],"end":[18,27],"bytes":[150,176]}},{"name":"ssh","path":"golang.org/x/crypto/ssh","span":{"start":[19,1],"end":[19,27],"bytes":[177,203]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[21,1],"end":[21,37],"bytes":[205,241]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[22,1],"end":[22,46],"bytes":[242,287]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient","kind":"struct","span":{"start":[40,1],"end":[58,2],"bytes":[682,1131]},"callables":{"github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup","kind":"method","span":{"start":[402,1],"end":[414,2],"bytes":[11168,11502]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[402,1],"end":[402,67],"bytes":[11168,11234]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"403:8":{"kind":"call","span":{"start":[403,8],"end":[403,44],"bytes":[11242,11278]},"callee":null},"405:21":{"kind":"call","span":{"start":[405,21],"end":[405,32],"bytes":[11300,11311]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"},"410:12":{"kind":"call","span":{"start":[410,12],"end":[410,46],"bytes":[11357,11391]},"callee":null},"410:63":{"kind":"call","span":{"start":[410,63],"end":[410,81],"bytes":[11408,11426]},"callee":null},"411:10":{"kind":"call","span":{"start":[411,10],"end":[411,57],"bytes":[11438,11485]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup/github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup.closure_1","kind":"function","span":{"start":[403,1],"end":[403,44],"bytes":[11235,11278]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup.closure_1","parameters":[],"body":{"403:17":{"kind":"call","span":{"start":[403,17],"end":[403,40],"bytes":[11251,11274]},"callee":null}}}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll","kind":"method","span":{"start":[184,1],"end":[223,2],"bytes":[4537,5679]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[184,1],"end":[184,69],"bytes":[4537,4605]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"185:8":{"kind":"call","span":{"start":[185,8],"end":[185,44],"bytes":[4613,4649]},"callee":null},"187:21":{"kind":"call","span":{"start":[187,21],"end":[187,32],"bytes":[4671,4682]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"},"193:12":{"kind":"call","span":{"start":[193,12],"end":[193,35],"bytes":[4747,4770]},"callee":null},"194:6":{"kind":"call","span":{"start":[194,6],"end":[194,19],"bytes":[4776,4789]},"callee":null},"195:13":{"kind":"call","span":{"start":[195,13],"end":[195,25],"bytes":[4804,4816]},"callee":null},"195:27":{"kind":"call","span":{"start":[195,27],"end":[195,45],"bytes":[4818,4836]},"callee":null},"198:11":{"kind":"call","span":{"start":[198,11],"end":[198,74],"bytes":[4886,4949]},"callee":null},"198:55":{"kind":"call","span":{"start":[198,55],"end":[198,68],"bytes":[4930,4943]},"callee":null},"200:6":{"kind":"call","span":{"start":[200,6],"end":[200,19],"bytes":[4959,4972]},"callee":null},"201:11":{"kind":"call","span":{"start":[201,11],"end":[201,38],"bytes":[4993,5020]},"callee":null},"201:24":{"kind":"call","span":{"start":[201,24],"end":[201,37],"bytes":[5006,5019]},"callee":null},"205:13":{"kind":"call","span":{"start":[205,13],"end":[205,45],"bytes":[5050,5082]},"callee":null},"205:31":{"kind":"call","span":{"start":[205,31],"end":[205,44],"bytes":[5068,5081]},"callee":null},"205:62":{"kind":"call","span":{"start":[205,62],"end":[205,80],"bytes":[5099,5117]},"callee":null},"206:11":{"kind":"call","span":{"start":[206,11],"end":[206,76],"bytes":[5130,5195]},"callee":null},"206:57":{"kind":"call","span":{"start":[206,57],"end":[206,70],"bytes":[5176,5189]},"callee":null},"209:3":{"kind":"call","span":{"start":[209,3],"end":[209,81],"bytes":[5203,5281]},"callee":null},"213:11":{"kind":"call","span":{"start":[213,11],"end":[213,20],"bytes":[5372,5381]},"callee":null},"215:13":{"kind":"call","span":{"start":[215,13],"end":[215,49],"bytes":[5435,5471]},"callee":null},"215:66":{"kind":"call","span":{"start":[215,66],"end":[215,84],"bytes":[5488,5506]},"callee":null},"216:11":{"kind":"call","span":{"start":[216,11],"end":[216,76],"bytes":[5519,5584]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll.closure_1","kind":"function","span":{"start":[185,1],"end":[185,44],"bytes":[4606,4649]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll.closure_1","parameters":[],"body":{"185:17":{"kind":"call","span":{"start":[185,17],"end":[185,40],"bytes":[4622,4645]},"callee":null}}}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[379,1],"end":[399,2],"bytes":[10411,11115]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[379,1],"end":[379,93],"bytes":[10411,10503]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[379,1],"end":[379,93],"bytes":[10411,10503]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"380:8":{"kind":"call","span":{"start":[380,8],"end":[380,44],"bytes":[10511,10547]},"callee":null},"382:21":{"kind":"call","span":{"start":[382,21],"end":[382,32],"bytes":[10569,10580]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"},"388:15":{"kind":"call","span":{"start":[388,15],"end":[388,85],"bytes":[10655,10725]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"390:3":{"kind":"call","span":{"start":[390,3],"end":[390,127],"bytes":[10729,10853]},"callee":null},"392:13":{"kind":"call","span":{"start":[392,13],"end":[392,40],"bytes":[10867,10894]},"callee":null},"392:57":{"kind":"call","span":{"start":[392,57],"end":[392,75],"bytes":[10911,10929]},"callee":null},"393:11":{"kind":"call","span":{"start":[393,11],"end":[393,75],"bytes":[10942,11006]},"callee":null},"395:3":{"kind":"call","span":{"start":[395,3],"end":[395,81],"bytes":[11013,11091]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles.closure_1","kind":"function","span":{"start":[380,1],"end":[380,44],"bytes":[10504,10547]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles.closure_1","parameters":[],"body":{"380:17":{"kind":"call","span":{"start":[380,17],"end":[380,40],"bytes":[10520,10543]},"callee":null}}}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.Init":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Init","kind":"method","span":{"start":[104,1],"end":[107,2],"bytes":[2484,2578]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[104,1],"end":[104,58],"bytes":[2484,2541]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"105:12":{"kind":"call","span":{"start":[105,12],"end":[105,23],"bytes":[2553,2564]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles","kind":"method","span":{"start":[228,1],"end":[264,2],"bytes":[5950,6935]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[228,1],"end":[228,122],"bytes":[5950,6071]}},{"name":"level","type":"int","span":{"start":[228,1],"end":[228,122],"bytes":[5950,6071]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[228,1],"end":[228,122],"bytes":[5950,6071]}},{"name":"_","type":"bool","span":{"start":[228,1],"end":[228,122],"bytes":[5950,6071]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":7},"body":{"229:8":{"kind":"call","span":{"start":[229,8],"end":[229,44],"bytes":[6079,6115]},"callee":null},"231:21":{"kind":"call","span":{"start":[231,21],"end":[231,32],"bytes":[6137,6148]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"},"236:9":{"kind":"call","span":{"start":[236,9],"end":[236,46],"bytes":[6196,6233]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"237:14":{"kind":"call","span":{"start":[237,14],"end":[237,37],"bytes":[6247,6270]},"callee":null},"238:5":{"kind":"call","span":{"start":[238,5],"end":[238,23],"bytes":[6275,6293]},"callee":null},"239:10":{"kind":"call","span":{"start":[239,10],"end":[239,43],"bytes":[6305,6338]},"callee":null},"245:11":{"kind":"call","span":{"start":[245,11],"end":[245,45],"bytes":[6453,6487]},"callee":null},"245:36":{"kind":"call","span":{"start":[245,36],"end":[245,44],"bytes":[6478,6486]},"callee":null},"247:28":{"kind":"call","span":{"start":[247,28],"end":[247,67],"bytes":[6541,6580]},"callee":null},"247:46":{"kind":"call","span":{"start":[247,46],"end":[247,66],"bytes":[6559,6579]},"callee":null},"247:56":{"kind":"call","span":{"start":[247,56],"end":[247,65],"bytes":[6569,6578]},"callee":null},"254:11":{"kind":"call","span":{"start":[254,11],"end":[260,5],"bytes":[6667,6880]},"callee":null},"258:15":{"kind":"call","span":{"start":[258,15],"end":[258,24],"bytes":[6777,6786]},"callee":null},"259:15":{"kind":"call","span":{"start":[259,15],"end":[259,27],"bytes":[6802,6814]},"callee":null},"263:9":{"kind":"call","span":{"start":[263,9],"end":[263,44],"bytes":[6893,6928]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles/github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles.closure_1","kind":"function","span":{"start":[229,1],"end":[229,44],"bytes":[6072,6115]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles.closure_1","parameters":[],"body":{"229:17":{"kind":"call","span":{"start":[229,17],"end":[229,40],"bytes":[6088,6111]},"callee":null}}}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[350,1],"end":[376,2],"bytes":[9652,10344]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[350,1],"end":[350,146],"bytes":[9652,9797]}},{"name":"level","type":"int","span":{"start":[350,1],"end":[350,146],"bytes":[9652,9797]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[350,1],"end":[350,146],"bytes":[9652,9797]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[350,1],"end":[350,146],"bytes":[9652,9797]}},{"name":"offset","type":"int64","span":{"start":[350,1],"end":[350,146],"bytes":[9652,9797]}},{"name":"size","type":"int64","span":{"start":[350,1],"end":[350,146],"bytes":[9652,9797]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"351:8":{"kind":"call","span":{"start":[351,8],"end":[351,44],"bytes":[9805,9841]},"callee":null},"353:21":{"kind":"call","span":{"start":[353,21],"end":[353,32],"bytes":[9863,9874]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"},"358:14":{"kind":"call","span":{"start":[358,14],"end":[358,69],"bytes":[9927,9982]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"359:12":{"kind":"call","span":{"start":[359,12],"end":[359,54],"bytes":[9994,10036]},"callee":null},"365:16":{"kind":"call","span":{"start":[365,16],"end":[365,44],"bytes":[10108,10136]},"callee":null},"370:2":{"kind":"call","span":{"start":[370,2],"end":[370,77],"bytes":[10179,10254]},"callee":null},"373:10":{"kind":"call","span":{"start":[373,10],"end":[373,43],"bytes":[10286,10319]},"callee":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser"}},"callables":{"closure_1":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile/github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile.closure_1","kind":"function","span":{"start":[351,1],"end":[351,44],"bytes":[9798,9841]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile.closure_1","parameters":[],"body":{"351:17":{"kind":"call","span":{"start":[351,17],"end":[351,40],"bytes":[9814,9837]},"callee":null}}}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.SetLogger":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.SetLogger","kind":"method","span":{"start":[69,1],"end":[71,2],"bytes":[1438,1544]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[69,1],"end":[69,57],"bytes":[1438,1494]}}],"metrics":{"cyclomatic":1},"body":{"70:13":{"kind":"call","span":{"start":[70,13],"end":[70,48],"bytes":[1507,1542]},"callee":null}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.Type":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Type","kind":"method","span":{"start":[99,1],"end":[101,2],"bytes":[2341,2408]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[267,1],"end":[346,2],"bytes":[6999,9541]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[267,1],"end":[267,144],"bytes":[6999,7142]}},{"name":"level","type":"int","span":{"start":[267,1],"end":[267,144],"bytes":[6999,7142]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[267,1],"end":[267,144],"bytes":[6999,7142]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[267,1],"end":[267,144],"bytes":[6999,7142]}},{"name":"rd","type":"io.Reader","span":{"start":[267,1],"end":[267,144],"bytes":[6999,7142]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"268:8":{"kind":"call","span":{"start":[268,8],"end":[268,44],"bytes":[7150,7186]},"callee":null},"270:21":{"kind":"call","span":{"start":[270,21],"end":[270,32],"bytes":[7208,7219]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init"},"275:14":{"kind":"call","span":{"start":[275,14],"end":[275,69],"bytes":[7272,7327]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"279:15":{"kind":"call","span":{"start":[279,15],"end":[279,37],"bytes":[7438,7460]},"callee":null},"282:17":{"kind":"call","span":{"start":[282,17],"end":[282,42],"bytes":[7516,7541]},"callee":null},"284:15":{"kind":"call","span":{"start":[284,15],"end":[284,71],"bytes":[7573,7629]},"callee":null},"286:15":{"kind":"call","span":{"start":[286,15],"end":[286,44],"bytes":[7647,7676]},"callee":null},"289:16":{"kind":"call","span":{"start":[289,16],"end":[289,40],"bytes":[7745,7769]},"callee":null},"291:12":{"kind":"call","span":{"start":[291,12],"end":[291,51],"bytes":[7782,7821]},"callee":null},"291:32":{"kind":"call","span":{"start":[291,32],"end":[291,50],"bytes":[7802,7820]},"callee":null},"292:15":{"kind":"call","span":{"start":[292,15],"end":[292,104],"bytes":[7850,7939]},"callee":null},"292:80":{"kind":"call","span":{"start":[292,80],"end":[292,98],"bytes":[7915,7933]},"callee":null},"295:17":{"kind":"call","span":{"start":[295,17],"end":[295,90],"bytes":[7960,8033]},"callee":null},"295:55":{"kind":"call","span":{"start":[295,55],"end":[295,66],"bytes":[7998,8009]},"callee":null},"295:68":{"kind":"call","span":{"start":[295,68],"end":[295,78],"bytes":[8011,8021]},"callee":null},"296:12":{"kind":"call","span":{"start":[296,12],"end":[296,80],"bytes":[8045,8113]},"callee":null},"298:15":{"kind":"call","span":{"start":[298,15],"end":[298,91],"bytes":[8145,8221]},"callee":null},"300:8":{"kind":"call","span":{"start":[300,8],"end":[307,5],"bytes":[8232,8342]},"callee":null},"309:12":{"kind":"call","span":{"start":[309,12],"end":[309,34],"bytes":[8355,8377]},"callee":null},"317:14":{"kind":"call","span":{"start":[317,14],"end":[317,58],"bytes":[8646,8690]},"callee":null},"318:13":{"kind":"call","span":{"start":[318,13],"end":[318,21],"bytes":[8709,8717]},"callee":null},"319:16":{"kind":"call","span":{"start":[319,16],"end":[319,91],"bytes":[8747,8822]},"callee":null},"323:12":{"kind":"call","span":{"start":[323,12],"end":[323,21],"bytes":[8842,8851]},"callee":null},"328:12":{"kind":"call","span":{"start":[328,12],"end":[328,65],"bytes":[8908,8961]},"callee":null},"329:15":{"kind":"call","span":{"start":[329,15],"end":[329,70],"bytes":[8990,9045]},"callee":null},"332:12":{"kind":"call","span":{"start":[332,12],"end":[332,52],"bytes":[9061,9101]},"callee":null},"333:15":{"kind":"call","span":{"start":[333,15],"end":[333,108],"bytes":[9130,9223]},"callee":null},"336:2":{"kind":"call","span":{"start":[336,2],"end":[336,77],"bytes":[9229,9304]},"callee":null},"337:2":{"kind":"call","span":{"start":[337,2],"end":[337,77],"bytes":[9312,9387]},"callee":null},"337:82":{"kind":"call","span":{"start":[337,82],"end":[337,92],"bytes":[9392,9402]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile.closure_1","kind":"function","span":{"start":[268,1],"end":[268,44],"bytes":[7143,7186]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile.closure_1","parameters":[],"body":{"268:17":{"kind":"call","span":{"start":[268,17],"end":[268,40],"bytes":[7159,7182]},"callee":null}}},"closure_2":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile.closure_2","kind":"function","span":{"start":[300,1],"end":[307,5],"bytes":[8225,8342]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile.closure_2","parameters":[],"body":{"302:8":{"kind":"call","span":{"start":[302,8],"end":[302,17],"bytes":[8264,8273]},"callee":null},"305:8":{"kind":"call","span":{"start":[305,8],"end":[305,38],"bytes":[8303,8333]},"callee":null}}}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.init":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","kind":"method","span":{"start":[110,1],"end":[181,2],"bytes":[2644,4499]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[110,1],"end":[110,80],"bytes":[2644,2723]}}],"return_type":"(*github.com/pkg/sftp.Client, error)","error_channel":["error"],"metrics":{"cyclomatic":13},"body":{"111:2":{"kind":"call","span":{"start":[111,2],"end":[111,13],"bytes":[2725,2736]},"callee":null},"112:8":{"kind":"call","span":{"start":[112,8],"end":[112,21],"bytes":[2744,2757]},"callee":null},"119:15":{"kind":"call","span":{"start":[119,15],"end":[119,47],"bytes":[2849,2881]},"callee":null},"125:30":{"kind":"call","span":{"start":[125,30],"end":[125,71],"bytes":[3013,3054]},"callee":null},"125:53":{"kind":"call","span":{"start":[125,53],"end":[125,70],"bytes":[3036,3053]},"callee":null},"127:16":{"kind":"call","span":{"start":[127,16],"end":[127,65],"bytes":[3088,3137]},"callee":null},"129:13":{"kind":"call","span":{"start":[129,13],"end":[129,37],"bytes":[3154,3178]},"callee":null},"131:3":{"kind":"call","span":{"start":[131,3],"end":[131,58],"bytes":[3191,3246]},"callee":null},"132:13":{"kind":"call","span":{"start":[132,13],"end":[132,40],"bytes":[3259,3286]},"callee":null},"137:20":{"kind":"call","span":{"start":[137,20],"end":[137,45],"bytes":[3394,3419]},"callee":null},"140:17":{"kind":"call","span":{"start":[140,17],"end":[140,62],"bytes":[3463,3508]},"callee":null},"140:37":{"kind":"call","span":{"start":[140,37],"end":[140,61],"bytes":[3483,3507]},"callee":null},"144:15":{"kind":"call","span":{"start":[144,15],"end":[144,37],"bytes":[3549,3571]},"callee":null},"146:16":{"kind":"call","span":{"start":[146,16],"end":[146,70],"bytes":[3605,3659]},"callee":null},"149:18":{"kind":"call","span":{"start":[149,18],"end":[149,42],"bytes":[3682,3706]},"callee":null},"151:16":{"kind":"call","span":{"start":[151,16],"end":[151,71],"bytes":[3740,3795]},"callee":null},"153:17":{"kind":"call","span":{"start":[153,17],"end":[153,60],"bytes":[3816,3859]},"callee":null},"153:37":{"kind":"call","span":{"start":[153,37],"end":[153,59],"bytes":[3836,3858]},"callee":null},"158:18":{"kind":"call","span":{"start":[158,18],"end":[158,43],"bytes":[3937,3962]},"callee":null},"159:10":{"kind":"call","span":{"start":[159,10],"end":[159,40],"bytes":[3986,4016]},"callee":null},"163:24":{"kind":"call","span":{"start":[163,24],"end":[163,53],"bytes":[4065,4094]},"callee":null},"171:10":{"kind":"call","span":{"start":[171,10],"end":[171,54],"bytes":[4284,4328]},"callee":null},"171:23":{"kind":"call","span":{"start":[171,23],"end":[171,53],"bytes":[4297,4327]},"callee":null},"174:25":{"kind":"call","span":{"start":[174,25],"end":[174,61],"bytes":[4357,4393]},"callee":null},"175:3":{"kind":"call","span":{"start":[175,3],"end":[175,22],"bytes":[4410,4429]},"callee":null}}},"github.com/benbjohnson/litestream/sftp.ReplicaClient.resetOnConnError":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.resetOnConnError","kind":"method","span":{"start":[417,1],"end":[430,2],"bytes":[11581,11843]},"signature":"github.com/benbjohnson/litestream/sftp.ReplicaClient.resetOnConnError","parameters":[{"name":"err","type":"error","span":{"start":[417,1],"end":[417,54],"bytes":[11581,11634]}}],"metrics":{"cyclomatic":4},"body":{"418:6":{"kind":"call","span":{"start":[418,6],"end":[418,49],"bytes":[11640,11683]},"callee":null},"423:3":{"kind":"call","span":{"start":[423,3],"end":[423,23],"bytes":[11727,11747]},"callee":null},"427:3":{"kind":"call","span":{"start":[427,3],"end":[427,22],"bytes":[11799,11818]},"callee":null}}}},"fields":{"ConcurrentWrites":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/ConcurrentWrites","kind":"field","type":"bool","span":{"start":[57,1],"end":[57,23],"bytes":[1107,1129]}},"DialTimeout":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/DialTimeout","kind":"field","type":"time.Duration","span":{"start":[53,1],"end":[53,27],"bytes":[953,979]}},"Host":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/Host","kind":"field","type":"string","span":{"start":[47,1],"end":[47,20],"bytes":[833,852]}},"HostKey":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/HostKey","kind":"field","type":"string","span":{"start":[52,1],"end":[52,20],"bytes":[933,952]}},"KeyPath":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/KeyPath","kind":"field","type":"string","span":{"start":[51,1],"end":[51,20],"bytes":[913,932]}},"Password":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/Password","kind":"field","type":"string","span":{"start":[49,1],"end":[49,20],"bytes":[873,892]}},"Path":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[50,1],"end":[50,20],"bytes":[893,912]}},"User":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/User","kind":"field","type":"string","span":{"start":[48,1],"end":[48,20],"bytes":[853,872]}},"logger":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[44,1],"end":[44,25],"bytes":[782,806]}},"mu":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[41,1],"end":[41,23],"bytes":[710,732]}},"sftpClient":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/sftpClient","kind":"field","type":"*github.com/pkg/sftp.Client","span":{"start":[43,1],"end":[43,25],"bytes":[757,781]}},"sshClient":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/sshClient","kind":"field","type":"*golang.org/x/crypto/ssh.Client","span":{"start":[42,1],"end":[42,24],"bytes":[733,756]}}}}},"functions":{"github.com/benbjohnson/litestream/sftp.NewReplicaClient":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient","kind":"function","span":{"start":[61,1],"end":[67,2],"bytes":[1194,1436]},"signature":"github.com/benbjohnson/litestream/sftp.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/sftp.ReplicaClient","metrics":{"cyclomatic":1},"body":{"63:21":{"kind":"call","span":{"start":[63,21],"end":[63,35],"bytes":[1279,1293]},"callee":null}}},"github.com/benbjohnson/litestream/sftp.NewReplicaClientFromURL":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClientFromURL","kind":"function","span":{"start":[76,1],"end":[96,2],"bytes":[1739,2296]},"signature":"github.com/benbjohnson/litestream/sftp.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[76,1],"end":[76,137],"bytes":[1739,1875]}},{"name":"host","type":"string","span":{"start":[76,1],"end":[76,137],"bytes":[1739,1875]}},{"name":"urlPath","type":"string","span":{"start":[76,1],"end":[76,137],"bytes":[1739,1875]}},{"name":"query","type":"net/url.Values","span":{"start":[76,1],"end":[76,137],"bytes":[1739,1875]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[76,1],"end":[76,137],"bytes":[1739,1875]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"77:12":{"kind":"call","span":{"start":[77,12],"end":[77,30],"bytes":[1887,1905]},"callee":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient"},"81:17":{"kind":"call","span":{"start":[81,17],"end":[81,36],"bytes":[1983,2002]},"callee":null},"82:24":{"kind":"call","span":{"start":[82,24],"end":[82,43],"bytes":[2026,2045]},"callee":null},"89:15":{"kind":"call","span":{"start":[89,15],"end":[89,63],"bytes":[2132,2180]},"callee":null},"92:15":{"kind":"call","span":{"start":[92,15],"end":[92,63],"bytes":[2222,2270]},"callee":null}}},"github.com/benbjohnson/litestream/sftp.init":{"id":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.init","kind":"function","span":{"start":[25,1],"end":[27,2],"bytes":[291,380]},"signature":"github.com/benbjohnson/litestream/sftp.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"26:2":{"kind":"call","span":{"start":[26,2],"end":[26,74],"bytes":[306,378]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}}},"content_hash":"1070af36e0ce6ec261d4c0316e2632daf389405efc6ef1bff59537a1436ec4c5"},"store.go":{"id":"can://go/litestream/store.go","kind":"module","span":{"start":[1,1],"end":[959,1],"bytes":[0,26266]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/prometheus/client_golang/prometheus\"\n\t\"github.com/prometheus/client_golang/prometheus/promauto\"\n\t\"github.com/superfly/ltx\"\n\t\"golang.org/x/sync/errgroup\"\n)\n\nvar (\n\tvalidationChecksCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{\n\t\tName: \"litestream_validation_checks_total\",\n\t\tHelp: \"Number of replica validation checks by result (success, invalid, or error).\",\n\t}, []string{\"db\", \"level\", \"result\"})\n\n\tlastValidationSuccessGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_last_validation_success\",\n\t\tHelp: \"Whether the last replica validation check succeeded (1) or failed (0). Zero before the first check completes.\",\n\t}, []string{\"db\", \"level\"})\n\n\tlastValidationSuccessTimestampGaugeVec = promauto.NewGaugeVec(prometheus.GaugeOpts{\n\t\tName: \"litestream_last_validation_success_timestamp_seconds\",\n\t\tHelp: \"Unix time of the last successful replica validation check. Zero until a check succeeds.\",\n\t}, []string{\"db\", \"level\"})\n)\n\nvar (\n\t// ErrNoCompaction is returned when no new files are available from the previous level.\n\tErrNoCompaction = errors.New(\"no compaction\")\n\n\t// ErrCompactionTooEarly is returned when a compaction is attempted too soon\n\t// since the last compaction time. This is used to prevent frequent\n\t// re-compaction when restarting the process.\n\tErrCompactionTooEarly = errors.New(\"compaction too early\")\n\n\t// ErrTxNotAvailable is returned when a transaction does not exist.\n\tErrTxNotAvailable = errors.New(\"transaction not available\")\n\n\t// ErrDBNotReady is a sentinel for errors.Is() compatibility.\n\tErrDBNotReady = \u0026DBNotReadyError{}\n\n\t// ErrShutdownInterrupted is returned when the shutdown sync retry loop\n\t// is interrupted by a done channel signal (e.g., second Ctrl+C).\n\tErrShutdownInterrupted = errors.New(\"shutdown sync interrupted\")\n\n\tErrDatabaseNotFound = errors.New(\"database not found\")\n\tErrDatabaseNotOpen = errors.New(\"database not open\")\n)\n\n// DBNotReadyError is returned when an operation is attempted before the\n// database has been initialized (e.g., page size not yet known).\ntype DBNotReadyError struct {\n\tReason string\n}\n\nfunc (e *DBNotReadyError) Error() string {\n\tif e.Reason != \"\" {\n\t\treturn \"db not ready: \" + e.Reason\n\t}\n\treturn \"db not ready\"\n}\n\nfunc (e *DBNotReadyError) Is(target error) bool {\n\t_, ok := target.(*DBNotReadyError)\n\treturn ok\n}\n\n// Store defaults\nconst (\n\tDefaultSnapshotInterval = 24 * time.Hour\n\tDefaultSnapshotRetention = 24 * time.Hour\n\n\tDefaultRetention = 24 * time.Hour\n\tDefaultRetentionCheckInterval = 1 * time.Hour\n\n\t// DefaultL0Retention is the default time that L0 files are kept around\n\t// after they have been compacted into L1 files.\n\tDefaultL0Retention = 5 * time.Minute\n\t// DefaultL0RetentionCheckInterval controls how frequently L0 retention is\n\t// enforced. This interval should be more frequent than the L1 compaction\n\t// interval so that VFS read replicas have time to observe new files.\n\tDefaultL0RetentionCheckInterval = 15 * time.Second\n\n\t// DefaultHeartbeatCheckInterval controls how frequently the heartbeat\n\t// monitor checks if heartbeat pings should be sent.\n\tDefaultHeartbeatCheckInterval = 15 * time.Second\n\n\t// DefaultDBInitTimeout is the maximum time to wait for a database to be\n\t// initialized (page size known) before logging a warning.\n\tDefaultDBInitTimeout = 30 * time.Second\n)\n\n// Store represents the top-level container for databases.\n//\n// It manages async background tasks like compactions so that the system\n// is not overloaded by too many concurrent tasks.\ntype Store struct {\n\tmu sync.Mutex\n\tdbs []*DB\n\tlevels CompactionLevels\n\n\twg sync.WaitGroup\n\tctx context.Context\n\tcancel func()\n\tdone \u003c-chan struct{}\n\n\t// The frequency of snapshots.\n\tSnapshotInterval time.Duration\n\t// The duration of time that snapshots are kept before being deleted.\n\tSnapshotRetention time.Duration\n\n\t// The duration that L0 files are kept after being compacted into L1.\n\tL0Retention time.Duration\n\t// How often to check for expired L0 files.\n\tL0RetentionCheckInterval time.Duration\n\n\t// If true, compaction is run in the background according to compaction levels.\n\tCompactionMonitorEnabled bool\n\n\t// If true, verify TXID consistency at destination level after each compaction.\n\tVerifyCompaction bool\n\n\t// RetentionEnabled controls whether Litestream actively deletes old files\n\t// during retention enforcement. When false, cloud provider lifecycle\n\t// policies handle retention instead. Local file cleanup still occurs.\n\tRetentionEnabled bool\n\n\t// Shutdown sync retry settings.\n\tShutdownSyncTimeout time.Duration\n\tShutdownSyncInterval time.Duration\n\n\t// How often to check if heartbeat pings should be sent.\n\tHeartbeatCheckInterval time.Duration\n\n\t// Heartbeat client for health check pings. Sends pings only when\n\t// all databases have synced successfully within the heartbeat interval.\n\tHeartbeat *HeartbeatClient\n\n\t// heartbeatMonitorRunning tracks whether the heartbeat monitor goroutine is running.\n\theartbeatMonitorRunning bool\n\n\t// How often to run validation checks. Zero disables periodic validation.\n\tValidationInterval time.Duration\n\n\tLogger *slog.Logger\n}\n\nfunc NewStore(dbs []*DB, levels CompactionLevels) *Store {\n\ts := \u0026Store{\n\t\tdbs: dbs,\n\t\tlevels: levels,\n\n\t\tSnapshotInterval: DefaultSnapshotInterval,\n\t\tSnapshotRetention: DefaultSnapshotRetention,\n\t\tL0Retention: DefaultL0Retention,\n\t\tL0RetentionCheckInterval: DefaultL0RetentionCheckInterval,\n\t\tCompactionMonitorEnabled: true,\n\t\tRetentionEnabled: true,\n\t\tShutdownSyncTimeout: DefaultShutdownSyncTimeout,\n\t\tShutdownSyncInterval: DefaultShutdownSyncInterval,\n\t\tHeartbeatCheckInterval: DefaultHeartbeatCheckInterval,\n\t\tLogger: slog.Default().With(LogKeySystem, LogSystemStore),\n\t}\n\n\tfor _, db := range dbs {\n\t\tdb.SetLogger(s.Logger.With(LogKeyDB, filepath.Base(db.Path())))\n\t\tdb.L0Retention = s.L0Retention\n\t\tdb.ShutdownSyncTimeout = s.ShutdownSyncTimeout\n\t\tdb.ShutdownSyncInterval = s.ShutdownSyncInterval\n\t\tdb.VerifyCompaction = s.VerifyCompaction\n\t\tdb.RetentionEnabled = s.RetentionEnabled\n\t}\n\ts.ctx, s.cancel = context.WithCancel(context.Background())\n\treturn s\n}\n\nfunc (s *Store) Open(ctx context.Context) error {\n\tif err := s.levels.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\tinitGroup, initCtx := errgroup.WithContext(ctx)\n\tinitGroup.SetLimit(50)\n\tfor _, db := range s.dbs {\n\t\tdb := db\n\t\tinitGroup.Go(func() error {\n\t\t\tselect {\n\t\t\tcase \u003c-initCtx.Done():\n\t\t\t\treturn initCtx.Err()\n\t\t\tdefault:\n\t\t\t}\n\n\t\t\tif db.Replica != nil \u0026\u0026 db.Replica.Client != nil {\n\t\t\t\tif err := db.Replica.Client.Init(initCtx); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"initialize replica client for %q: %w\", db.Path(), err)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t}\n\tif err := initGroup.Wait(); err != nil {\n\t\treturn err\n\t}\n\n\topenGroup, openCtx := errgroup.WithContext(ctx)\n\topenGroup.SetLimit(50)\n\tfor _, db := range s.dbs {\n\t\tdb := db\n\t\topenGroup.Go(func() error {\n\t\t\tselect {\n\t\t\tcase \u003c-openCtx.Done():\n\t\t\t\treturn openCtx.Err()\n\t\t\tdefault:\n\t\t\t}\n\t\t\treturn db.Open()\n\t\t})\n\t}\n\tif err := openGroup.Wait(); err != nil {\n\t\treturn err\n\t}\n\n\t// Start monitors for compactions \u0026 snapshots.\n\tif s.CompactionMonitorEnabled {\n\t\t// Start compaction monitors for all levels except L0.\n\t\tfor _, lvl := range s.levels {\n\t\t\tlvl := lvl\n\t\t\tif lvl.Level == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ts.wg.Add(1)\n\t\t\tgo func() {\n\t\t\t\tdefer s.wg.Done()\n\t\t\t\ts.monitorCompactionLevel(s.ctx, lvl)\n\t\t\t}()\n\t\t}\n\n\t\t// Start snapshot monitor for snapshots.\n\t\ts.wg.Add(1)\n\t\tgo func() {\n\t\t\tdefer s.wg.Done()\n\t\t\ts.monitorCompactionLevel(s.ctx, s.SnapshotLevel())\n\t\t}()\n\t}\n\n\tif s.L0Retention \u003e 0 \u0026\u0026 s.L0RetentionCheckInterval \u003e 0 {\n\t\ts.wg.Add(1)\n\t\tgo func() {\n\t\t\tdefer s.wg.Done()\n\t\t\ts.monitorL0Retention(s.ctx)\n\t\t}()\n\t}\n\n\t// Start heartbeat monitor if any database has heartbeat configured.\n\ts.startHeartbeatMonitorIfNeeded()\n\n\t// Start validation monitor if configured.\n\tif s.ValidationInterval \u003e 0 {\n\t\ts.wg.Add(1)\n\t\tgo func() {\n\t\t\tdefer s.wg.Done()\n\t\t\ts.monitorValidation(s.ctx)\n\t\t}()\n\t}\n\n\treturn nil\n}\n\nfunc (s *Store) Close(ctx context.Context) (err error) {\n\t// Stop the compaction, snapshot \u0026 retention monitors before closing the\n\t// databases so no snapshot is still reading a database's file handle.\n\ts.cancel()\n\ts.wg.Wait()\n\n\ts.mu.Lock()\n\tdbs := slices.Clone(s.dbs)\n\ts.mu.Unlock()\n\n\tfor _, db := range dbs {\n\t\tif e := db.Close(ctx); e != nil {\n\t\t\tif errors.Is(e, ErrShutdownInterrupted) {\n\t\t\t\tif err == nil {\n\t\t\t\t\terr = e\n\t\t\t\t}\n\t\t\t} else if err == nil || errors.Is(err, ErrShutdownInterrupted) {\n\t\t\t\terr = e\n\t\t\t}\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc (s *Store) DBs() []*DB {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\treturn slices.Clone(s.dbs)\n}\n\n// RegisterDB registers a new database with the store and starts monitoring it.\nfunc (s *Store) RegisterDB(db *DB) error {\n\tif db == nil {\n\t\treturn fmt.Errorf(\"db required\")\n\t}\n\n\t// First check: see if database already exists\n\ts.mu.Lock()\n\tfor _, existing := range s.dbs {\n\t\tif existing.Path() == db.Path() {\n\t\t\ts.mu.Unlock()\n\t\t\treturn nil\n\t\t}\n\t}\n\ts.mu.Unlock()\n\n\t// Apply store-wide settings before opening the database.\n\tdb.SetLogger(s.Logger.With(LogKeyDB, filepath.Base(db.Path())))\n\tdb.L0Retention = s.L0Retention\n\tdb.ShutdownSyncTimeout = s.ShutdownSyncTimeout\n\tdb.ShutdownSyncInterval = s.ShutdownSyncInterval\n\tdb.VerifyCompaction = s.VerifyCompaction\n\tdb.RetentionEnabled = s.RetentionEnabled\n\tdb.Done = s.done\n\n\t// Open the database without holding the lock to avoid blocking other operations.\n\t// The double-check pattern below handles the race condition.\n\tif err := db.Open(); err != nil {\n\t\treturn fmt.Errorf(\"open db: %w\", err)\n\t}\n\n\t// Second check: verify database wasn't added by another goroutine while we were opening.\n\t// If it was, close our instance and return without error.\n\ts.mu.Lock()\n\n\tfor _, existing := range s.dbs {\n\t\tif existing.Path() == db.Path() {\n\t\t\t// Another goroutine added this database while we were opening.\n\t\t\t// Release lock before closing to avoid potential deadlock.\n\t\t\ts.mu.Unlock()\n\t\t\tif err := db.Close(context.Background()); err != nil {\n\t\t\t\tdb.Logger.Error(\"close duplicate db\", \"path\", db.Path(), \"error\", err)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\ts.dbs = append(s.dbs, db)\n\ts.mu.Unlock()\n\n\t// Start heartbeat monitor if heartbeat is configured and monitor isn't running.\n\ts.startHeartbeatMonitorIfNeeded()\n\n\treturn nil\n}\n\n// UnregisterDB stops monitoring the database at the provided path and closes it.\nfunc (s *Store) UnregisterDB(ctx context.Context, path string) error {\n\tif path == \"\" {\n\t\treturn fmt.Errorf(\"db path required\")\n\t}\n\n\ts.mu.Lock()\n\n\tidx := -1\n\tvar db *DB\n\tfor i, existing := range s.dbs {\n\t\tif existing.Path() == path {\n\t\t\tidx = i\n\t\t\tdb = existing\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif db == nil {\n\t\ts.mu.Unlock()\n\t\treturn nil\n\t}\n\n\ts.dbs = slices.Delete(s.dbs, idx, idx+1)\n\ts.mu.Unlock()\n\n\tif err := db.Close(ctx); err != nil {\n\t\treturn fmt.Errorf(\"close db: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// EnableDB starts replication for a registered database.\n// The context is checked for cancellation before opening.\n// Note: db.Open() itself does not support cancellation.\nfunc (s *Store) EnableDB(ctx context.Context, path string) error {\n\tdb := s.FindDB(path)\n\tif db == nil {\n\t\treturn fmt.Errorf(\"database not found: %s\", path)\n\t}\n\n\tif db.IsOpen() {\n\t\treturn fmt.Errorf(\"database already enabled: %s\", path)\n\t}\n\n\t// Check for cancellation before starting open\n\tif err := ctx.Err(); err != nil {\n\t\treturn fmt.Errorf(\"enable database: %w\", err)\n\t}\n\n\tif err := db.Open(); err != nil {\n\t\treturn fmt.Errorf(\"open database: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// DisableDB stops replication for a database.\nfunc (s *Store) DisableDB(ctx context.Context, path string) error {\n\tdb := s.FindDB(path)\n\tif db == nil {\n\t\treturn fmt.Errorf(\"database not found: %s\", path)\n\t}\n\n\tif !db.IsOpen() {\n\t\treturn fmt.Errorf(\"database already disabled: %s\", path)\n\t}\n\n\tif err := db.Close(ctx); err != nil {\n\t\treturn fmt.Errorf(\"close database: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// SyncDBResult holds the result of a sync operation.\ntype SyncDBResult struct {\n\tTXID uint64\n\tReplicatedTXID uint64\n\tChanged bool\n}\n\n// SyncDB forces an immediate sync for a database. If wait is true, blocks\n// until both WAL-to-LTX and LTX-to-remote sync complete. If wait is false,\n// only performs the WAL-to-LTX sync and lets the replica monitor handle upload.\n// Lock waits are context-aware: the timeout is honored while waiting for\n// the database sync executor and the replica sync lock.\nfunc (s *Store) SyncDB(ctx context.Context, path string, wait bool) (SyncDBResult, error) {\n\tdb := s.FindDB(path)\n\tif db == nil {\n\t\treturn SyncDBResult{}, fmt.Errorf(\"%w: %s\", ErrDatabaseNotFound, path)\n\t}\n\n\tif !db.IsOpen() {\n\t\treturn SyncDBResult{}, fmt.Errorf(\"%w: %s\", ErrDatabaseNotOpen, path)\n\t}\n\n\t_, beforeTXID, err := db.MaxLTX()\n\tif err != nil {\n\t\treturn SyncDBResult{}, fmt.Errorf(\"read position before sync: %w\", err)\n\t}\n\n\tif wait {\n\t\tif err := db.SyncAndWait(ctx); err != nil {\n\t\t\treturn SyncDBResult{}, fmt.Errorf(\"sync database: %w\", err)\n\t\t}\n\t} else {\n\t\tif err := db.Sync(ctx); err != nil {\n\t\t\treturn SyncDBResult{}, fmt.Errorf(\"sync database: %w\", err)\n\t\t}\n\t}\n\n\t_, afterTXID, err := db.MaxLTX()\n\tif err != nil {\n\t\treturn SyncDBResult{}, fmt.Errorf(\"read position after sync: %w\", err)\n\t}\n\n\tvar replicatedTXID uint64\n\tif db.Replica != nil {\n\t\treplicatedTXID = uint64(db.Replica.Pos().TXID)\n\t}\n\n\treturn SyncDBResult{\n\t\tTXID: uint64(afterTXID),\n\t\tReplicatedTXID: replicatedTXID,\n\t\tChanged: afterTXID \u003e beforeTXID,\n\t}, nil\n}\n\n// FindDB returns the database with the given path.\nfunc (s *Store) FindDB(path string) *DB {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tfor _, db := range s.dbs {\n\t\tif db.Path() == path {\n\t\t\treturn db\n\t\t}\n\t}\n\treturn nil\n}\n\n// SetL0Retention updates the retention window for L0 files and propagates it to\n// all managed databases.\nfunc (s *Store) SetL0Retention(d time.Duration) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.L0Retention = d\n\tfor _, db := range s.dbs {\n\t\tdb.L0Retention = d\n\t}\n}\n\n// SetDone sets the done channel used for interrupt handling during shutdown\n// and propagates it to all managed databases.\nfunc (s *Store) SetDone(done \u003c-chan struct{}) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.done = done\n\tfor _, db := range s.dbs {\n\t\tdb.Done = done\n\t}\n}\n\n// SetShutdownSyncTimeout updates the shutdown sync timeout and propagates it to\n// all managed databases.\nfunc (s *Store) SetShutdownSyncTimeout(d time.Duration) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.ShutdownSyncTimeout = d\n\tfor _, db := range s.dbs {\n\t\tdb.ShutdownSyncTimeout = d\n\t}\n}\n\n// SetShutdownSyncInterval updates the shutdown sync interval and propagates it to\n// all managed databases.\nfunc (s *Store) SetShutdownSyncInterval(d time.Duration) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.ShutdownSyncInterval = d\n\tfor _, db := range s.dbs {\n\t\tdb.ShutdownSyncInterval = d\n\t}\n}\n\n// SetVerifyCompaction updates the verify compaction flag and propagates it to\n// all managed databases.\nfunc (s *Store) SetVerifyCompaction(v bool) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.VerifyCompaction = v\n\tfor _, db := range s.dbs {\n\t\tdb.VerifyCompaction = v\n\t\tdb.compactor.VerifyCompaction = v\n\t}\n}\n\nfunc (s *Store) SetRetentionEnabled(v bool) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.RetentionEnabled = v\n\tfor _, db := range s.dbs {\n\t\tdb.RetentionEnabled = v\n\t\tdb.compactor.RetentionEnabled = v\n\t}\n}\n\n// SnapshotLevel returns a pseudo compaction level based on snapshot settings.\nfunc (s *Store) SnapshotLevel() *CompactionLevel {\n\treturn \u0026CompactionLevel{\n\t\tLevel: SnapshotLevel,\n\t\tInterval: s.SnapshotInterval,\n\t}\n}\n\nfunc (s *Store) monitorCompactionLevel(ctx context.Context, lvl *CompactionLevel) {\n\ts.Logger.Info(\"starting compaction monitor\", \"level\", lvl.Level, \"interval\", lvl.Interval)\n\n\tretryDeadline := time.Time{}\n\ttimer := time.NewTimer(time.Nanosecond)\n\tdefer timer.Stop()\n\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\treturn\n\t\tcase \u003c-timer.C:\n\t\t\t// proceed\n\t\t}\n\n\t\tnow := time.Now()\n\t\tnextDelay := time.Until(lvl.NextCompactionAt(now))\n\n\t\tvar notReadyDBs []string\n\n\t\tfor _, db := range s.DBs() {\n\t\t\tif !db.IsOpen() {\n\t\t\t\tcontinue // skip disabled DBs\n\t\t\t}\n\t\t\t_, err := s.CompactDB(ctx, db, lvl)\n\t\t\tswitch {\n\t\t\tcase errors.Is(err, ErrNoCompaction), errors.Is(err, ErrCompactionTooEarly):\n\t\t\t\tdb.Logger.Debug(\"no compaction\", \"level\", lvl.Level, \"path\", db.Path())\n\t\t\tcase errors.Is(err, ErrDBNotReady):\n\t\t\t\tdb.Logger.Debug(\"db not ready, skipping\", \"level\", lvl.Level, \"path\", db.Path(), \"error\", err)\n\t\t\t\tnotReadyDBs = append(notReadyDBs, db.Path())\n\t\t\tcase err != nil \u0026\u0026 !isShutdownError(ctx, err):\n\t\t\t\tdb.Logger.Error(\"compaction failed\", \"level\", lvl.Level, \"error\", err)\n\t\t\t}\n\n\t\t\tif lvl.Level == SnapshotLevel {\n\t\t\t\tif err := s.EnforceSnapshotRetention(ctx, db); err != nil \u0026\u0026 !isShutdownError(ctx, err) {\n\t\t\t\t\tdb.Logger.Error(\"retention enforcement failed\", \"error\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttimedOut := !retryDeadline.IsZero() \u0026\u0026 now.After(retryDeadline)\n\t\tif len(notReadyDBs) \u003e 0 \u0026\u0026 !timedOut {\n\t\t\tif retryDeadline.IsZero() {\n\t\t\t\tretryDeadline = now.Add(DefaultDBInitTimeout)\n\t\t\t}\n\t\t\tnextDelay = time.Second\n\t\t\ts.Logger.Debug(\"scheduling retry for unready dbs\", \"level\", lvl.Level)\n\t\t} else {\n\t\t\tif timedOut {\n\t\t\t\ts.Logger.Warn(\"timeout waiting for db initialization\",\n\t\t\t\t\t\"level\", lvl.Level,\n\t\t\t\t\t\"dbs\", notReadyDBs,\n\t\t\t\t\t\"timeout\", DefaultDBInitTimeout,\n\t\t\t\t\t\"hint\", \"database may have corrupted local state or blocked transactions; try removing -litestream directory and restarting\")\n\t\t\t}\n\t\t\tretryDeadline = time.Time{}\n\t\t}\n\n\t\tif nextDelay \u003c 0 {\n\t\t\tnextDelay = 0\n\t\t}\n\t\ttimer.Reset(nextDelay)\n\t}\n}\n\nfunc (s *Store) monitorL0Retention(ctx context.Context) {\n\ts.Logger.Info(\"starting L0 retention monitor\", \"interval\", s.L0RetentionCheckInterval, \"retention\", s.L0Retention)\n\n\tticker := time.NewTicker(s.L0RetentionCheckInterval)\n\tdefer ticker.Stop()\n\nLOOP:\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\tbreak LOOP\n\t\tcase \u003c-ticker.C:\n\t\t}\n\n\t\tfor _, db := range s.DBs() {\n\t\t\tif !db.IsOpen() {\n\t\t\t\tcontinue // skip disabled DBs\n\t\t\t}\n\t\t\tif err := db.EnforceL0RetentionByTime(ctx); err != nil {\n\t\t\t\tif isShutdownError(ctx, err) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tdb.Logger.Error(\"l0 retention enforcement failed\", \"path\", db.Path(), \"error\", err)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// startHeartbeatMonitorIfNeeded starts the heartbeat monitor goroutine if:\n// - HeartbeatCheckInterval is configured\n// - Heartbeat is configured on the Store\n// - The monitor is not already running\nfunc (s *Store) startHeartbeatMonitorIfNeeded() {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif s.heartbeatMonitorRunning {\n\t\treturn\n\t}\n\tif s.HeartbeatCheckInterval \u003c= 0 {\n\t\treturn\n\t}\n\tif !s.hasHeartbeatConfigLocked() {\n\t\treturn\n\t}\n\n\ts.heartbeatMonitorRunning = true\n\ts.wg.Add(1)\n\tgo func() {\n\t\tdefer s.wg.Done()\n\t\ts.monitorHeartbeats(s.ctx)\n\t}()\n}\n\n// hasHeartbeatConfigLocked returns true if heartbeat is configured on the Store.\n// Must be called with s.mu held.\nfunc (s *Store) hasHeartbeatConfigLocked() bool {\n\treturn s.Heartbeat != nil \u0026\u0026 s.Heartbeat.URL != \"\"\n}\n\n// monitorHeartbeats periodically checks if heartbeat pings should be sent.\n// Heartbeat pings are only sent when ALL databases have synced successfully\n// within the heartbeat interval.\nfunc (s *Store) monitorHeartbeats(ctx context.Context) {\n\ts.Logger.Info(\"starting heartbeat monitor\", \"interval\", s.HeartbeatCheckInterval)\n\n\tticker := time.NewTicker(s.HeartbeatCheckInterval)\n\tdefer ticker.Stop()\n\nLOOP:\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\tbreak LOOP\n\t\tcase \u003c-ticker.C:\n\t\t}\n\n\t\ts.sendHeartbeatIfNeeded(ctx)\n\t}\n}\n\n// sendHeartbeatIfNeeded sends a heartbeat ping if:\n// - Heartbeat is configured on the Store\n// - Enough time has passed since the last ping attempt\n// - ALL databases have synced successfully within the heartbeat interval\nfunc (s *Store) sendHeartbeatIfNeeded(ctx context.Context) {\n\thb := s.Heartbeat\n\tif hb == nil || hb.URL == \"\" {\n\t\treturn\n\t}\n\n\tif !hb.ShouldPing() {\n\t\treturn\n\t}\n\n\t// Check if all databases are healthy (synced within the heartbeat interval).\n\t// A database is healthy if it synced within the heartbeat interval.\n\thealthySince := time.Now().Add(-hb.Interval)\n\tif !s.allDatabasesHealthy(healthySince) {\n\t\treturn\n\t}\n\n\t// Record ping attempt time before making the request to ensure we respect\n\t// the configured interval even if the ping fails. This prevents rapid\n\t// retries that could overwhelm the endpoint.\n\thb.RecordPing()\n\n\tif err := hb.Ping(ctx); err != nil {\n\t\ts.Logger.Error(\"heartbeat ping failed\", \"url\", hb.URL, \"error\", err)\n\t\treturn\n\t}\n\n\ts.Logger.Debug(\"heartbeat ping sent\", \"url\", hb.URL)\n}\n\n// allDatabasesHealthy returns true if all databases have synced successfully\n// since the given time. Returns false if there are no databases or no enabled databases.\nfunc (s *Store) allDatabasesHealthy(since time.Time) bool {\n\tdbs := s.DBs()\n\tif len(dbs) == 0 {\n\t\treturn false\n\t}\n\n\tenabledCount := 0\n\tfor _, db := range dbs {\n\t\tif !db.IsOpen() {\n\t\t\tcontinue // skip disabled DBs\n\t\t}\n\t\tenabledCount++\n\t\tlastSync := db.LastSuccessfulSyncAt()\n\t\tif lastSync.IsZero() || lastSync.Before(since) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn enabledCount \u003e 0\n}\n\n// CompactDB performs a compaction or snapshot for a given database on a single destination level.\n// This function will only proceed if a compaction has not occurred before the last compaction time.\nfunc (s *Store) CompactDB(ctx context.Context, db *DB, lvl *CompactionLevel) (*ltx.FileInfo, error) {\n\t// Skip if database is not yet initialized (page size unknown).\n\tif db.PageSize() == 0 {\n\t\treturn nil, \u0026DBNotReadyError{Reason: \"page size not initialized\"}\n\t}\n\n\tdstLevel := lvl.Level\n\n\t// Ensure we are not re-compacting before the most recent compaction time.\n\tprevCompactionAt := lvl.PrevCompactionAt(time.Now())\n\tdstInfo, err := db.MaxLTXFileInfo(ctx, dstLevel)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fetch dst level info: %w\", err)\n\t} else if dstInfo.CreatedAt.After(prevCompactionAt) {\n\t\treturn nil, ErrCompactionTooEarly\n\t}\n\n\t// Shortcut if this is a snapshot since we are not pulling from a previous level.\n\tif dstLevel == SnapshotLevel {\n\t\tpos, err := db.Pos()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"fetch db position: %w\", err)\n\t\t}\n\t\tif dstInfo.MaxTXID != 0 \u0026\u0026 dstInfo.MaxTXID \u003e= pos.TXID {\n\t\t\treturn nil, ErrNoCompaction\n\t\t}\n\n\t\tinfo, err := db.Snapshot(ctx)\n\t\tif err != nil {\n\t\t\treturn info, err\n\t\t}\n\t\tdb.Logger.InfoContext(ctx, \"snapshot complete\", \"txid\", info.MaxTXID.String(), \"size\", info.Size)\n\t\treturn info, nil\n\t}\n\n\t// Fetch latest LTX files for both the source \u0026 destination so we can see if we need to make progress.\n\tsrcLevel := s.levels.PrevLevel(dstLevel)\n\tsrcInfo, err := db.MaxLTXFileInfo(ctx, srcLevel)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fetch src level info: %w\", err)\n\t}\n\n\t// Skip if there are no new files to compact.\n\tif srcInfo.MaxTXID \u003c= dstInfo.MaxTXID {\n\t\treturn nil, ErrNoCompaction\n\t}\n\n\tinfo, err := db.Compact(ctx, dstLevel)\n\tif err != nil {\n\t\treturn info, err\n\t}\n\n\tdb.Logger.InfoContext(ctx, \"compaction complete\",\n\t\t\"level\", dstLevel,\n\t\tslog.Group(\"txid\",\n\t\t\t\"min\", info.MinTXID.String(),\n\t\t\t\"max\", info.MaxTXID.String(),\n\t\t),\n\t\t\"size\", info.Size,\n\t)\n\n\treturn info, nil\n}\n\n// EnforceSnapshotRetention removes old snapshots by timestamp and then\n// cleans up all lower levels based on minimum snapshot TXID.\nfunc (s *Store) EnforceSnapshotRetention(ctx context.Context, db *DB) error {\n\t// Enforce retention for the snapshot level.\n\tminSnapshotTXID, err := db.EnforceSnapshotRetention(ctx, time.Now().Add(-s.SnapshotRetention))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"enforce snapshot retention: %w\", err)\n\t}\n\n\t// We should also enforce retention for L0 on the same schedule as L1.\n\tfor _, lvl := range s.levels {\n\t\t// Skip L0 since it is enforced on a more frequent basis.\n\t\tif lvl.Level == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := db.EnforceRetentionByTXID(ctx, lvl.Level, minSnapshotTXID); err != nil {\n\t\t\treturn fmt.Errorf(\"enforce L%d retention: %w\", lvl.Level, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ValidationResult holds the result of validating a replica's LTX files.\ntype ValidationResult struct {\n\tValid bool // true if no errors found\n\tErrors []ValidationError // all errors found\n}\n\n// Validate checks LTX file consistency across all databases and levels.\n// SnapshotLevel (9) is excluded since snapshots are not contiguous.\nfunc (s *Store) Validate(ctx context.Context) (*ValidationResult, error) {\n\tresult := \u0026ValidationResult{Valid: true}\n\n\ts.mu.Lock()\n\tdbs := s.dbs\n\tlevels := s.levels\n\ts.mu.Unlock()\n\n\tfor _, db := range dbs {\n\t\tif db.Replica == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, lvl := range levels {\n\t\t\tlevel := strconv.Itoa(lvl.Level)\n\t\t\tlastSuccess := lastValidationSuccessTimestampGaugeVec.WithLabelValues(db.Path(), level)\n\t\t\tsuccess := lastValidationSuccessGaugeVec.WithLabelValues(db.Path(), level)\n\t\t\terrs, err := db.Replica.ValidateLevel(ctx, lvl.Level)\n\t\t\tif err != nil {\n\t\t\t\tvalidationChecksCounterVec.WithLabelValues(db.Path(), level, \"error\").Inc()\n\t\t\t\tsuccess.Set(0)\n\t\t\t\treturn nil, fmt.Errorf(\"validate level %d for %s: %w\", lvl.Level, db.Path(), err)\n\t\t\t}\n\t\t\tif len(errs) \u003e 0 {\n\t\t\t\tvalidationChecksCounterVec.WithLabelValues(db.Path(), level, \"invalid\").Inc()\n\t\t\t\tsuccess.Set(0)\n\t\t\t\tresult.Valid = false\n\t\t\t\tresult.Errors = append(result.Errors, errs...)\n\t\t\t} else {\n\t\t\t\tvalidationChecksCounterVec.WithLabelValues(db.Path(), level, \"success\").Inc()\n\t\t\t\tsuccess.Set(1)\n\t\t\t\tlastSuccess.SetToCurrentTime()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// monitorValidation periodically runs validation checks on all databases.\nfunc (s *Store) monitorValidation(ctx context.Context) {\n\ts.Logger.Info(\"starting validation monitor\", \"interval\", s.ValidationInterval)\n\n\tticker := time.NewTicker(s.ValidationInterval)\n\tdefer ticker.Stop()\n\nLOOP:\n\tfor {\n\t\tselect {\n\t\tcase \u003c-ctx.Done():\n\t\t\tbreak LOOP\n\t\tcase \u003c-ticker.C:\n\t\t}\n\n\t\tresult, err := s.Validate(ctx)\n\t\tif err != nil {\n\t\t\tif isShutdownError(ctx, err) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ts.Logger.Error(\"validation check failed\", \"error\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\tif !result.Valid {\n\t\t\tfor _, verr := range result.Errors {\n\t\t\t\ts.Logger.Warn(\"validation error detected\",\n\t\t\t\t\t\"level\", verr.Level,\n\t\t\t\t\t\"type\", verr.Type,\n\t\t\t\t\t\"message\", verr.Message,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"errors","path":"errors","span":{"start":[5,1],"end":[5,10],"bytes":[40,49]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[50,56]}},{"name":"slog","path":"log/slog","span":{"start":[7,1],"end":[7,12],"bytes":[57,68]}},{"name":"filepath","path":"path/filepath","span":{"start":[8,1],"end":[8,17],"bytes":[69,85]}},{"name":"slices","path":"slices","span":{"start":[9,1],"end":[9,10],"bytes":[86,95]}},{"name":"strconv","path":"strconv","span":{"start":[10,1],"end":[10,11],"bytes":[96,106]}},{"name":"sync","path":"sync","span":{"start":[11,1],"end":[11,8],"bytes":[107,114]}},{"name":"time","path":"time","span":{"start":[12,1],"end":[12,8],"bytes":[115,122]}},{"name":"prometheus","path":"github.com/prometheus/client_golang/prometheus","span":{"start":[14,1],"end":[14,50],"bytes":[124,173]}},{"name":"promauto","path":"github.com/prometheus/client_golang/prometheus/promauto","span":{"start":[15,1],"end":[15,59],"bytes":[174,232]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[16,1],"end":[16,27],"bytes":[233,259]}},{"name":"errgroup","path":"golang.org/x/sync/errgroup","span":{"start":[17,1],"end":[17,30],"bytes":[260,289]}}],"types":{"DBNotReadyError":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.DBNotReadyError","kind":"struct","span":{"start":[62,1],"end":[64,2],"bytes":[2191,2237]},"callables":{"github.com/benbjohnson/litestream.DBNotReadyError.Error":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.DBNotReadyError/github.com/benbjohnson/litestream.DBNotReadyError.Error","kind":"method","span":{"start":[66,1],"end":[71,2],"bytes":[2239,2367]},"signature":"github.com/benbjohnson/litestream.DBNotReadyError.Error","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{}},"github.com/benbjohnson/litestream.DBNotReadyError.Is":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.DBNotReadyError/github.com/benbjohnson/litestream.DBNotReadyError.Is","kind":"method","span":{"start":[73,1],"end":[76,2],"bytes":[2369,2467]},"signature":"github.com/benbjohnson/litestream.DBNotReadyError.Is","parameters":[{"name":"target","type":"error","span":{"start":[73,1],"end":[73,50],"bytes":[2369,2418]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{}}},"fields":{"Reason":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.DBNotReadyError/Reason","kind":"field","type":"string","span":{"start":[63,1],"end":[63,15],"bytes":[2221,2235]}}}},"Store":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store","kind":"struct","span":{"start":[107,1],"end":[156,2],"bytes":[3655,5259]},"callables":{"github.com/benbjohnson/litestream.Store.Close":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Close","kind":"method","span":{"start":[279,1],"end":[302,2],"bytes":[8144,8682]},"signature":"github.com/benbjohnson/litestream.Store.Close","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[279,1],"end":[279,57],"bytes":[8144,8200]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"282:2":{"kind":"call","span":{"start":[282,2],"end":[282,12],"bytes":[8348,8358]},"callee":null},"283:2":{"kind":"call","span":{"start":[283,2],"end":[283,13],"bytes":[8360,8371]},"callee":null},"285:2":{"kind":"call","span":{"start":[285,2],"end":[285,13],"bytes":[8374,8385]},"callee":null},"286:9":{"kind":"call","span":{"start":[286,9],"end":[286,28],"bytes":[8394,8413]},"callee":null},"287:2":{"kind":"call","span":{"start":[287,2],"end":[287,15],"bytes":[8415,8428]},"callee":null},"290:11":{"kind":"call","span":{"start":[290,11],"end":[290,24],"bytes":[8466,8479]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close"},"291:7":{"kind":"call","span":{"start":[291,7],"end":[291,43],"bytes":[8498,8534]},"callee":null},"295:28":{"kind":"call","span":{"start":[295,28],"end":[295,66],"bytes":[8603,8641]},"callee":null}}},"github.com/benbjohnson/litestream.Store.CompactDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","kind":"method","span":{"start":[789,1],"end":[851,2],"bytes":[21386,23217]},"signature":"github.com/benbjohnson/litestream.Store.CompactDB","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[789,1],"end":[789,102],"bytes":[21386,21487]}},{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[789,1],"end":[789,102],"bytes":[21386,21487]}},{"name":"lvl","type":"*github.com/benbjohnson/litestream.CompactionLevel","span":{"start":[789,1],"end":[789,102],"bytes":[21386,21487]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":11},"body":{"791:5":{"kind":"call","span":{"start":[791,5],"end":[791,18],"bytes":[21557,21570]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.PageSize"},"798:22":{"kind":"call","span":{"start":[798,22],"end":[798,54],"bytes":[21771,21803]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/github.com/benbjohnson/litestream.CompactionLevel.PrevCompactionAt"},"798:43":{"kind":"call","span":{"start":[798,43],"end":[798,53],"bytes":[21792,21802]},"callee":null},"799:18":{"kind":"call","span":{"start":[799,18],"end":[799,50],"bytes":[21821,21853]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTXFileInfo"},"801:15":{"kind":"call","span":{"start":[801,15],"end":[801,58],"bytes":[21885,21928]},"callee":null},"802:12":{"kind":"call","span":{"start":[802,12],"end":[802,53],"bytes":[21940,21981]},"callee":null},"808:15":{"kind":"call","span":{"start":[808,15],"end":[808,23],"bytes":[22153,22161]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos"},"810:16":{"kind":"call","span":{"start":[810,16],"end":[810,56],"bytes":[22195,22235]},"callee":null},"816:16":{"kind":"call","span":{"start":[816,16],"end":[816,32],"bytes":[22350,22366]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot"},"820:3":{"kind":"call","span":{"start":[820,3],"end":[820,100],"bytes":[22411,22508]},"callee":null},"820:59":{"kind":"call","span":{"start":[820,59],"end":[820,80],"bytes":[22467,22488]},"callee":null},"825:14":{"kind":"call","span":{"start":[825,14],"end":[825,42],"bytes":[22649,22677]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.PrevLevel"},"826:18":{"kind":"call","span":{"start":[826,18],"end":[826,50],"bytes":[22695,22727]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTXFileInfo"},"828:15":{"kind":"call","span":{"start":[828,15],"end":[828,58],"bytes":[22759,22802]},"callee":null},"836:15":{"kind":"call","span":{"start":[836,15],"end":[836,40],"bytes":[22943,22968]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Compact"},"841:2":{"kind":"call","span":{"start":[841,2],"end":[848,3],"bytes":[23010,23196]},"callee":null},"843:3":{"kind":"call","span":{"start":[843,3],"end":[846,4],"bytes":[23083,23171]},"callee":null},"844:11":{"kind":"call","span":{"start":[844,11],"end":[844,32],"bytes":[23112,23133]},"callee":null},"845:11":{"kind":"call","span":{"start":[845,11],"end":[845,32],"bytes":[23145,23166]},"callee":null}}},"github.com/benbjohnson/litestream.Store.DBs":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","kind":"method","span":{"start":[304,1],"end":[308,2],"bytes":[8684,8777]},"signature":"github.com/benbjohnson/litestream.Store.DBs","parameters":[],"return_type":"[]*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":1},"body":{"305:2":{"kind":"call","span":{"start":[305,2],"end":[305,13],"bytes":[8715,8726]},"callee":null},"306:8":{"kind":"call","span":{"start":[306,8],"end":[306,21],"bytes":[8734,8747]},"callee":null},"307:9":{"kind":"call","span":{"start":[307,9],"end":[307,28],"bytes":[8756,8775]},"callee":null}}},"github.com/benbjohnson/litestream.Store.DisableDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DisableDB","kind":"method","span":{"start":[425,1],"end":[440,2],"bytes":[11706,12053]},"signature":"github.com/benbjohnson/litestream.Store.DisableDB","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[425,1],"end":[425,68],"bytes":[11706,11773]}},{"name":"path","type":"string","span":{"start":[425,1],"end":[425,68],"bytes":[11706,11773]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"426:8":{"kind":"call","span":{"start":[426,8],"end":[426,22],"bytes":[11781,11795]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"428:10":{"kind":"call","span":{"start":[428,10],"end":[428,52],"bytes":[11821,11863]},"callee":null},"431:6":{"kind":"call","span":{"start":[431,6],"end":[431,17],"bytes":[11873,11884]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"432:10":{"kind":"call","span":{"start":[432,10],"end":[432,59],"bytes":[11896,11945]},"callee":null},"435:12":{"kind":"call","span":{"start":[435,12],"end":[435,25],"bytes":[11961,11974]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close"},"436:10":{"kind":"call","span":{"start":[436,10],"end":[436,47],"bytes":[11998,12035]},"callee":null}}},"github.com/benbjohnson/litestream.Store.EnableDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnableDB","kind":"method","span":{"start":[402,1],"end":[422,2],"bytes":[11183,11657]},"signature":"github.com/benbjohnson/litestream.Store.EnableDB","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[402,1],"end":[402,67],"bytes":[11183,11249]}},{"name":"path","type":"string","span":{"start":[402,1],"end":[402,67],"bytes":[11183,11249]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"403:8":{"kind":"call","span":{"start":[403,8],"end":[403,22],"bytes":[11257,11271]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"405:10":{"kind":"call","span":{"start":[405,10],"end":[405,52],"bytes":[11297,11339]},"callee":null},"408:5":{"kind":"call","span":{"start":[408,5],"end":[408,16],"bytes":[11348,11359]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"409:10":{"kind":"call","span":{"start":[409,10],"end":[409,58],"bytes":[11371,11419]},"callee":null},"413:12":{"kind":"call","span":{"start":[413,12],"end":[413,21],"bytes":[11483,11492]},"callee":null},"414:10":{"kind":"call","span":{"start":[414,10],"end":[414,48],"bytes":[11516,11554]},"callee":null},"417:12":{"kind":"call","span":{"start":[417,12],"end":[417,21],"bytes":[11570,11579]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open"},"418:10":{"kind":"call","span":{"start":[418,10],"end":[418,46],"bytes":[11603,11639]},"callee":null}}},"github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention","kind":"method","span":{"start":[855,1],"end":[875,2],"bytes":[23353,24028]},"signature":"github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[855,1],"end":[855,78],"bytes":[23353,23430]}},{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[855,1],"end":[855,78],"bytes":[23353,23430]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"857:26":{"kind":"call","span":{"start":[857,26],"end":[857,96],"bytes":[23502,23572]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention"},"857:59":{"kind":"call","span":{"start":[857,59],"end":[857,69],"bytes":[23535,23545]},"callee":null},"859:10":{"kind":"call","span":{"start":[859,10],"end":[859,59],"bytes":[23599,23648]},"callee":null},"869:13":{"kind":"call","span":{"start":[869,13],"end":[869,71],"bytes":[23868,23926]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceRetentionByTXID"},"870:11":{"kind":"call","span":{"start":[870,11],"end":[870,66],"bytes":[23951,24006]},"callee":null}}},"github.com/benbjohnson/litestream.Store.FindDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","kind":"method","span":{"start":[497,1],"end":[507,2],"bytes":[13675,13838]},"signature":"github.com/benbjohnson/litestream.Store.FindDB","parameters":[{"name":"path","type":"string","span":{"start":[497,1],"end":[497,42],"bytes":[13675,13716]}}],"return_type":"*github.com/benbjohnson/litestream.DB","metrics":{"cyclomatic":3},"body":{"498:2":{"kind":"call","span":{"start":[498,2],"end":[498,13],"bytes":[13718,13729]},"callee":null},"499:8":{"kind":"call","span":{"start":[499,8],"end":[499,21],"bytes":[13737,13750]},"callee":null},"502:6":{"kind":"call","span":{"start":[502,6],"end":[502,15],"bytes":[13785,13794]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"}}},"github.com/benbjohnson/litestream.Store.Open":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open","kind":"method","span":{"start":[187,1],"end":[277,2],"bytes":[6294,8142]},"signature":"github.com/benbjohnson/litestream.Store.Open","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[187,1],"end":[187,50],"bytes":[6294,6343]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":19},"body":{"188:12":{"kind":"call","span":{"start":[188,12],"end":[188,31],"bytes":[6355,6374]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.Validate"},"192:24":{"kind":"call","span":{"start":[192,24],"end":[192,49],"bytes":[6429,6454]},"callee":null},"193:2":{"kind":"call","span":{"start":[193,2],"end":[193,24],"bytes":[6456,6478]},"callee":null},"196:3":{"kind":"call","span":{"start":[196,3],"end":[209,5],"bytes":[6520,6851]},"callee":null},"211:12":{"kind":"call","span":{"start":[211,12],"end":[211,28],"bytes":[6866,6882]},"callee":null},"215:24":{"kind":"call","span":{"start":[215,24],"end":[215,49],"bytes":[6937,6962]},"callee":null},"216:2":{"kind":"call","span":{"start":[216,2],"end":[216,24],"bytes":[6964,6986]},"callee":null},"219:3":{"kind":"call","span":{"start":[219,3],"end":[226,5],"bytes":[7028,7160]},"callee":null},"228:12":{"kind":"call","span":{"start":[228,12],"end":[228,28],"bytes":[7175,7191]},"callee":null},"241:4":{"kind":"call","span":{"start":[241,4],"end":[241,15],"bytes":[7453,7464]},"callee":null},"242:7":{"kind":"call","span":{"start":[242,7],"end":[245,7],"bytes":[7471,7549]},"callee":null,"is_goroutine":true},"249:3":{"kind":"call","span":{"start":[249,3],"end":[249,14],"bytes":[7600,7611]},"callee":null},"250:6":{"kind":"call","span":{"start":[250,6],"end":[253,6],"bytes":[7617,7706]},"callee":null,"is_goroutine":true},"257:3":{"kind":"call","span":{"start":[257,3],"end":[257,14],"bytes":[7771,7782]},"callee":null},"258:6":{"kind":"call","span":{"start":[258,6],"end":[261,6],"bytes":[7788,7854]},"callee":null,"is_goroutine":true},"265:2":{"kind":"call","span":{"start":[265,2],"end":[265,35],"bytes":[7930,7963]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded"},"269:3":{"kind":"call","span":{"start":[269,3],"end":[269,14],"bytes":[8042,8053]},"callee":null},"270:6":{"kind":"call","span":{"start":[270,6],"end":[273,6],"bytes":[8059,8124]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open/github.com/benbjohnson/litestream.Store.Open.closure_1","kind":"function","span":{"start":[196,1],"end":[209,5],"bytes":[6518,6851]},"signature":"github.com/benbjohnson/litestream.Store.Open.closure_1","parameters":[],"return_type":"error","error_channel":["error"],"body":{"198:11":{"kind":"call","span":{"start":[198,11],"end":[198,25],"bytes":[6570,6584]},"callee":null},"199:12":{"kind":"call","span":{"start":[199,12],"end":[199,25],"bytes":[6597,6610]},"callee":null},"204:15":{"kind":"call","span":{"start":[204,15],"end":[204,46],"bytes":[6697,6728]},"callee":null},"205:13":{"kind":"call","span":{"start":[205,13],"end":[205,79],"bytes":[6755,6821]},"callee":null},"205:64":{"kind":"call","span":{"start":[205,64],"end":[205,73],"bytes":[6806,6815]},"callee":null}}},"closure_2":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open/github.com/benbjohnson/litestream.Store.Open.closure_2","kind":"function","span":{"start":[219,1],"end":[226,5],"bytes":[7026,7160]},"signature":"github.com/benbjohnson/litestream.Store.Open.closure_2","parameters":[],"return_type":"error","error_channel":["error"],"body":{"221:11":{"kind":"call","span":{"start":[221,11],"end":[221,25],"bytes":[7078,7092]},"callee":null},"222:12":{"kind":"call","span":{"start":[222,12],"end":[222,25],"bytes":[7105,7118]},"callee":null},"225:11":{"kind":"call","span":{"start":[225,11],"end":[225,20],"bytes":[7146,7155]},"callee":null}}},"closure_3":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open/github.com/benbjohnson/litestream.Store.Open.closure_3","kind":"function","span":{"start":[242,1],"end":[245,7],"bytes":[7465,7549]},"signature":"github.com/benbjohnson/litestream.Store.Open.closure_3","parameters":[],"body":{"243:11":{"kind":"call","span":{"start":[243,11],"end":[243,22],"bytes":[7490,7501]},"callee":null},"244:5":{"kind":"call","span":{"start":[244,5],"end":[244,41],"bytes":[7506,7542]},"callee":null}}},"closure_4":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open/github.com/benbjohnson/litestream.Store.Open.closure_4","kind":"function","span":{"start":[250,1],"end":[253,6],"bytes":[7612,7706]},"signature":"github.com/benbjohnson/litestream.Store.Open.closure_4","parameters":[],"body":{"251:10":{"kind":"call","span":{"start":[251,10],"end":[251,21],"bytes":[7635,7646]},"callee":null},"252:36":{"kind":"call","span":{"start":[252,36],"end":[252,53],"bytes":[7682,7699]},"callee":null},"252:4":{"kind":"call","span":{"start":[252,4],"end":[252,54],"bytes":[7650,7700]},"callee":null}}},"closure_5":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open/github.com/benbjohnson/litestream.Store.Open.closure_5","kind":"function","span":{"start":[258,1],"end":[261,6],"bytes":[7783,7854]},"signature":"github.com/benbjohnson/litestream.Store.Open.closure_5","parameters":[],"body":{"259:10":{"kind":"call","span":{"start":[259,10],"end":[259,21],"bytes":[7806,7817]},"callee":null},"260:4":{"kind":"call","span":{"start":[260,4],"end":[260,31],"bytes":[7821,7848]},"callee":null}}},"closure_6":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open/github.com/benbjohnson/litestream.Store.Open.closure_6","kind":"function","span":{"start":[270,1],"end":[273,6],"bytes":[8054,8124]},"signature":"github.com/benbjohnson/litestream.Store.Open.closure_6","parameters":[],"body":{"271:10":{"kind":"call","span":{"start":[271,10],"end":[271,21],"bytes":[8077,8088]},"callee":null},"272:4":{"kind":"call","span":{"start":[272,4],"end":[272,30],"bytes":[8092,8118]},"callee":null}}}}},"github.com/benbjohnson/litestream.Store.RegisterDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","kind":"method","span":{"start":[311,1],"end":[364,2],"bytes":[8859,10440]},"signature":"github.com/benbjohnson/litestream.Store.RegisterDB","parameters":[{"name":"db","type":"*github.com/benbjohnson/litestream.DB","span":{"start":[311,1],"end":[311,43],"bytes":[8859,8901]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"313:10":{"kind":"call","span":{"start":[313,10],"end":[313,35],"bytes":[8927,8952]},"callee":null},"317:2":{"kind":"call","span":{"start":[317,2],"end":[317,13],"bytes":[9006,9017]},"callee":null},"319:25":{"kind":"call","span":{"start":[319,25],"end":[319,34],"bytes":[9076,9085]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"319:6":{"kind":"call","span":{"start":[319,6],"end":[319,21],"bytes":[9057,9072]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"320:4":{"kind":"call","span":{"start":[320,4],"end":[320,17],"bytes":[9091,9104]},"callee":null},"324:2":{"kind":"call","span":{"start":[324,2],"end":[324,15],"bytes":[9127,9140]},"callee":null},"327:15":{"kind":"call","span":{"start":[327,15],"end":[327,64],"bytes":[9215,9264]},"callee":null},"327:2":{"kind":"call","span":{"start":[327,2],"end":[327,65],"bytes":[9202,9265]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetLogger"},"327:39":{"kind":"call","span":{"start":[327,39],"end":[327,63],"bytes":[9239,9263]},"callee":null},"327:53":{"kind":"call","span":{"start":[327,53],"end":[327,62],"bytes":[9253,9262]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"337:12":{"kind":"call","span":{"start":[337,12],"end":[337,21],"bytes":[9656,9665]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint"},"338:10":{"kind":"call","span":{"start":[338,10],"end":[338,40],"bytes":[9689,9719]},"callee":null},"343:2":{"kind":"call","span":{"start":[343,2],"end":[343,13],"bytes":[9876,9887]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON"},"346:25":{"kind":"call","span":{"start":[346,25],"end":[346,34],"bytes":[9947,9956]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"346:6":{"kind":"call","span":{"start":[346,6],"end":[346,21],"bytes":[9928,9943]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"349:4":{"kind":"call","span":{"start":[349,4],"end":[349,17],"bytes":[10092,10105]},"callee":null},"350:14":{"kind":"call","span":{"start":[350,14],"end":[350,44],"bytes":[10119,10149]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close"},"350:23":{"kind":"call","span":{"start":[350,23],"end":[350,43],"bytes":[10128,10148]},"callee":null},"351:5":{"kind":"call","span":{"start":[351,5],"end":[351,75],"bytes":[10168,10238]},"callee":null},"351:51":{"kind":"call","span":{"start":[351,51],"end":[351,60],"bytes":[10214,10223]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"357:10":{"kind":"call","span":{"start":[357,10],"end":[357,27],"bytes":[10275,10292]},"callee":null},"358:2":{"kind":"call","span":{"start":[358,2],"end":[358,15],"bytes":[10294,10307]},"callee":null},"361:2":{"kind":"call","span":{"start":[361,2],"end":[361,35],"bytes":[10392,10425]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded"}}},"github.com/benbjohnson/litestream.Store.SetDone":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetDone","kind":"method","span":{"start":[522,1],"end":[529,2],"bytes":[14229,14375]},"signature":"github.com/benbjohnson/litestream.Store.SetDone","parameters":[{"name":"done","type":"\u003c-chan struct{}","span":{"start":[522,1],"end":[522,48],"bytes":[14229,14276]}}],"metrics":{"cyclomatic":2},"body":{"523:2":{"kind":"call","span":{"start":[523,2],"end":[523,13],"bytes":[14278,14289]},"callee":null},"524:8":{"kind":"call","span":{"start":[524,8],"end":[524,21],"bytes":[14297,14310]},"callee":null}}},"github.com/benbjohnson/litestream.Store.SetL0Retention":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetL0Retention","kind":"method","span":{"start":[511,1],"end":[518,2],"bytes":[13947,14103]},"signature":"github.com/benbjohnson/litestream.Store.SetL0Retention","parameters":[{"name":"d","type":"time.Duration","span":{"start":[511,1],"end":[511,50],"bytes":[13947,13996]}}],"metrics":{"cyclomatic":2},"body":{"512:2":{"kind":"call","span":{"start":[512,2],"end":[512,13],"bytes":[13998,14009]},"callee":null},"513:8":{"kind":"call","span":{"start":[513,8],"end":[513,21],"bytes":[14017,14030]},"callee":null}}},"github.com/benbjohnson/litestream.Store.SetRetentionEnabled":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetRetentionEnabled","kind":"method","span":{"start":[565,1],"end":[573,2],"bytes":[15265,15463]},"signature":"github.com/benbjohnson/litestream.Store.SetRetentionEnabled","parameters":[{"name":"v","type":"bool","span":{"start":[565,1],"end":[565,46],"bytes":[15265,15310]}}],"metrics":{"cyclomatic":2},"body":{"566:2":{"kind":"call","span":{"start":[566,2],"end":[566,13],"bytes":[15312,15323]},"callee":null},"567:8":{"kind":"call","span":{"start":[567,8],"end":[567,21],"bytes":[15331,15344]},"callee":null}}},"github.com/benbjohnson/litestream.Store.SetShutdownSyncInterval":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetShutdownSyncInterval","kind":"method","span":{"start":[544,1],"end":[551,2],"bytes":[14775,14958]},"signature":"github.com/benbjohnson/litestream.Store.SetShutdownSyncInterval","parameters":[{"name":"d","type":"time.Duration","span":{"start":[544,1],"end":[544,59],"bytes":[14775,14833]}}],"metrics":{"cyclomatic":2},"body":{"545:2":{"kind":"call","span":{"start":[545,2],"end":[545,13],"bytes":[14835,14846]},"callee":null},"546:8":{"kind":"call","span":{"start":[546,8],"end":[546,21],"bytes":[14854,14867]},"callee":null}}},"github.com/benbjohnson/litestream.Store.SetShutdownSyncTimeout":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetShutdownSyncTimeout","kind":"method","span":{"start":[533,1],"end":[540,2],"bytes":[14484,14664]},"signature":"github.com/benbjohnson/litestream.Store.SetShutdownSyncTimeout","parameters":[{"name":"d","type":"time.Duration","span":{"start":[533,1],"end":[533,58],"bytes":[14484,14541]}}],"metrics":{"cyclomatic":2},"body":{"534:2":{"kind":"call","span":{"start":[534,2],"end":[534,13],"bytes":[14543,14554]},"callee":null},"535:8":{"kind":"call","span":{"start":[535,8],"end":[535,21],"bytes":[14562,14575]},"callee":null}}},"github.com/benbjohnson/litestream.Store.SetVerifyCompaction":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetVerifyCompaction","kind":"method","span":{"start":[555,1],"end":[563,2],"bytes":[15065,15263]},"signature":"github.com/benbjohnson/litestream.Store.SetVerifyCompaction","parameters":[{"name":"v","type":"bool","span":{"start":[555,1],"end":[555,46],"bytes":[15065,15110]}}],"metrics":{"cyclomatic":2},"body":{"556:2":{"kind":"call","span":{"start":[556,2],"end":[556,13],"bytes":[15112,15123]},"callee":null},"557:8":{"kind":"call","span":{"start":[557,8],"end":[557,21],"bytes":[15131,15144]},"callee":null}}},"github.com/benbjohnson/litestream.Store.SnapshotLevel":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SnapshotLevel","kind":"method","span":{"start":[576,1],"end":[581,2],"bytes":[15544,15684]},"signature":"github.com/benbjohnson/litestream.Store.SnapshotLevel","parameters":[],"return_type":"*github.com/benbjohnson/litestream.CompactionLevel","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.Store.SyncDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","kind":"method","span":{"start":[454,1],"end":[494,2],"bytes":[12569,13621]},"signature":"github.com/benbjohnson/litestream.Store.SyncDB","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[454,1],"end":[454,92],"bytes":[12569,12660]}},{"name":"path","type":"string","span":{"start":[454,1],"end":[454,92],"bytes":[12569,12660]}},{"name":"wait","type":"bool","span":{"start":[454,1],"end":[454,92],"bytes":[12569,12660]}}],"return_type":"(github.com/benbjohnson/litestream.SyncDBResult, error)","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"455:8":{"kind":"call","span":{"start":[455,8],"end":[455,22],"bytes":[12668,12682]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB"},"457:26":{"kind":"call","span":{"start":[457,26],"end":[457,73],"bytes":[12724,12771]},"callee":null},"460:6":{"kind":"call","span":{"start":[460,6],"end":[460,17],"bytes":[12781,12792]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"461:26":{"kind":"call","span":{"start":[461,26],"end":[461,72],"bytes":[12820,12866]},"callee":null},"464:24":{"kind":"call","span":{"start":[464,24],"end":[464,35],"bytes":[12894,12905]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX"},"466:26":{"kind":"call","span":{"start":[466,26],"end":[466,74],"bytes":[12948,12996]},"callee":null},"470:13":{"kind":"call","span":{"start":[470,13],"end":[470,32],"bytes":[13024,13043]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncAndWait"},"471:27":{"kind":"call","span":{"start":[471,27],"end":[471,63],"bytes":[13084,13120]},"callee":null},"474:13":{"kind":"call","span":{"start":[474,13],"end":[474,25],"bytes":[13147,13159]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync"},"475:27":{"kind":"call","span":{"start":[475,27],"end":[475,63],"bytes":[13200,13236]},"callee":null},"479:23":{"kind":"call","span":{"start":[479,23],"end":[479,34],"bytes":[13267,13278]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX"},"481:26":{"kind":"call","span":{"start":[481,26],"end":[481,73],"bytes":[13321,13368]},"callee":null},"486:20":{"kind":"call","span":{"start":[486,20],"end":[486,49],"bytes":[13443,13472]},"callee":null},"486:27":{"kind":"call","span":{"start":[486,27],"end":[486,43],"bytes":[13450,13466]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos"},"490:19":{"kind":"call","span":{"start":[490,19],"end":[490,36],"bytes":[13517,13534]},"callee":null}}},"github.com/benbjohnson/litestream.Store.UnregisterDB":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB","kind":"method","span":{"start":[367,1],"end":[397,2],"bytes":[10524,11007]},"signature":"github.com/benbjohnson/litestream.Store.UnregisterDB","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[367,1],"end":[367,71],"bytes":[10524,10594]}},{"name":"path","type":"string","span":{"start":[367,1],"end":[367,71],"bytes":[10524,10594]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"369:10":{"kind":"call","span":{"start":[369,10],"end":[369,40],"bytes":[10621,10651]},"callee":null},"372:2":{"kind":"call","span":{"start":[372,2],"end":[372,13],"bytes":[10657,10668]},"callee":null},"377:6":{"kind":"call","span":{"start":[377,6],"end":[377,21],"bytes":[10732,10747]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"385:3":{"kind":"call","span":{"start":[385,3],"end":[385,16],"bytes":[10821,10834]},"callee":null},"389:10":{"kind":"call","span":{"start":[389,10],"end":[389,42],"bytes":[10861,10893]},"callee":null},"390:2":{"kind":"call","span":{"start":[390,2],"end":[390,15],"bytes":[10895,10908]},"callee":null},"392:12":{"kind":"call","span":{"start":[392,12],"end":[392,25],"bytes":[10921,10934]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close"},"393:10":{"kind":"call","span":{"start":[393,10],"end":[393,41],"bytes":[10958,10989]},"callee":null}}},"github.com/benbjohnson/litestream.Store.Validate":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Validate","kind":"method","span":{"start":[885,1],"end":[922,2],"bytes":[24379,25511]},"signature":"github.com/benbjohnson/litestream.Store.Validate","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[885,1],"end":[885,75],"bytes":[24379,24453]}}],"return_type":"(*github.com/benbjohnson/litestream.ValidationResult, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"888:2":{"kind":"call","span":{"start":[888,2],"end":[888,13],"bytes":[24498,24509]},"callee":null},"891:2":{"kind":"call","span":{"start":[891,2],"end":[891,15],"bytes":[24545,24558]},"callee":null},"899:13":{"kind":"call","span":{"start":[899,13],"end":[899,36],"bytes":[24671,24694]},"callee":null},"900:19":{"kind":"call","span":{"start":[900,19],"end":[900,91],"bytes":[24713,24785]},"callee":null},"900:74":{"kind":"call","span":{"start":[900,74],"end":[900,83],"bytes":[24768,24777]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"901:15":{"kind":"call","span":{"start":[901,15],"end":[901,78],"bytes":[24800,24863]},"callee":null},"901:61":{"kind":"call","span":{"start":[901,61],"end":[901,70],"bytes":[24846,24855]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"902:17":{"kind":"call","span":{"start":[902,17],"end":[902,57],"bytes":[24880,24920]},"callee":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.ValidateLevel"},"904:48":{"kind":"call","span":{"start":[904,48],"end":[904,57],"bytes":[24987,24996]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"904:5":{"kind":"call","span":{"start":[904,5],"end":[904,74],"bytes":[24944,25013]},"callee":null},"905:5":{"kind":"call","span":{"start":[905,5],"end":[905,19],"bytes":[25024,25038]},"callee":null},"906:17":{"kind":"call","span":{"start":[906,17],"end":[906,86],"bytes":[25055,25124]},"callee":null},"906:71":{"kind":"call","span":{"start":[906,71],"end":[906,80],"bytes":[25109,25118]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"908:7":{"kind":"call","span":{"start":[908,7],"end":[908,16],"bytes":[25136,25145]},"callee":null},"909:48":{"kind":"call","span":{"start":[909,48],"end":[909,57],"bytes":[25199,25208]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"909:5":{"kind":"call","span":{"start":[909,5],"end":[909,76],"bytes":[25156,25227]},"callee":null},"910:5":{"kind":"call","span":{"start":[910,5],"end":[910,19],"bytes":[25238,25252]},"callee":null},"912:21":{"kind":"call","span":{"start":[912,21],"end":[912,51],"bytes":[25298,25328]},"callee":null},"914:48":{"kind":"call","span":{"start":[914,48],"end":[914,57],"bytes":[25388,25397]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"914:5":{"kind":"call","span":{"start":[914,5],"end":[914,76],"bytes":[25345,25416]},"callee":null},"915:5":{"kind":"call","span":{"start":[915,5],"end":[915,19],"bytes":[25427,25441]},"callee":null},"916:5":{"kind":"call","span":{"start":[916,5],"end":[916,35],"bytes":[25446,25476]},"callee":null}}},"github.com/benbjohnson/litestream.Store.allDatabasesHealthy":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.allDatabasesHealthy","kind":"method","span":{"start":[767,1],"end":[785,2],"bytes":[20810,21184]},"signature":"github.com/benbjohnson/litestream.Store.allDatabasesHealthy","parameters":[{"name":"since","type":"time.Time","span":{"start":[767,1],"end":[767,60],"bytes":[20810,20869]}}],"return_type":"bool","metrics":{"cyclomatic":5},"body":{"768:9":{"kind":"call","span":{"start":[768,9],"end":[768,16],"bytes":[20878,20885]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"769:5":{"kind":"call","span":{"start":[769,5],"end":[769,13],"bytes":[20890,20898]},"callee":null},"775:7":{"kind":"call","span":{"start":[775,7],"end":[775,18],"bytes":[20976,20987]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"779:15":{"kind":"call","span":{"start":[779,15],"end":[779,40],"bytes":[21058,21083]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt"},"780:27":{"kind":"call","span":{"start":[780,27],"end":[780,49],"bytes":[21110,21132]},"callee":null},"780:6":{"kind":"call","span":{"start":[780,6],"end":[780,23],"bytes":[21089,21106]},"callee":null}}},"github.com/benbjohnson/litestream.Store.hasHeartbeatConfigLocked":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.hasHeartbeatConfigLocked","kind":"method","span":{"start":[706,1],"end":[708,2],"bytes":[18987,19090]},"signature":"github.com/benbjohnson/litestream.Store.hasHeartbeatConfigLocked","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.Store.monitorCompactionLevel":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","kind":"method","span":{"start":[583,1],"end":[648,2],"bytes":[15686,17683]},"signature":"github.com/benbjohnson/litestream.Store.monitorCompactionLevel","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[583,1],"end":[583,84],"bytes":[15686,15769]}},{"name":"lvl","type":"*github.com/benbjohnson/litestream.CompactionLevel","span":{"start":[583,1],"end":[583,84],"bytes":[15686,15769]}}],"metrics":{"cyclomatic":17},"body":{"584:2":{"kind":"call","span":{"start":[584,2],"end":[584,92],"bytes":[15771,15861]},"callee":null},"587:11":{"kind":"call","span":{"start":[587,11],"end":[587,41],"bytes":[15903,15933]},"callee":null},"588:8":{"kind":"call","span":{"start":[588,8],"end":[588,20],"bytes":[15941,15953]},"callee":null},"592:10":{"kind":"call","span":{"start":[592,10],"end":[592,20],"bytes":[15982,15992]},"callee":null},"598:10":{"kind":"call","span":{"start":[598,10],"end":[598,20],"bytes":[16050,16060]},"callee":null},"599:16":{"kind":"call","span":{"start":[599,16],"end":[599,53],"bytes":[16076,16113]},"callee":null},"599:27":{"kind":"call","span":{"start":[599,27],"end":[599,52],"bytes":[16087,16112]},"callee":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/github.com/benbjohnson/litestream.CompactionLevel.NextCompactionAt"},"603:22":{"kind":"call","span":{"start":[603,22],"end":[603,29],"bytes":[16164,16171]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"604:8":{"kind":"call","span":{"start":[604,8],"end":[604,19],"bytes":[16181,16192]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen"},"607:14":{"kind":"call","span":{"start":[607,14],"end":[607,39],"bytes":[16247,16272]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB"},"609:42":{"kind":"call","span":{"start":[609,42],"end":[609,79],"bytes":[16326,16363]},"callee":null},"609:9":{"kind":"call","span":{"start":[609,9],"end":[609,40],"bytes":[16293,16324]},"callee":null},"610:5":{"kind":"call","span":{"start":[610,5],"end":[610,76],"bytes":[16369,16440]},"callee":null},"610:66":{"kind":"call","span":{"start":[610,66],"end":[610,75],"bytes":[16430,16439]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"611:9":{"kind":"call","span":{"start":[611,9],"end":[611,38],"bytes":[16449,16478]},"callee":null},"612:5":{"kind":"call","span":{"start":[612,5],"end":[612,99],"bytes":[16484,16578]},"callee":null},"612:75":{"kind":"call","span":{"start":[612,75],"end":[612,84],"bytes":[16554,16563]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"613:19":{"kind":"call","span":{"start":[613,19],"end":[613,49],"bytes":[16597,16627]},"callee":null},"613:39":{"kind":"call","span":{"start":[613,39],"end":[613,48],"bytes":[16617,16626]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"614:24":{"kind":"call","span":{"start":[614,24],"end":[614,49],"bytes":[16651,16676]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"615:5":{"kind":"call","span":{"start":[615,5],"end":[615,75],"bytes":[16682,16752]},"callee":null},"619:15":{"kind":"call","span":{"start":[619,15],"end":[619,50],"bytes":[16808,16843]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention"},"619:67":{"kind":"call","span":{"start":[619,67],"end":[619,92],"bytes":[16860,16885]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"620:6":{"kind":"call","span":{"start":[620,6],"end":[620,67],"bytes":[16893,16954]},"callee":null},"625:16":{"kind":"call","span":{"start":[625,16],"end":[625,38],"bytes":[16986,17008]},"callee":null},"625:42":{"kind":"call","span":{"start":[625,42],"end":[625,66],"bytes":[17012,17036]},"callee":null},"626:6":{"kind":"call","span":{"start":[626,6],"end":[626,22],"bytes":[17042,17058]},"callee":null},"627:7":{"kind":"call","span":{"start":[627,7],"end":[627,29],"bytes":[17084,17106]},"callee":null},"628:21":{"kind":"call","span":{"start":[628,21],"end":[628,50],"bytes":[17129,17158]},"callee":null},"631:4":{"kind":"call","span":{"start":[631,4],"end":[631,74],"bytes":[17194,17264]},"callee":null},"634:5":{"kind":"call","span":{"start":[634,5],"end":[638,131],"bytes":[17297,17570]},"callee":null},"646:3":{"kind":"call","span":{"start":[646,3],"end":[646,25],"bytes":[17656,17678]},"callee":null}}},"github.com/benbjohnson/litestream.Store.monitorHeartbeats":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorHeartbeats","kind":"method","span":{"start":[713,1],"end":[729,2],"bytes":[19279,19612]},"signature":"github.com/benbjohnson/litestream.Store.monitorHeartbeats","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[713,1],"end":[713,57],"bytes":[19279,19335]}}],"metrics":{"cyclomatic":5},"body":{"714:2":{"kind":"call","span":{"start":[714,2],"end":[714,83],"bytes":[19337,19418]},"callee":null},"716:12":{"kind":"call","span":{"start":[716,12],"end":[716,52],"bytes":[19431,19471]},"callee":null},"717:8":{"kind":"call","span":{"start":[717,8],"end":[717,21],"bytes":[19479,19492]},"callee":null},"722:10":{"kind":"call","span":{"start":[722,10],"end":[722,20],"bytes":[19527,19537]},"callee":null},"727:3":{"kind":"call","span":{"start":[727,3],"end":[727,31],"bytes":[19579,19607]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded"}}},"github.com/benbjohnson/litestream.Store.monitorL0Retention":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorL0Retention","kind":"method","span":{"start":[650,1],"end":[676,2],"bytes":[17685,18326]},"signature":"github.com/benbjohnson/litestream.Store.monitorL0Retention","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[650,1],"end":[650,58],"bytes":[17685,17742]}}],"metrics":{"cyclomatic":9},"body":{"651:2":{"kind":"call","span":{"start":[651,2],"end":[651,116],"bytes":[17744,17858]},"callee":null},"653:12":{"kind":"call","span":{"start":[653,12],"end":[653,54],"bytes":[17871,17913]},"callee":null},"654:8":{"kind":"call","span":{"start":[654,8],"end":[654,21],"bytes":[17921,17934]},"callee":null},"659:10":{"kind":"call","span":{"start":[659,10],"end":[659,20],"bytes":[17969,17979]},"callee":null},"664:22":{"kind":"call","span":{"start":[664,22],"end":[664,29],"bytes":[18040,18047]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs"},"665:8":{"kind":"call","span":{"start":[665,8],"end":[665,19],"bytes":[18057,18068]},"callee":null},"668:14":{"kind":"call","span":{"start":[668,14],"end":[668,46],"bytes":[18123,18155]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime"},"669:8":{"kind":"call","span":{"start":[669,8],"end":[669,33],"bytes":[18177,18202]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"672:5":{"kind":"call","span":{"start":[672,5],"end":[672,88],"bytes":[18229,18312]},"callee":null},"672:64":{"kind":"call","span":{"start":[672,64],"end":[672,73],"bytes":[18288,18297]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"}}},"github.com/benbjohnson/litestream.Store.monitorValidation":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorValidation","kind":"method","span":{"start":[925,1],"end":[958,2],"bytes":[25588,26265]},"signature":"github.com/benbjohnson/litestream.Store.monitorValidation","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[925,1],"end":[925,57],"bytes":[25588,25644]}}],"metrics":{"cyclomatic":9},"body":{"926:2":{"kind":"call","span":{"start":[926,2],"end":[926,80],"bytes":[25646,25724]},"callee":null},"928:12":{"kind":"call","span":{"start":[928,12],"end":[928,48],"bytes":[25737,25773]},"callee":null},"929:8":{"kind":"call","span":{"start":[929,8],"end":[929,21],"bytes":[25781,25794]},"callee":null},"934:10":{"kind":"call","span":{"start":[934,10],"end":[934,20],"bytes":[25829,25839]},"callee":null},"939:18":{"kind":"call","span":{"start":[939,18],"end":[939,33],"bytes":[25896,25911]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Validate"},"941:7":{"kind":"call","span":{"start":[941,7],"end":[941,32],"bytes":[25936,25961]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError"},"944:4":{"kind":"call","span":{"start":[944,4],"end":[944,59],"bytes":[25985,26040]},"callee":null},"950:5":{"kind":"call","span":{"start":[950,5],"end":[954,6],"bytes":[26123,26251]},"callee":null}}},"github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","kind":"method","span":{"start":[735,1],"end":[763,2],"bytes":[19838,20640]},"signature":"github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[735,1],"end":[735,61],"bytes":[19838,19898]}}],"metrics":{"cyclomatic":5},"body":{"741:6":{"kind":"call","span":{"start":[741,6],"end":[741,21],"bytes":[19968,19983]},"callee":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.ShouldPing"},"747:18":{"kind":"call","span":{"start":[747,18],"end":[747,28],"bytes":[20165,20175]},"callee":null},"748:6":{"kind":"call","span":{"start":[748,6],"end":[748,41],"bytes":[20199,20234]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.allDatabasesHealthy"},"755:2":{"kind":"call","span":{"start":[755,2],"end":[755,17],"bytes":[20446,20461]},"callee":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.RecordPing"},"757:12":{"kind":"call","span":{"start":[757,12],"end":[757,24],"bytes":[20474,20486]},"callee":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.Ping"},"758:3":{"kind":"call","span":{"start":[758,3],"end":[758,71],"bytes":[20503,20571]},"callee":null},"762:2":{"kind":"call","span":{"start":[762,2],"end":[762,54],"bytes":[20586,20638]},"callee":null}}},"github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded","kind":"method","span":{"start":[682,1],"end":[702,2],"bytes":[18528,18869]},"signature":"github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded","parameters":[],"metrics":{"cyclomatic":4},"body":{"683:2":{"kind":"call","span":{"start":[683,2],"end":[683,13],"bytes":[18579,18590]},"callee":null},"684:8":{"kind":"call","span":{"start":[684,8],"end":[684,21],"bytes":[18598,18611]},"callee":null},"692:6":{"kind":"call","span":{"start":[692,6],"end":[692,34],"bytes":[18710,18738]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.hasHeartbeatConfigLocked"},"697:2":{"kind":"call","span":{"start":[697,2],"end":[697,13],"bytes":[18789,18800]},"callee":null},"698:5":{"kind":"call","span":{"start":[698,5],"end":[701,5],"bytes":[18805,18867]},"callee":null,"is_goroutine":true}},"callables":{"closure_1":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded.closure_1","kind":"function","span":{"start":[698,1],"end":[701,5],"bytes":[18801,18867]},"signature":"github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded.closure_1","parameters":[],"body":{"699:9":{"kind":"call","span":{"start":[699,9],"end":[699,20],"bytes":[18822,18833]},"callee":null},"700:3":{"kind":"call","span":{"start":[700,3],"end":[700,29],"bytes":[18836,18862]},"callee":null}}}}}},"fields":{"CompactionMonitorEnabled":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/CompactionMonitorEnabled","kind":"field","type":"bool","span":{"start":[128,1],"end":[128,31],"bytes":[4255,4285]}},"Heartbeat":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/Heartbeat","kind":"field","type":"*github.com/benbjohnson/litestream.HeartbeatClient","span":{"start":[147,1],"end":[147,28],"bytes":[4980,5007]}},"HeartbeatCheckInterval":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/HeartbeatCheckInterval","kind":"field","type":"time.Duration","span":{"start":[143,1],"end":[143,38],"bytes":[4800,4837]}},"L0Retention":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/L0Retention","kind":"field","type":"time.Duration","span":{"start":[123,1],"end":[123,27],"bytes":[4061,4087]}},"L0RetentionCheckInterval":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/L0RetentionCheckInterval","kind":"field","type":"time.Duration","span":{"start":[125,1],"end":[125,40],"bytes":[4133,4172]}},"Logger":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/Logger","kind":"field","type":"*log/slog.Logger","span":{"start":[155,1],"end":[155,21],"bytes":[5237,5257]}},"RetentionEnabled":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/RetentionEnabled","kind":"field","type":"bool","span":{"start":[136,1],"end":[136,23],"bytes":[4611,4633]}},"ShutdownSyncInterval":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/ShutdownSyncInterval","kind":"field","type":"time.Duration","span":{"start":[140,1],"end":[140,36],"bytes":[4705,4740]}},"ShutdownSyncTimeout":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/ShutdownSyncTimeout","kind":"field","type":"time.Duration","span":{"start":[139,1],"end":[139,36],"bytes":[4669,4704]}},"SnapshotInterval":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/SnapshotInterval","kind":"field","type":"time.Duration","span":{"start":[118,1],"end":[118,32],"bytes":[3853,3884]}},"SnapshotRetention":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/SnapshotRetention","kind":"field","type":"time.Duration","span":{"start":[120,1],"end":[120,33],"bytes":[3956,3988]}},"ValidationInterval":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/ValidationInterval","kind":"field","type":"time.Duration","span":{"start":[153,1],"end":[153,34],"bytes":[5202,5235]}},"VerifyCompaction":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/VerifyCompaction","kind":"field","type":"bool","span":{"start":[131,1],"end":[131,23],"bytes":[4368,4390]}},"cancel":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/cancel","kind":"field","type":"func()","span":{"start":[114,1],"end":[114,15],"bytes":[3781,3795]}},"ctx":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/ctx","kind":"field","type":"context.Context","span":{"start":[113,1],"end":[113,24],"bytes":[3757,3780]}},"dbs":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/dbs","kind":"field","type":"[]*github.com/benbjohnson/litestream.DB","span":{"start":[109,1],"end":[109,14],"bytes":[3694,3707]}},"done":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/done","kind":"field","type":"\u003c-chan struct{}","span":{"start":[115,1],"end":[115,24],"bytes":[3796,3819]}},"heartbeatMonitorRunning":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/heartbeatMonitorRunning","kind":"field","type":"bool","span":{"start":[150,1],"end":[150,30],"bytes":[5096,5125]}},"levels":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/levels","kind":"field","type":"github.com/benbjohnson/litestream.CompactionLevels","span":{"start":[110,1],"end":[110,25],"bytes":[3708,3732]}},"mu":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/mu","kind":"field","type":"sync.Mutex","span":{"start":[108,1],"end":[108,19],"bytes":[3675,3693]}},"wg":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/wg","kind":"field","type":"sync.WaitGroup","span":{"start":[112,1],"end":[112,23],"bytes":[3734,3756]}}}},"SyncDBResult":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.SyncDBResult","kind":"struct","span":{"start":[443,1],"end":[447,2],"bytes":[12109,12204]},"callables":{},"fields":{"Changed":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.SyncDBResult/Changed","kind":"field","type":"bool","span":{"start":[446,1],"end":[446,21],"bytes":[12182,12202]}},"ReplicatedTXID":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.SyncDBResult/ReplicatedTXID","kind":"field","type":"uint64","span":{"start":[445,1],"end":[445,23],"bytes":[12159,12181]}},"TXID":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.SyncDBResult/TXID","kind":"field","type":"uint64","span":{"start":[444,1],"end":[444,23],"bytes":[12136,12158]}}}},"ValidationResult":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.ValidationResult","kind":"struct","span":{"start":[878,1],"end":[881,2],"bytes":[24104,24235]},"callables":{},"fields":{"Errors":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.ValidationResult/Errors","kind":"field","type":"[]github.com/benbjohnson/litestream.ValidationError","span":{"start":[880,1],"end":[880,46],"bytes":[24188,24233]}},"Valid":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.ValidationResult/Valid","kind":"field","type":"bool","span":{"start":[879,1],"end":[879,53],"bytes":[24135,24187]}}}}},"functions":{"github.com/benbjohnson/litestream.NewStore":{"id":"can://go/litestream/store.go/github.com/benbjohnson/litestream.NewStore","kind":"function","span":{"start":[158,1],"end":[185,2],"bytes":[5261,6292]},"signature":"github.com/benbjohnson/litestream.NewStore","parameters":[{"name":"dbs","type":"[]*github.com/benbjohnson/litestream.DB","span":{"start":[158,1],"end":[158,59],"bytes":[5261,5319]}},{"name":"levels","type":"github.com/benbjohnson/litestream.CompactionLevels","span":{"start":[158,1],"end":[158,59],"bytes":[5261,5319]}}],"return_type":"*github.com/benbjohnson/litestream.Store","metrics":{"cyclomatic":2},"body":{"172:29":{"kind":"call","span":{"start":[172,29],"end":[172,43],"bytes":[5852,5866]},"callee":null},"176:16":{"kind":"call","span":{"start":[176,16],"end":[176,65],"bytes":[5948,5997]},"callee":null},"176:3":{"kind":"call","span":{"start":[176,3],"end":[176,66],"bytes":[5935,5998]},"callee":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError"},"176:40":{"kind":"call","span":{"start":[176,40],"end":[176,64],"bytes":[5972,5996]},"callee":null},"176:54":{"kind":"call","span":{"start":[176,54],"end":[176,63],"bytes":[5986,5995]},"callee":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path"},"183:20":{"kind":"call","span":{"start":[183,20],"end":[183,60],"bytes":[6240,6280]},"callee":null},"183:39":{"kind":"call","span":{"start":[183,39],"end":[183,59],"bytes":[6259,6279]},"callee":null}}}},"content_hash":"ebb3c05192c82c74a49e88667d7b47c61959023edf56d51b1d552976bc44341e"},"v3.go":{"id":"can://go/litestream/v3.go","kind":"module","span":{"start":[1,1],"end":[176,1],"bytes":[0,5940]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// PosV3 represents a position in a v0.3.x backup.\ntype PosV3 struct {\n\tGeneration string // 16-char hex string\n\tIndex int // WAL index\n\tOffset int64 // Offset within WAL segment\n}\n\n// IsZero returns true if the position is the zero value.\nfunc (p PosV3) IsZero() bool {\n\treturn p == (PosV3{})\n}\n\n// String returns a string representation of the position.\nfunc (p PosV3) String() string {\n\tif p.IsZero() {\n\t\treturn \"\"\n\t}\n\treturn fmt.Sprintf(\"%s/%08x:%016x\", p.Generation, p.Index, p.Offset)\n}\n\n// SnapshotInfoV3 contains metadata about a v0.3.x snapshot.\ntype SnapshotInfoV3 struct {\n\tGeneration string\n\tIndex int\n\tSize int64\n\tCreatedAt time.Time\n}\n\n// Pos returns the position of this snapshot.\nfunc (info SnapshotInfoV3) Pos() PosV3 {\n\treturn PosV3{Generation: info.Generation, Index: info.Index, Offset: 0}\n}\n\n// WALSegmentInfoV3 contains metadata about a v0.3.x WAL segment.\ntype WALSegmentInfoV3 struct {\n\tGeneration string\n\tIndex int\n\tOffset int64\n\tSize int64\n\tCreatedAt time.Time\n}\n\n// Pos returns the position of this WAL segment.\nfunc (info WALSegmentInfoV3) Pos() PosV3 {\n\treturn PosV3{Generation: info.Generation, Index: info.Index, Offset: info.Offset}\n}\n\n// v0.3.x path constants.\nconst (\n\tGenerationsDirV3 = \"generations\"\n\tSnapshotsDirV3 = \"snapshots\"\n\tWALDirV3 = \"wal\"\n)\n\n// GenerationsPathV3 returns the path to the generations directory.\nfunc GenerationsPathV3(root string) string {\n\treturn path.Join(root, GenerationsDirV3)\n}\n\n// GenerationPathV3 returns the path to a specific generation.\nfunc GenerationPathV3(root, generation string) string {\n\treturn path.Join(root, GenerationsDirV3, generation)\n}\n\n// SnapshotsPathV3 returns the path to snapshots within a generation.\nfunc SnapshotsPathV3(root, generation string) string {\n\treturn path.Join(root, GenerationsDirV3, generation, SnapshotsDirV3)\n}\n\n// WALPathV3 returns the path to WAL segments within a generation.\nfunc WALPathV3(root, generation string) string {\n\treturn path.Join(root, GenerationsDirV3, generation, WALDirV3)\n}\n\n// SnapshotPathV3 returns the full path to a v0.3.x snapshot file.\nfunc SnapshotPathV3(root, generation string, index int) string {\n\treturn path.Join(SnapshotsPathV3(root, generation), FormatSnapshotFilenameV3(index))\n}\n\n// WALSegmentPathV3 returns the full path to a v0.3.x WAL segment file.\nfunc WALSegmentPathV3(root, generation string, index int, offset int64) string {\n\treturn path.Join(WALPathV3(root, generation), FormatWALSegmentFilenameV3(index, offset))\n}\n\n// FormatSnapshotFilenameV3 returns the filename for a v0.3.x snapshot.\n// Format: {index:08x}.snapshot.lz4\nfunc FormatSnapshotFilenameV3(index int) string {\n\treturn fmt.Sprintf(\"%08x.snapshot.lz4\", index)\n}\n\n// FormatWALSegmentFilenameV3 returns the filename for a v0.3.x WAL segment.\n// Format: {index:08x}_{offset:08x}.wal.lz4\nfunc FormatWALSegmentFilenameV3(index int, offset int64) string {\n\treturn fmt.Sprintf(\"%08x_%08x.wal.lz4\", index, offset)\n}\n\nvar (\n\tsnapshotRegexV3 = regexp.MustCompile(`^([0-9a-f]{8})\\.snapshot\\.lz4$`)\n\twalSegmentRegexV3 = regexp.MustCompile(`^([0-9a-f]{8})_([0-9a-f]{8,16})\\.wal\\.lz4$`)\n\tgenerationRegexV3 = regexp.MustCompile(`^[0-9a-f]{16}$`)\n)\n\n// ParseSnapshotFilenameV3 parses a v0.3.x snapshot filename and returns the index.\n// Returns an error if the filename does not match the expected format.\nfunc ParseSnapshotFilenameV3(filename string) (index int, err error) {\n\tm := snapshotRegexV3.FindStringSubmatch(filename)\n\tif m == nil {\n\t\treturn 0, fmt.Errorf(\"invalid v0.3.x snapshot filename: %q\", filename)\n\t}\n\tidx, err := strconv.ParseInt(m[1], 16, 32)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"invalid snapshot path: %s: %w\", filename, err)\n\t}\n\treturn int(idx), nil\n}\n\n// ParseWALSegmentFilenameV3 parses a v0.3.x WAL segment filename.\n// Returns the WAL index and byte offset, or an error if the filename is invalid.\nfunc ParseWALSegmentFilenameV3(filename string) (index int, offset int64, err error) {\n\tm := walSegmentRegexV3.FindStringSubmatch(filename)\n\tif m == nil {\n\t\treturn 0, 0, fmt.Errorf(\"invalid v0.3.x WAL segment filename: %q\", filename)\n\t}\n\tidx, err := strconv.ParseInt(m[1], 16, 32)\n\tif err != nil {\n\t\treturn 0, 0, fmt.Errorf(\"invalid wal segment path: %s: %w\", filename, err)\n\t}\n\toff, err := strconv.ParseInt(m[2], 16, 64)\n\tif err != nil {\n\t\treturn 0, 0, fmt.Errorf(\"invalid wal segment path: %s: %w\", filename, err)\n\t}\n\treturn int(idx), off, nil\n}\n\n// IsGenerationIDV3 returns true if s is a valid v0.3.x generation ID (16 hex chars).\nfunc IsGenerationIDV3(s string) bool {\n\treturn generationRegexV3.MatchString(s)\n}\n\n// ReplicaClientV3 reads v0.3.x backup data.\n// ReplicaClient implementations that support v0.3.x restore should implement this interface.\ntype ReplicaClientV3 interface {\n\t// GenerationsV3 returns a list of generation IDs in the replica.\n\t// Returns an empty slice if no v0.3.x backups exist.\n\t// Generation IDs are sorted in ascending order.\n\tGenerationsV3(ctx context.Context) ([]string, error)\n\n\t// SnapshotsV3 returns snapshots for a generation, sorted by index.\n\t// Returns an empty slice if no snapshots exist.\n\tSnapshotsV3(ctx context.Context, generation string) ([]SnapshotInfoV3, error)\n\n\t// WALSegmentsV3 returns WAL segments for a generation, sorted by index then offset.\n\t// Returns an empty slice if no WAL segments exist.\n\tWALSegmentsV3(ctx context.Context, generation string) ([]WALSegmentInfoV3, error)\n\n\t// OpenSnapshotV3 opens a v0.3.x snapshot for reading.\n\t// The returned reader provides LZ4-decompressed data.\n\tOpenSnapshotV3(ctx context.Context, generation string, index int) (io.ReadCloser, error)\n\n\t// OpenWALSegmentV3 opens a v0.3.x WAL segment for reading.\n\t// The returned reader provides LZ4-decompressed data.\n\tOpenWALSegmentV3(ctx context.Context, generation string, index int, offset int64) (io.ReadCloser, error)\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"fmt","path":"fmt","span":{"start":[5,1],"end":[5,7],"bytes":[40,46]}},{"name":"io","path":"io","span":{"start":[6,1],"end":[6,6],"bytes":[47,52]}},{"name":"path","path":"path","span":{"start":[7,1],"end":[7,8],"bytes":[53,60]}},{"name":"regexp","path":"regexp","span":{"start":[8,1],"end":[8,10],"bytes":[61,70]}},{"name":"strconv","path":"strconv","span":{"start":[9,1],"end":[9,11],"bytes":[71,81]}},{"name":"time","path":"time","span":{"start":[10,1],"end":[10,8],"bytes":[82,89]}}],"types":{"PosV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3","kind":"struct","span":{"start":[14,1],"end":[18,2],"bytes":[144,286]},"callables":{"github.com/benbjohnson/litestream.PosV3.IsZero":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/github.com/benbjohnson/litestream.PosV3.IsZero","kind":"method","span":{"start":[21,1],"end":[23,2],"bytes":[346,401]},"signature":"github.com/benbjohnson/litestream.PosV3.IsZero","parameters":[],"return_type":"bool","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.PosV3.String":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/github.com/benbjohnson/litestream.PosV3.String","kind":"method","span":{"start":[26,1],"end":[31,2],"bytes":[462,598]},"signature":"github.com/benbjohnson/litestream.PosV3.String","parameters":[],"return_type":"string","metrics":{"cyclomatic":2},"body":{"27:5":{"kind":"call","span":{"start":[27,5],"end":[27,15],"bytes":[499,509]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/github.com/benbjohnson/litestream.PosV3.IsZero"},"30:9":{"kind":"call","span":{"start":[30,9],"end":[30,70],"bytes":[535,596]},"callee":null}}}},"fields":{"Generation":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/Generation","kind":"field","type":"string","span":{"start":[15,1],"end":[15,41],"bytes":[164,204]}},"Index":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/Index","kind":"field","type":"int","span":{"start":[16,1],"end":[16,32],"bytes":[205,236]}},"Offset":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/Offset","kind":"field","type":"int64","span":{"start":[17,1],"end":[17,48],"bytes":[237,284]}}}},"ReplicaClientV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3","kind":"interface","span":{"start":[154,1],"end":[175,2],"bytes":[4830,5939]},"callables":{"github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3","kind":"method","span":{"start":[158,1],"end":[158,54],"bytes":[5035,5088]},"signature":"github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[158,1],"end":[158,54],"bytes":[5035,5088]}}],"return_type":"([]string, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClientV3.OpenSnapshotV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.OpenSnapshotV3","kind":"method","span":{"start":[170,1],"end":[170,90],"bytes":[5624,5713]},"signature":"github.com/benbjohnson/litestream.ReplicaClientV3.OpenSnapshotV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[170,1],"end":[170,90],"bytes":[5624,5713]}},{"name":"generation","type":"string","span":{"start":[170,1],"end":[170,90],"bytes":[5624,5713]}},{"name":"index","type":"int","span":{"start":[170,1],"end":[170,90],"bytes":[5624,5713]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClientV3.OpenWALSegmentV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.OpenWALSegmentV3","kind":"method","span":{"start":[174,1],"end":[174,106],"bytes":[5832,5937]},"signature":"github.com/benbjohnson/litestream.ReplicaClientV3.OpenWALSegmentV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[174,1],"end":[174,106],"bytes":[5832,5937]}},{"name":"generation","type":"string","span":{"start":[174,1],"end":[174,106],"bytes":[5832,5937]}},{"name":"index","type":"int","span":{"start":[174,1],"end":[174,106],"bytes":[5832,5937]}},{"name":"offset","type":"int64","span":{"start":[174,1],"end":[174,106],"bytes":[5832,5937]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3","kind":"method","span":{"start":[162,1],"end":[162,79],"bytes":[5209,5287]},"signature":"github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[162,1],"end":[162,79],"bytes":[5209,5287]}},{"name":"generation","type":"string","span":{"start":[162,1],"end":[162,79],"bytes":[5209,5287]}}],"return_type":"([]github.com/benbjohnson/litestream.SnapshotInfoV3, error)","error_channel":["error"],"body":{}},"github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3","kind":"method","span":{"start":[166,1],"end":[166,83],"bytes":[5428,5510]},"signature":"github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[166,1],"end":[166,83],"bytes":[5428,5510]}},{"name":"generation","type":"string","span":{"start":[166,1],"end":[166,83],"bytes":[5428,5510]}}],"return_type":"([]github.com/benbjohnson/litestream.WALSegmentInfoV3, error)","error_channel":["error"],"body":{}}}},"SnapshotInfoV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotInfoV3","kind":"struct","span":{"start":[34,1],"end":[39,2],"bytes":[661,766]},"callables":{"github.com/benbjohnson/litestream.SnapshotInfoV3.Pos":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotInfoV3/github.com/benbjohnson/litestream.SnapshotInfoV3.Pos","kind":"method","span":{"start":[42,1],"end":[44,2],"bytes":[814,929]},"signature":"github.com/benbjohnson/litestream.SnapshotInfoV3.Pos","parameters":[],"return_type":"github.com/benbjohnson/litestream.PosV3","metrics":{"cyclomatic":1},"body":{}}},"fields":{"CreatedAt":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotInfoV3/CreatedAt","kind":"field","type":"time.Time","span":{"start":[38,1],"end":[38,22],"bytes":[743,764]}},"Generation":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotInfoV3/Generation","kind":"field","type":"string","span":{"start":[35,1],"end":[35,19],"bytes":[690,708]}},"Index":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotInfoV3/Index","kind":"field","type":"int","span":{"start":[36,1],"end":[36,16],"bytes":[709,724]}},"Size":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotInfoV3/Size","kind":"field","type":"int64","span":{"start":[37,1],"end":[37,18],"bytes":[725,742]}}}},"WALSegmentInfoV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3","kind":"struct","span":{"start":[47,1],"end":[53,2],"bytes":[997,1122]},"callables":{"github.com/benbjohnson/litestream.WALSegmentInfoV3.Pos":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3/github.com/benbjohnson/litestream.WALSegmentInfoV3.Pos","kind":"method","span":{"start":[56,1],"end":[58,2],"bytes":[1173,1300]},"signature":"github.com/benbjohnson/litestream.WALSegmentInfoV3.Pos","parameters":[],"return_type":"github.com/benbjohnson/litestream.PosV3","metrics":{"cyclomatic":1},"body":{}}},"fields":{"CreatedAt":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3/CreatedAt","kind":"field","type":"time.Time","span":{"start":[52,1],"end":[52,22],"bytes":[1099,1120]}},"Generation":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3/Generation","kind":"field","type":"string","span":{"start":[48,1],"end":[48,19],"bytes":[1028,1046]}},"Index":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3/Index","kind":"field","type":"int","span":{"start":[49,1],"end":[49,16],"bytes":[1047,1062]}},"Offset":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3/Offset","kind":"field","type":"int64","span":{"start":[50,1],"end":[50,18],"bytes":[1063,1080]}},"Size":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentInfoV3/Size","kind":"field","type":"int64","span":{"start":[51,1],"end":[51,18],"bytes":[1081,1098]}}}}},"functions":{"github.com/benbjohnson/litestream.FormatSnapshotFilenameV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatSnapshotFilenameV3","kind":"function","span":{"start":[99,1],"end":[101,2],"bytes":[2721,2820]},"signature":"github.com/benbjohnson/litestream.FormatSnapshotFilenameV3","parameters":[{"name":"index","type":"int","span":{"start":[99,1],"end":[99,50],"bytes":[2721,2770]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"100:9":{"kind":"call","span":{"start":[100,9],"end":[100,48],"bytes":[2779,2818]},"callee":null}}},"github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3","kind":"function","span":{"start":[105,1],"end":[107,2],"bytes":[2943,3066]},"signature":"github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3","parameters":[{"name":"index","type":"int","span":{"start":[105,1],"end":[105,66],"bytes":[2943,3008]}},{"name":"offset","type":"int64","span":{"start":[105,1],"end":[105,66],"bytes":[2943,3008]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"106:9":{"kind":"call","span":{"start":[106,9],"end":[106,56],"bytes":[3017,3064]},"callee":null}}},"github.com/benbjohnson/litestream.GenerationPathV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.GenerationPathV3","kind":"function","span":{"start":[73,1],"end":[75,2],"bytes":[1652,1763]},"signature":"github.com/benbjohnson/litestream.GenerationPathV3","parameters":[{"name":"root","type":"string","span":{"start":[73,1],"end":[73,56],"bytes":[1652,1707]}},{"name":"generation","type":"string","span":{"start":[73,1],"end":[73,56],"bytes":[1652,1707]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"74:9":{"kind":"call","span":{"start":[74,9],"end":[74,54],"bytes":[1716,1761]},"callee":null}}},"github.com/benbjohnson/litestream.GenerationsPathV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.GenerationsPathV3","kind":"function","span":{"start":[68,1],"end":[70,2],"bytes":[1499,1587]},"signature":"github.com/benbjohnson/litestream.GenerationsPathV3","parameters":[{"name":"root","type":"string","span":{"start":[68,1],"end":[68,45],"bytes":[1499,1543]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"69:9":{"kind":"call","span":{"start":[69,9],"end":[69,42],"bytes":[1552,1585]},"callee":null}}},"github.com/benbjohnson/litestream.IsGenerationIDV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.IsGenerationIDV3","kind":"function","span":{"start":[148,1],"end":[150,2],"bytes":[4608,4689]},"signature":"github.com/benbjohnson/litestream.IsGenerationIDV3","parameters":[{"name":"s","type":"string","span":{"start":[148,1],"end":[148,39],"bytes":[4608,4646]}}],"return_type":"bool","metrics":{"cyclomatic":1},"body":{"149:9":{"kind":"call","span":{"start":[149,9],"end":[149,41],"bytes":[4655,4687]},"callee":null}}},"github.com/benbjohnson/litestream.ParseSnapshotFilenameV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseSnapshotFilenameV3","kind":"function","span":{"start":[117,1],"end":[127,2],"bytes":[3451,3822]},"signature":"github.com/benbjohnson/litestream.ParseSnapshotFilenameV3","parameters":[{"name":"filename","type":"string","span":{"start":[117,1],"end":[117,71],"bytes":[3451,3521]}}],"return_type":"(int, error)","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"118:7":{"kind":"call","span":{"start":[118,7],"end":[118,51],"bytes":[3528,3572]},"callee":null},"120:13":{"kind":"call","span":{"start":[120,13],"end":[120,73],"bytes":[3600,3660]},"callee":null},"122:14":{"kind":"call","span":{"start":[122,14],"end":[122,44],"bytes":[3677,3707]},"callee":null},"124:13":{"kind":"call","span":{"start":[124,13],"end":[124,71],"bytes":[3737,3795]},"callee":null},"126:9":{"kind":"call","span":{"start":[126,9],"end":[126,17],"bytes":[3807,3815]},"callee":null}}},"github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3","kind":"function","span":{"start":[131,1],"end":[145,2],"bytes":[3973,4520]},"signature":"github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3","parameters":[{"name":"filename","type":"string","span":{"start":[131,1],"end":[131,87],"bytes":[3973,4059]}}],"return_type":"(int, int64, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"132:7":{"kind":"call","span":{"start":[132,7],"end":[132,53],"bytes":[4066,4112]},"callee":null},"134:16":{"kind":"call","span":{"start":[134,16],"end":[134,79],"bytes":[4143,4206]},"callee":null},"136:14":{"kind":"call","span":{"start":[136,14],"end":[136,44],"bytes":[4223,4253]},"callee":null},"138:16":{"kind":"call","span":{"start":[138,16],"end":[138,77],"bytes":[4286,4347]},"callee":null},"140:14":{"kind":"call","span":{"start":[140,14],"end":[140,44],"bytes":[4364,4394]},"callee":null},"142:16":{"kind":"call","span":{"start":[142,16],"end":[142,77],"bytes":[4427,4488]},"callee":null},"144:9":{"kind":"call","span":{"start":[144,9],"end":[144,17],"bytes":[4500,4508]},"callee":null}}},"github.com/benbjohnson/litestream.SnapshotPathV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotPathV3","kind":"function","span":{"start":[88,1],"end":[90,2],"bytes":[2213,2365]},"signature":"github.com/benbjohnson/litestream.SnapshotPathV3","parameters":[{"name":"root","type":"string","span":{"start":[88,1],"end":[88,65],"bytes":[2213,2277]}},{"name":"generation","type":"string","span":{"start":[88,1],"end":[88,65],"bytes":[2213,2277]}},{"name":"index","type":"int","span":{"start":[88,1],"end":[88,65],"bytes":[2213,2277]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"89:19":{"kind":"call","span":{"start":[89,19],"end":[89,52],"bytes":[2296,2329]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotsPathV3"},"89:54":{"kind":"call","span":{"start":[89,54],"end":[89,85],"bytes":[2331,2362]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatSnapshotFilenameV3"},"89:9":{"kind":"call","span":{"start":[89,9],"end":[89,86],"bytes":[2286,2363]},"callee":null}}},"github.com/benbjohnson/litestream.SnapshotsPathV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotsPathV3","kind":"function","span":{"start":[78,1],"end":[80,2],"bytes":[1835,1961]},"signature":"github.com/benbjohnson/litestream.SnapshotsPathV3","parameters":[{"name":"root","type":"string","span":{"start":[78,1],"end":[78,55],"bytes":[1835,1889]}},{"name":"generation","type":"string","span":{"start":[78,1],"end":[78,55],"bytes":[1835,1889]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"79:9":{"kind":"call","span":{"start":[79,9],"end":[79,70],"bytes":[1898,1959]},"callee":null}}},"github.com/benbjohnson/litestream.WALPathV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALPathV3","kind":"function","span":{"start":[83,1],"end":[85,2],"bytes":[2030,2144]},"signature":"github.com/benbjohnson/litestream.WALPathV3","parameters":[{"name":"root","type":"string","span":{"start":[83,1],"end":[83,49],"bytes":[2030,2078]}},{"name":"generation","type":"string","span":{"start":[83,1],"end":[83,49],"bytes":[2030,2078]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"84:9":{"kind":"call","span":{"start":[84,9],"end":[84,64],"bytes":[2087,2142]},"callee":null}}},"github.com/benbjohnson/litestream.WALSegmentPathV3":{"id":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentPathV3","kind":"function","span":{"start":[93,1],"end":[95,2],"bytes":[2439,2611]},"signature":"github.com/benbjohnson/litestream.WALSegmentPathV3","parameters":[{"name":"root","type":"string","span":{"start":[93,1],"end":[93,81],"bytes":[2439,2519]}},{"name":"generation","type":"string","span":{"start":[93,1],"end":[93,81],"bytes":[2439,2519]}},{"name":"index","type":"int","span":{"start":[93,1],"end":[93,81],"bytes":[2439,2519]}},{"name":"offset","type":"int64","span":{"start":[93,1],"end":[93,81],"bytes":[2439,2519]}}],"return_type":"string","metrics":{"cyclomatic":1},"body":{"94:19":{"kind":"call","span":{"start":[94,19],"end":[94,46],"bytes":[2538,2565]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALPathV3"},"94:48":{"kind":"call","span":{"start":[94,48],"end":[94,89],"bytes":[2567,2608]},"callee":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3"},"94:9":{"kind":"call","span":{"start":[94,9],"end":[94,90],"bytes":[2528,2609]},"callee":null}}}},"content_hash":"3bf323f796fa9b0118b9e5f58dc008d33d364a47dafdf1657d0333a57bf1e546"},"wal_reader.go":{"id":"can://go/litestream/wal_reader.go","kind":"module","span":{"start":[1,1],"end":[318,1],"bytes":[0,9615]},"package":"litestream","source":"package litestream\n\nimport (\n\t\"context\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\n// WALReader wraps an io.Reader and parses SQLite WAL frames.\n//\n// This reader verifies the salt \u0026 checksum integrity while it reads. It does\n// not enforce transaction boundaries (i.e. it may return uncommitted frames).\n// It is the responsibility of the caller to handle this.\ntype WALReader struct {\n\tr io.ReaderAt\n\tframeN int\n\n\tbo binary.ByteOrder\n\tpageSize uint32\n\tseq uint32\n\n\tsalt1, salt2 uint32\n\tchksum1, chksum2 uint32\n\n\tlogger *slog.Logger\n}\n\n// NewWALReader returns a new instance of WALReader.\nfunc NewWALReader(rd io.ReaderAt, logger *slog.Logger) (*WALReader, error) {\n\tr := \u0026WALReader{r: rd, logger: logger}\n\tif err := r.readHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n\n// NewWALReaderWithOffset returns a new instance of WALReader at a given offset.\n// Salt must match or else no frames will be returned. Checksum calculated from\n// from previous page.\nfunc NewWALReaderWithOffset(ctx context.Context, rd io.ReaderAt, offset int64, salt1, salt2 uint32, logger *slog.Logger) (*WALReader, error) {\n\t// Ensure we are not starting on the first page since we need to read the previous.\n\tif offset \u003c= WALHeaderSize {\n\t\treturn nil, fmt.Errorf(\"offset (%d) must be greater than the wal header size (%d)\", offset, WALHeaderSize)\n\t}\n\n\tr := \u0026WALReader{r: rd, logger: logger}\n\n\t// Read header to determine page size \u0026 byte order.\n\tif err := r.readHeader(); err != nil {\n\t\treturn nil, fmt.Errorf(\"read header: %w\", err)\n\t}\n\n\t// Load in salt in case the beginning of the file has been overwritten.\n\tr.salt1, r.salt2 = salt1, salt2\n\n\t// Ensure offset is positioned on a frame start.\n\tframeSize := int64(r.pageSize + WALFrameHeaderSize)\n\tif (offset-WALHeaderSize)%frameSize != 0 {\n\t\treturn nil, fmt.Errorf(\"unaligned wal offset %d for page size %d\", offset, r.pageSize)\n\t}\n\tr.frameN = int((offset - WALHeaderSize) / frameSize)\n\n\t// Read previous page to load checksum. Context errors are returned as-is\n\t// so callers don't mistake a cancellation for a frame mismatch.\n\tr.frameN--\n\tif _, _, err := r.readFrame(ctx, make([]byte, r.pageSize), false); err != nil {\n\t\tif ctx.Err() != nil {\n\t\t\treturn nil, context.Cause(ctx)\n\t\t}\n\t\treturn nil, \u0026PrevFrameMismatchError{Err: err}\n\t}\n\n\treturn r, nil\n}\n\n// PageSize returns the page size from the header. Must call ReadHeader() first.\nfunc (r *WALReader) PageSize() uint32 { return r.pageSize }\n\n// Offset returns the file offset of the last read frame.\n// Returns zero if no frames have been read.\nfunc (r *WALReader) Offset() int64 {\n\tif r.frameN == 0 {\n\t\treturn 0\n\t}\n\treturn WALHeaderSize + ((int64(r.frameN) - 1) * (WALFrameHeaderSize + int64(r.pageSize)))\n}\n\n// readHeader reads the WAL header into the reader. Returns io.EOF if WAL is invalid.\nfunc (r *WALReader) readHeader() error {\n\t// If we have a partial WAL, then mark WAL as done.\n\thdr := make([]byte, WALHeaderSize)\n\tif n, err := r.r.ReadAt(hdr, 0); n \u003c len(hdr) {\n\t\treturn io.EOF\n\t} else if err != nil {\n\t\treturn err\n\t}\n\n\t// Determine byte order of checksums.\n\tswitch magic := binary.BigEndian.Uint32(hdr[0:]); magic {\n\tcase 0x377f0682:\n\t\tr.bo = binary.LittleEndian\n\tcase 0x377f0683:\n\t\tr.bo = binary.BigEndian\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid wal header magic: %x\", magic)\n\t}\n\n\t// If the header checksum doesn't match then we may have failed with\n\t// a partial WAL header write during checkpointing.\n\tchksum1 := binary.BigEndian.Uint32(hdr[24:])\n\tchksum2 := binary.BigEndian.Uint32(hdr[28:])\n\tif v0, v1 := WALChecksum(r.bo, 0, 0, hdr[:24]); v0 != chksum1 || v1 != chksum2 {\n\t\treturn io.EOF\n\t}\n\n\t// Verify version is correct.\n\tif version := binary.BigEndian.Uint32(hdr[4:]); version != 3007000 {\n\t\treturn fmt.Errorf(\"unsupported wal version: %d\", version)\n\t}\n\n\tr.pageSize = binary.BigEndian.Uint32(hdr[8:])\n\tr.seq = binary.BigEndian.Uint32(hdr[12:])\n\tr.salt1 = binary.BigEndian.Uint32(hdr[16:])\n\tr.salt2 = binary.BigEndian.Uint32(hdr[20:])\n\tr.chksum1, r.chksum2 = chksum1, chksum2\n\n\treturn nil\n}\n\n// ReadFrame reads the next frame from the WAL and returns the page number.\n// Returns io.EOF at the end of the valid WAL.\nfunc (r *WALReader) ReadFrame(ctx context.Context, data []byte) (pgno, commit uint32, err error) {\n\treturn r.readFrame(ctx, data, true)\n}\n\nfunc (r *WALReader) readFrame(ctx context.Context, data []byte, verifyChecksum bool) (pgno, commit uint32, err error) {\n\tselect {\n\tcase \u003c-ctx.Done():\n\t\treturn 0, 0, context.Cause(ctx)\n\tdefault:\n\t}\n\n\tif len(data) != int(r.pageSize) {\n\t\treturn 0, 0, fmt.Errorf(\"WALReader.ReadFrame(): buffer size (%d) must match page size (%d)\", len(data), r.pageSize)\n\t}\n\n\tframeSize := r.pageSize + WALFrameHeaderSize\n\toffset := WALHeaderSize + (int64(r.frameN) * int64(frameSize))\n\n\t// Read WAL frame header.\n\thdr := make([]byte, WALFrameHeaderSize)\n\tif n, err := r.r.ReadAt(hdr, offset); n != len(hdr) {\n\t\treturn 0, 0, io.EOF\n\t} else if err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\t// Read WAL page data.\n\tif n, err := r.r.ReadAt(data, offset+WALFrameHeaderSize); n != len(data) {\n\t\treturn 0, 0, io.EOF\n\t} else if err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\t// Verify salt matches the salt in the header.\n\tsalt1 := binary.BigEndian.Uint32(hdr[8:])\n\tsalt2 := binary.BigEndian.Uint32(hdr[12:])\n\tif r.salt1 != salt1 || r.salt2 != salt2 {\n\t\treturn 0, 0, io.EOF\n\t}\n\n\t// Verify the checksum is valid. If checksum verification is disabled, it\n\t// is because we are jumping to an offset and not checksumming from the beginning.\n\tchksum1 := binary.BigEndian.Uint32(hdr[16:])\n\tchksum2 := binary.BigEndian.Uint32(hdr[20:])\n\tif verifyChecksum {\n\t\tr.chksum1, r.chksum2 = WALChecksum(r.bo, r.chksum1, r.chksum2, hdr[:8]) // frame header\n\t\tr.chksum1, r.chksum2 = WALChecksum(r.bo, r.chksum1, r.chksum2, data) // frame data\n\t\tif r.chksum1 != chksum1 || r.chksum2 != chksum2 {\n\t\t\treturn 0, 0, io.EOF\n\t\t}\n\t} else {\n\t\tr.chksum1, r.chksum2 = chksum1, chksum2\n\t}\n\n\tpgno = binary.BigEndian.Uint32(hdr[0:])\n\tcommit = binary.BigEndian.Uint32(hdr[4:])\n\n\tr.frameN++\n\n\treturn pgno, commit, nil\n}\n\n// PageMap reads all committed frames until the end of the file and returns a\n// map of pgno to offset of the latest version of each page. Also returns the\n// max offset of the wal segment read, and the final database size, in pages.\nfunc (r *WALReader) PageMap(ctx context.Context) (m map[uint32]int64, maxOffset int64, commit uint32, err error) {\n\tm, maxOffset, commit, _, err = r.pageMap(ctx, 0)\n\treturn m, maxOffset, commit, err\n}\n\nfunc (r *WALReader) pageMap(ctx context.Context, maxBytes int64) (m map[uint32]int64, maxOffset int64, commit uint32, limited bool, err error) {\n\tm = make(map[uint32]int64)\n\ttxMap := make(map[uint32]int64)\n\tdata := make([]byte, r.pageSize)\n\tframeSize := int64(WALFrameHeaderSize + r.pageSize)\n\tstartOffset := WALHeaderSize + int64(r.frameN)*frameSize\n\tfor {\n\t\tpgno, fcommit, err := r.ReadFrame(ctx, data)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn nil, 0, 0, false, err\n\t\t}\n\n\t\t// Update latest offset for the page for this transaction.\n\t\t// Pages should not be saved to full map until we know txn is committed.\n\t\toffset := r.Offset()\n\t\ttxMap[pgno] = offset\n\n\t\t// For commit records, transfer offsets to full map and update db size.\n\t\tif fcommit != 0 {\n\t\t\tfor pgno, offset := range txMap {\n\t\t\t\tm[pgno] = offset\n\t\t\t}\n\t\t\ttxMap = make(map[uint32]int64)\n\t\t\tcommit = fcommit\n\n\t\t\tif maxBytes \u003e 0 \u0026\u0026 r.Offset()+frameSize-startOffset \u003e= maxBytes {\n\t\t\t\tlimited = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove pages that exceed the final commit size. This can occur when the\n\t// database shrinks (e.g., via VACUUM) between transactions in the WAL.\n\tfor pgno := range m {\n\t\tif pgno \u003e commit {\n\t\t\tdelete(m, pgno)\n\t\t}\n\t}\n\n\t// If full transactions available, return the original offset.\n\tif len(m) == 0 {\n\t\treturn m, 0, 0, limited, nil\n\t}\n\n\t// Compute the highest page offsets.\n\tvar end int64\n\tfor _, offset := range m {\n\t\tif end == 0 || offset \u003e end {\n\t\t\tend = offset\n\t\t}\n\t}\n\n\t// Extend to the end of the last frame read.\n\tend += WALFrameHeaderSize + int64(r.pageSize)\n\n\tr.logger.Log(ctx, internal.LevelTrace, \"page map complete\", \"n\", len(m), \"end\", end, \"commit\", commit)\n\treturn m, end, commit, limited, nil\n}\n\n// FrameSaltsUntil returns a set of all unique frame salts in the WAL file.\nfunc (r *WALReader) FrameSaltsUntil(ctx context.Context, until [2]uint32) (map[[2]uint32]struct{}, error) {\n\tm := make(map[[2]uint32]struct{})\n\tfor offset := int64(WALHeaderSize); ; offset += int64(WALFrameHeaderSize + r.pageSize) {\n\t\thdr := make([]byte, WALFrameHeaderSize)\n\t\tif n, err := r.r.ReadAt(hdr, offset); n != len(hdr) {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tsalt1 := binary.BigEndian.Uint32(hdr[8:])\n\t\tsalt2 := binary.BigEndian.Uint32(hdr[12:])\n\n\t\t// Track unique salts.\n\t\tm[[2]uint32{salt1, salt2}] = struct{}{}\n\n\t\t// Only read salts until the last one we expect.\n\t\tif salt1 == until[0] \u0026\u0026 salt2 == until[1] {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn m, nil\n}\n\n// WALChecksum computes a running SQLite WAL checksum over a byte slice.\nfunc WALChecksum(bo binary.ByteOrder, s0, s1 uint32, b []byte) (uint32, uint32) {\n\tassert(len(b)%8 == 0, \"misaligned checksum byte slice\")\n\n\t// Iterate over 8-byte units and compute checksum.\n\tfor i := 0; i \u003c len(b); i += 8 {\n\t\ts0 += bo.Uint32(b[i:]) + s1\n\t\ts1 += bo.Uint32(b[i+4:]) + s0\n\t}\n\treturn s0, s1\n}\n\ntype PrevFrameMismatchError struct {\n\tErr error\n}\n\nfunc (e *PrevFrameMismatchError) Error() string {\n\treturn fmt.Sprintf(\"prev frame mismatch: %s\", e.Err)\n}\n\nfunc (e *PrevFrameMismatchError) Unwrap() error {\n\treturn e.Err\n}\n","imports":[{"name":"context","path":"context","span":{"start":[4,1],"end":[4,11],"bytes":[29,39]}},{"name":"binary","path":"encoding/binary","span":{"start":[5,1],"end":[5,19],"bytes":[40,58]}},{"name":"errors","path":"errors","span":{"start":[6,1],"end":[6,10],"bytes":[59,68]}},{"name":"fmt","path":"fmt","span":{"start":[7,1],"end":[7,7],"bytes":[69,75]}},{"name":"io","path":"io","span":{"start":[8,1],"end":[8,6],"bytes":[76,81]}},{"name":"slog","path":"log/slog","span":{"start":[9,1],"end":[9,12],"bytes":[82,93]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[11,1],"end":[11,46],"bytes":[95,140]}}],"types":{"PrevFrameMismatchError":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.PrevFrameMismatchError","kind":"struct","span":{"start":[307,1],"end":[309,2],"bytes":[9391,9440]},"callables":{"github.com/benbjohnson/litestream.PrevFrameMismatchError.Error":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.PrevFrameMismatchError/github.com/benbjohnson/litestream.PrevFrameMismatchError.Error","kind":"method","span":{"start":[311,1],"end":[313,2],"bytes":[9442,9547]},"signature":"github.com/benbjohnson/litestream.PrevFrameMismatchError.Error","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{"312:9":{"kind":"call","span":{"start":[312,9],"end":[312,54],"bytes":[9500,9545]},"callee":null}}},"github.com/benbjohnson/litestream.PrevFrameMismatchError.Unwrap":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.PrevFrameMismatchError/github.com/benbjohnson/litestream.PrevFrameMismatchError.Unwrap","kind":"method","span":{"start":[315,1],"end":[317,2],"bytes":[9549,9614]},"signature":"github.com/benbjohnson/litestream.PrevFrameMismatchError.Unwrap","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{}}},"fields":{"Err":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.PrevFrameMismatchError/Err","kind":"field","type":"error","span":{"start":[308,1],"end":[308,11],"bytes":[9428,9438]}}}},"WALReader":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader","kind":"struct","span":{"start":[19,1],"end":[31,2],"bytes":[424,616]},"callables":{"github.com/benbjohnson/litestream.WALReader.FrameSaltsUntil":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.FrameSaltsUntil","kind":"method","span":{"start":[270,1],"end":[293,2],"bytes":[8330,9007]},"signature":"github.com/benbjohnson/litestream.WALReader.FrameSaltsUntil","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[270,1],"end":[270,108],"bytes":[8330,8437]}},{"name":"until","type":"[2]uint32","span":{"start":[270,1],"end":[270,108],"bytes":[8330,8437]}}],"return_type":"(map[[2]uint32]struct{}, error)","error_channel":["error"],"metrics":{"cyclomatic":5},"body":{"271:7":{"kind":"call","span":{"start":[271,7],"end":[271,35],"bytes":[8444,8472]},"callee":null},"272:16":{"kind":"call","span":{"start":[272,16],"end":[272,36],"bytes":[8488,8508]},"callee":null},"272:50":{"kind":"call","span":{"start":[272,50],"end":[272,88],"bytes":[8522,8560]},"callee":null},"273:10":{"kind":"call","span":{"start":[273,10],"end":[273,42],"bytes":[8572,8604]},"callee":null},"274:16":{"kind":"call","span":{"start":[274,16],"end":[274,39],"bytes":[8620,8643]},"callee":null},"274:46":{"kind":"call","span":{"start":[274,46],"end":[274,54],"bytes":[8650,8658]},"callee":null},"280:12":{"kind":"call","span":{"start":[280,12],"end":[280,44],"bytes":[8730,8762]},"callee":null},"281:12":{"kind":"call","span":{"start":[281,12],"end":[281,45],"bytes":[8774,8807]},"callee":null}}},"github.com/benbjohnson/litestream.WALReader.Offset":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.Offset","kind":"method","span":{"start":[86,1],"end":[91,2],"bytes":[2621,2784]},"signature":"github.com/benbjohnson/litestream.WALReader.Offset","parameters":[],"return_type":"int64","metrics":{"cyclomatic":2},"body":{"90:27":{"kind":"call","span":{"start":[90,27],"end":[90,42],"bytes":[2718,2733]},"callee":null},"90:72":{"kind":"call","span":{"start":[90,72],"end":[90,89],"bytes":[2763,2780]},"callee":null}}},"github.com/benbjohnson/litestream.WALReader.PageMap":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.PageMap","kind":"method","span":{"start":[202,1],"end":[205,2],"bytes":[6328,6528]},"signature":"github.com/benbjohnson/litestream.WALReader.PageMap","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[202,1],"end":[202,115],"bytes":[6328,6442]}}],"return_type":"(map[uint32]int64, int64, uint32, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"203:33":{"kind":"call","span":{"start":[203,33],"end":[203,50],"bytes":[6475,6492]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap"}}},"github.com/benbjohnson/litestream.WALReader.PageSize":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.PageSize","kind":"method","span":{"start":[82,1],"end":[82,60],"bytes":[2457,2516]},"signature":"github.com/benbjohnson/litestream.WALReader.PageSize","parameters":[],"return_type":"uint32","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream.WALReader.ReadFrame":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.ReadFrame","kind":"method","span":{"start":[137,1],"end":[139,2],"bytes":[4212,4349]},"signature":"github.com/benbjohnson/litestream.WALReader.ReadFrame","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[137,1],"end":[137,99],"bytes":[4212,4310]}},{"name":"data","type":"[]byte","span":{"start":[137,1],"end":[137,99],"bytes":[4212,4310]}}],"return_type":"(uint32, uint32, error)","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"138:9":{"kind":"call","span":{"start":[138,9],"end":[138,37],"bytes":[4319,4347]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readFrame"}}},"github.com/benbjohnson/litestream.WALReader.pageMap":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap","kind":"method","span":{"start":[207,1],"end":[267,2],"bytes":[6530,8252]},"signature":"github.com/benbjohnson/litestream.WALReader.pageMap","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[207,1],"end":[207,145],"bytes":[6530,6674]}},{"name":"maxBytes","type":"int64","span":{"start":[207,1],"end":[207,145],"bytes":[6530,6674]}}],"return_type":"(map[uint32]int64, int64, uint32, bool, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"208:6":{"kind":"call","span":{"start":[208,6],"end":[208,28],"bytes":[6680,6702]},"callee":null},"209:11":{"kind":"call","span":{"start":[209,11],"end":[209,33],"bytes":[6713,6735]},"callee":null},"210:10":{"kind":"call","span":{"start":[210,10],"end":[210,34],"bytes":[6745,6769]},"callee":null},"211:15":{"kind":"call","span":{"start":[211,15],"end":[211,53],"bytes":[6784,6822]},"callee":null},"212:33":{"kind":"call","span":{"start":[212,33],"end":[212,48],"bytes":[6855,6870]},"callee":null},"214:25":{"kind":"call","span":{"start":[214,25],"end":[214,47],"bytes":[6912,6934]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.ReadFrame"},"215:6":{"kind":"call","span":{"start":[215,6],"end":[215,28],"bytes":[6940,6962]},"callee":null},"223:13":{"kind":"call","span":{"start":[223,13],"end":[223,23],"bytes":[7184,7194]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.Offset"},"231:12":{"kind":"call","span":{"start":[231,12],"end":[231,34],"bytes":[7387,7409]},"callee":null},"234:23":{"kind":"call","span":{"start":[234,23],"end":[234,33],"bytes":[7453,7463]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.Offset"},"245:4":{"kind":"call","span":{"start":[245,4],"end":[245,19],"bytes":[7738,7753]},"callee":null},"250:5":{"kind":"call","span":{"start":[250,5],"end":[250,11],"bytes":[7830,7836]},"callee":null},"263:30":{"kind":"call","span":{"start":[263,30],"end":[263,47],"bytes":[8091,8108]},"callee":null},"265:2":{"kind":"call","span":{"start":[265,2],"end":[265,104],"bytes":[8111,8213]},"callee":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded"},"265:67":{"kind":"call","span":{"start":[265,67],"end":[265,73],"bytes":[8176,8182]},"callee":null}}},"github.com/benbjohnson/litestream.WALReader.readFrame":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readFrame","kind":"method","span":{"start":[141,1],"end":[197,2],"bytes":[4351,6092]},"signature":"github.com/benbjohnson/litestream.WALReader.readFrame","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[141,1],"end":[141,120],"bytes":[4351,4470]}},{"name":"data","type":"[]byte","span":{"start":[141,1],"end":[141,120],"bytes":[4351,4470]}},{"name":"verifyChecksum","type":"bool","span":{"start":[141,1],"end":[141,120],"bytes":[4351,4470]}}],"return_type":"(uint32, uint32, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"143:9":{"kind":"call","span":{"start":[143,9],"end":[143,19],"bytes":[4489,4499]},"callee":null},"144:16":{"kind":"call","span":{"start":[144,16],"end":[144,34],"bytes":[4516,4534]},"callee":null},"148:18":{"kind":"call","span":{"start":[148,18],"end":[148,33],"bytes":[4566,4581]},"callee":null},"148:5":{"kind":"call","span":{"start":[148,5],"end":[148,14],"bytes":[4553,4562]},"callee":null},"149:16":{"kind":"call","span":{"start":[149,16],"end":[149,118],"bytes":[4599,4701]},"callee":null},"149:96":{"kind":"call","span":{"start":[149,96],"end":[149,105],"bytes":[4679,4688]},"callee":null},"153:29":{"kind":"call","span":{"start":[153,29],"end":[153,44],"bytes":[4780,4795]},"callee":null},"153:47":{"kind":"call","span":{"start":[153,47],"end":[153,63],"bytes":[4798,4814]},"callee":null},"156:9":{"kind":"call","span":{"start":[156,9],"end":[156,41],"bytes":[4852,4884]},"callee":null},"157:15":{"kind":"call","span":{"start":[157,15],"end":[157,38],"bytes":[4899,4922]},"callee":null},"157:45":{"kind":"call","span":{"start":[157,45],"end":[157,53],"bytes":[4929,4937]},"callee":null},"164:15":{"kind":"call","span":{"start":[164,15],"end":[164,58],"bytes":[5047,5090]},"callee":null},"164:65":{"kind":"call","span":{"start":[164,65],"end":[164,74],"bytes":[5097,5106]},"callee":null},"171:11":{"kind":"call","span":{"start":[171,11],"end":[171,43],"bytes":[5236,5268]},"callee":null},"172:11":{"kind":"call","span":{"start":[172,11],"end":[172,44],"bytes":[5279,5312]},"callee":null},"179:13":{"kind":"call","span":{"start":[179,13],"end":[179,46],"bytes":[5553,5586]},"callee":null},"180:13":{"kind":"call","span":{"start":[180,13],"end":[180,46],"bytes":[5599,5632]},"callee":null},"182:26":{"kind":"call","span":{"start":[182,26],"end":[182,74],"bytes":[5679,5727]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum"},"183:26":{"kind":"call","span":{"start":[183,26],"end":[183,71],"bytes":[5769,5814]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum"},"191:9":{"kind":"call","span":{"start":[191,9],"end":[191,41],"bytes":[5975,6007]},"callee":null},"192:11":{"kind":"call","span":{"start":[192,11],"end":[192,43],"bytes":[6018,6050]},"callee":null}}},"github.com/benbjohnson/litestream.WALReader.readHeader":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readHeader","kind":"method","span":{"start":[94,1],"end":[133,2],"bytes":[2872,4087]},"signature":"github.com/benbjohnson/litestream.WALReader.readHeader","parameters":[],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"104:18":{"kind":"call","span":{"start":[104,18],"end":[104,50],"bytes":[3164,3196]},"callee":null},"110:10":{"kind":"call","span":{"start":[110,10],"end":[110,59],"bytes":[3316,3365]},"callee":null},"115:13":{"kind":"call","span":{"start":[115,13],"end":[115,46],"bytes":[3505,3538]},"callee":null},"116:13":{"kind":"call","span":{"start":[116,13],"end":[116,46],"bytes":[3551,3584]},"callee":null},"117:15":{"kind":"call","span":{"start":[117,15],"end":[117,48],"bytes":[3599,3632]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum"},"122:16":{"kind":"call","span":{"start":[122,16],"end":[122,48],"bytes":[3733,3765]},"callee":null},"123:10":{"kind":"call","span":{"start":[123,10],"end":[123,60],"bytes":[3797,3847]},"callee":null},"126:15":{"kind":"call","span":{"start":[126,15],"end":[126,47],"bytes":[3866,3898]},"callee":null},"127:10":{"kind":"call","span":{"start":[127,10],"end":[127,43],"bytes":[3908,3941]},"callee":null},"128:12":{"kind":"call","span":{"start":[128,12],"end":[128,45],"bytes":[3953,3986]},"callee":null},"129:12":{"kind":"call","span":{"start":[129,12],"end":[129,45],"bytes":[3998,4031]},"callee":null},"96:9":{"kind":"call","span":{"start":[96,9],"end":[96,36],"bytes":[2974,3001]},"callee":null},"97:15":{"kind":"call","span":{"start":[97,15],"end":[97,33],"bytes":[3016,3034]},"callee":null},"97:39":{"kind":"call","span":{"start":[97,39],"end":[97,47],"bytes":[3040,3048]},"callee":null}}}},"fields":{"bo":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/bo","kind":"field","type":"encoding/binary.ByteOrder","span":{"start":[23,1],"end":[23,27],"bytes":[481,507]}},"chksum1":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/chksum1","kind":"field","type":"uint32","span":{"start":[28,1],"end":[28,25],"bytes":[568,592]}},"chksum2":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/chksum2","kind":"field","type":"uint32","span":{"start":[28,1],"end":[28,25],"bytes":[568,592]}},"frameN":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/frameN","kind":"field","type":"int","span":{"start":[21,1],"end":[21,12],"bytes":[468,479]}},"logger":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[30,1],"end":[30,21],"bytes":[594,614]}},"pageSize":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/pageSize","kind":"field","type":"uint32","span":{"start":[24,1],"end":[24,17],"bytes":[508,524]}},"r":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/r","kind":"field","type":"io.ReaderAt","span":{"start":[20,1],"end":[20,20],"bytes":[448,467]}},"salt1":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/salt1","kind":"field","type":"uint32","span":{"start":[27,1],"end":[27,25],"bytes":[543,567]}},"salt2":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/salt2","kind":"field","type":"uint32","span":{"start":[27,1],"end":[27,25],"bytes":[543,567]}},"seq":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/seq","kind":"field","type":"uint32","span":{"start":[25,1],"end":[25,17],"bytes":[525,541]}}}}},"functions":{"github.com/benbjohnson/litestream.NewWALReader":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader","kind":"function","span":{"start":[34,1],"end":[40,2],"bytes":[671,865]},"signature":"github.com/benbjohnson/litestream.NewWALReader","parameters":[{"name":"rd","type":"io.ReaderAt","span":{"start":[34,1],"end":[34,77],"bytes":[671,747]}},{"name":"logger","type":"*log/slog.Logger","span":{"start":[34,1],"end":[34,77],"bytes":[671,747]}}],"return_type":"(*github.com/benbjohnson/litestream.WALReader, error)","error_channel":["error"],"metrics":{"cyclomatic":2},"body":{"36:12":{"kind":"call","span":{"start":[36,12],"end":[36,26],"bytes":[799,813]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readHeader"}}},"github.com/benbjohnson/litestream.NewWALReaderWithOffset":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReaderWithOffset","kind":"function","span":{"start":[45,1],"end":[79,2],"bytes":[1051,2374]},"signature":"github.com/benbjohnson/litestream.NewWALReaderWithOffset","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[45,1],"end":[45,143],"bytes":[1051,1193]}},{"name":"rd","type":"io.ReaderAt","span":{"start":[45,1],"end":[45,143],"bytes":[1051,1193]}},{"name":"offset","type":"int64","span":{"start":[45,1],"end":[45,143],"bytes":[1051,1193]}},{"name":"salt1","type":"uint32","span":{"start":[45,1],"end":[45,143],"bytes":[1051,1193]}},{"name":"salt2","type":"uint32","span":{"start":[45,1],"end":[45,143],"bytes":[1051,1193]}},{"name":"logger","type":"*log/slog.Logger","span":{"start":[45,1],"end":[45,143],"bytes":[1051,1193]}}],"return_type":"(*github.com/benbjohnson/litestream.WALReader, error)","error_channel":["error"],"metrics":{"cyclomatic":6},"body":{"48:15":{"kind":"call","span":{"start":[48,15],"end":[48,109],"bytes":[1323,1417]},"callee":null},"54:12":{"kind":"call","span":{"start":[54,12],"end":[54,26],"bytes":[1527,1541]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readHeader"},"55:15":{"kind":"call","span":{"start":[55,15],"end":[55,49],"bytes":[1570,1604]},"callee":null},"62:15":{"kind":"call","span":{"start":[62,15],"end":[62,53],"bytes":[1780,1818]},"callee":null},"64:15":{"kind":"call","span":{"start":[64,15],"end":[64,89],"bytes":[1877,1951]},"callee":null},"66:13":{"kind":"call","span":{"start":[66,13],"end":[66,54],"bytes":[1967,2008]},"callee":null},"71:18":{"kind":"call","span":{"start":[71,18],"end":[71,67],"bytes":[2180,2229]},"callee":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readFrame"},"71:35":{"kind":"call","span":{"start":[71,35],"end":[71,59],"bytes":[2197,2221]},"callee":null},"72:6":{"kind":"call","span":{"start":[72,6],"end":[72,15],"bytes":[2249,2258]},"callee":null},"73:16":{"kind":"call","span":{"start":[73,16],"end":[73,34],"bytes":[2283,2301]},"callee":null}}},"github.com/benbjohnson/litestream.WALChecksum":{"id":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum","kind":"function","span":{"start":[296,1],"end":[305,2],"bytes":[9082,9389]},"signature":"github.com/benbjohnson/litestream.WALChecksum","parameters":[{"name":"bo","type":"encoding/binary.ByteOrder","span":{"start":[296,1],"end":[296,82],"bytes":[9082,9163]}},{"name":"s0","type":"uint32","span":{"start":[296,1],"end":[296,82],"bytes":[9082,9163]}},{"name":"s1","type":"uint32","span":{"start":[296,1],"end":[296,82],"bytes":[9082,9163]}},{"name":"b","type":"[]byte","span":{"start":[296,1],"end":[296,82],"bytes":[9082,9163]}}],"return_type":"(uint32, uint32)","metrics":{"cyclomatic":2},"body":{"297:2":{"kind":"call","span":{"start":[297,2],"end":[297,57],"bytes":[9165,9220]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert"},"297:9":{"kind":"call","span":{"start":[297,9],"end":[297,15],"bytes":[9172,9178]},"callee":null},"300:18":{"kind":"call","span":{"start":[300,18],"end":[300,24],"bytes":[9291,9297]},"callee":null},"301:9":{"kind":"call","span":{"start":[301,9],"end":[301,25],"bytes":[9316,9332]},"callee":null},"302:9":{"kind":"call","span":{"start":[302,9],"end":[302,27],"bytes":[9346,9364]},"callee":null}}}},"content_hash":"00f72ee5d55ca0780b8d6725f51cf1c0a5be718454fba7b3cfd642b4749a3297"},"webdav/replica_client.go":{"id":"can://go/litestream/webdav/replica_client.go","kind":"module","span":{"start":[1,1],"end":[372,1],"bytes":[0,10831]},"package":"webdav","source":"package webdav\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"sort\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/studio-b12/gowebdav\"\n\t\"github.com/superfly/ltx\"\n\n\t\"github.com/benbjohnson/litestream\"\n\t\"github.com/benbjohnson/litestream/internal\"\n)\n\nfunc init() {\n\tlitestream.RegisterReplicaClientFactory(\"webdav\", NewReplicaClientFromURL)\n\tlitestream.RegisterReplicaClientFactory(\"webdavs\", NewReplicaClientFromURL)\n}\n\nconst ReplicaClientType = \"webdav\"\n\nconst (\n\tDefaultTimeout = 30 * time.Second\n)\n\nvar _ litestream.ReplicaClient = (*ReplicaClient)(nil)\n\ntype ReplicaClient struct {\n\tmu sync.Mutex\n\tclient *gowebdav.Client\n\tlogger *slog.Logger\n\n\tURL string\n\tUsername string\n\tPassword string\n\tPath string\n\tTimeout time.Duration\n}\n\nfunc NewReplicaClient() *ReplicaClient {\n\treturn \u0026ReplicaClient{\n\t\tlogger: slog.Default().WithGroup(ReplicaClientType),\n\t\tTimeout: DefaultTimeout,\n\t}\n}\n\nfunc (c *ReplicaClient) SetLogger(logger *slog.Logger) {\n\tc.logger = logger.WithGroup(ReplicaClientType)\n}\n\n// NewReplicaClientFromURL creates a new ReplicaClient from URL components.\n// This is used by the replica client factory registration.\n// URL format: webdav://[user[:password]@]host[:port]/path or webdavs://... (for HTTPS)\nfunc NewReplicaClientFromURL(scheme, host, urlPath string, query url.Values, userinfo *url.Userinfo) (litestream.ReplicaClient, error) {\n\tclient := NewReplicaClient()\n\n\t// Determine HTTP or HTTPS based on scheme\n\thttpScheme := \"http\"\n\tif scheme == \"webdavs\" {\n\t\thttpScheme = \"https\"\n\t}\n\n\t// Extract credentials from userinfo\n\tif userinfo != nil {\n\t\tclient.Username = userinfo.Username()\n\t\tclient.Password, _ = userinfo.Password()\n\t}\n\n\tif host == \"\" {\n\t\treturn nil, fmt.Errorf(\"host required for webdav replica URL\")\n\t}\n\n\tclient.URL = fmt.Sprintf(\"%s://%s\", httpScheme, host)\n\tclient.Path = urlPath\n\n\treturn client, nil\n}\n\nfunc (c *ReplicaClient) Type() string {\n\treturn ReplicaClientType\n}\n\nfunc (c *ReplicaClient) Init(ctx context.Context) error {\n\t_, err := c.init(ctx)\n\treturn err\n}\n\n// init initializes the connection and returns the WebDAV client.\nfunc (c *ReplicaClient) init(ctx context.Context) (_ *gowebdav.Client, err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif c.client != nil {\n\t\treturn c.client, nil\n\t}\n\n\tif c.URL == \"\" {\n\t\treturn nil, fmt.Errorf(\"webdav url required\")\n\t}\n\n\tc.client = gowebdav.NewClient(c.URL, c.Username, c.Password)\n\n\tc.client.SetTimeout(c.Timeout)\n\n\tif err := c.client.Connect(); err != nil {\n\t\tc.client = nil\n\t\treturn nil, fmt.Errorf(\"webdav: cannot connect to server: %w\", err)\n\t}\n\n\treturn c.client, nil\n}\n\nfunc (c *ReplicaClient) DeleteAll(ctx context.Context) error {\n\tclient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := client.RemoveAll(c.Path); err != nil \u0026\u0026 !os.IsNotExist(err) \u0026\u0026 !gowebdav.IsErrNotFound(err) {\n\t\treturn fmt.Errorf(\"webdav: cannot delete path %q: %w\", c.Path, err)\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\n\treturn nil\n}\n\nfunc (c *ReplicaClient) LTXFiles(ctx context.Context, level int, seek ltx.TXID, _ bool) (_ ltx.FileIterator, err error) {\n\tclient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdir := litestream.LTXLevelDir(c.Path, level)\n\tfiles, err := client.ReadDir(dir)\n\tif err != nil {\n\t\tif os.IsNotExist(err) || gowebdav.IsErrNotFound(err) {\n\t\t\treturn ltx.NewFileInfoSliceIterator(nil), nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"webdav: cannot read directory %q: %w\", dir, err)\n\t}\n\n\tinfos := make([]*ltx.FileInfo, 0, len(files))\n\tfor _, fi := range files {\n\t\tif fi.IsDir() {\n\t\t\tcontinue\n\t\t}\n\n\t\tminTXID, maxTXID, err := ltx.ParseFilename(path.Base(fi.Name()))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t} else if minTXID \u003c seek {\n\t\t\tcontinue\n\t\t}\n\n\t\tinfos = append(infos, \u0026ltx.FileInfo{\n\t\t\tLevel: level,\n\t\t\tMinTXID: minTXID,\n\t\t\tMaxTXID: maxTXID,\n\t\t\tSize: fi.Size(),\n\t\t\tCreatedAt: fi.ModTime().UTC(),\n\t\t})\n\t}\n\n\tsort.Slice(infos, func(i, j int) bool {\n\t\tif infos[i].MinTXID != infos[j].MinTXID {\n\t\t\treturn infos[i].MinTXID \u003c infos[j].MinTXID\n\t\t}\n\t\treturn infos[i].MaxTXID \u003c infos[j].MaxTXID\n\t})\n\n\treturn ltx.NewFileInfoSliceIterator(infos), nil\n}\n\n// WriteLTXFile writes an LTX file to the WebDAV server.\n//\n// WebDAV Upload Strategy - Temp File Approach:\n//\n// Unlike other replica backends (S3, SFTP, NATS, ABS) which stream directly using\n// internal.NewReadCounter, WebDAV requires a different approach due to library and\n// protocol constraints:\n//\n// 1. gowebdav Library Limitations:\n//\n// - WriteStream() buffers entire payload in memory for non-seekable readers\n//\n// - WriteStreamWithLength() requires both content-length AND seekable reader\n//\n// - No native support for HTTP chunked transfer encoding\n//\n// 2. Server Compatibility Issues:\n// Research shows HTTP chunked transfer encoding with WebDAV is unreliable:\n//\n// - Nginx + FastCGI: Discards request body → 0-byte files (silent data loss)\n//\n// - Lighttpd: Returns HTTP 411 (Length Required), rejects chunked requests\n//\n// - Apache + FastCGI: Request body never arrives at application\n//\n// - Only Apache + mod_php handles chunked encoding reliably (~30-40% of deployments)\n//\n// 3. LTX Header Requirement:\n// - Must peek at LTX header to extract timestamp before upload\n// - Peeking consumes data, making the reader non-seekable\n// - Cannot calculate content-length without fully reading stream\n//\n// Solution: Stage to temporary file\n//\n// To ensure universal compatibility and prevent silent data loss:\n// 1. Extract timestamp from LTX header (required for file metadata)\n// 2. Stream full contents to temporary file on disk\n// 3. Seek back to start of temp file (now seekable + known size)\n// 4. Upload using WriteStreamWithLength() with Content-Length header\n// 5. Clean up temp file\n//\n// Trade-offs:\n// - Universal compatibility with all WebDAV server configurations\n// - No risk of silent data loss or failed uploads\n// - Predictable, reliable behavior\n// - Additional disk I/O overhead\n// - Requires local disk space proportional to LTX file size\n// - Diverges from streaming pattern used by other backends\n//\n// References:\n// - https://github.com/studio-b12/gowebdav/issues/35 (chunked encoding issues)\n// - https://github.com/nextcloud/server/issues/7995 (0-byte file bug)\n// - https://evertpot.com/260/ (WebDAV chunked encoding compatibility)\nfunc (c *ReplicaClient) WriteLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, rd io.Reader) (info *ltx.FileInfo, err error) {\n\tclient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfilename := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\n\tvar buf bytes.Buffer\n\tteeReader := io.TeeReader(rd, \u0026buf)\n\n\thdr, _, err := ltx.PeekHeader(teeReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"extract timestamp from LTX header: %w\", err)\n\t}\n\ttimestamp := time.UnixMilli(hdr.Timestamp).UTC()\n\n\t// Stage to temporary file to get seekable reader with known size.\n\t// This ensures compatibility with all WebDAV servers and avoids the\n\t// unreliable chunked transfer encoding that causes silent data loss\n\t// on common configurations (Nginx+FastCGI, Lighttpd, Apache+FastCGI).\n\ttmpFile, err := os.CreateTemp(\"\", \"litestream-webdav-*.ltx\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"webdav: cannot create temp file: %w\", err)\n\t}\n\tdefer func() {\n\t\t_ = tmpFile.Close()\n\t\t_ = os.Remove(tmpFile.Name())\n\t}()\n\n\tfullReader := io.MultiReader(\u0026buf, rd)\n\n\tsize, err := io.Copy(tmpFile, fullReader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"webdav: cannot copy to temp file: %w\", err)\n\t}\n\n\tif _, err := tmpFile.Seek(0, io.SeekStart); err != nil {\n\t\treturn nil, fmt.Errorf(\"webdav: cannot seek temp file: %w\", err)\n\t}\n\n\tif err := client.MkdirAll(path.Dir(filename), 0755); err != nil {\n\t\treturn nil, fmt.Errorf(\"webdav: cannot create parent directory %q: %w\", path.Dir(filename), err)\n\t}\n\n\t// Upload with Content-Length header using seekable temp file.\n\t// WriteStreamWithLength requires both a seekable reader and known size,\n\t// which we now have from the temp file. This avoids chunked encoding\n\t// and ensures reliable uploads across all WebDAV server configurations.\n\tif err := client.WriteStreamWithLength(filename, tmpFile, size, 0644); err != nil {\n\t\treturn nil, fmt.Errorf(\"webdav: cannot write file %q: %w\", filename, err)\n\t}\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Inc()\n\tinternal.OperationBytesCounterVec.WithLabelValues(ReplicaClientType, \"PUT\").Add(float64(size))\n\n\treturn \u0026ltx.FileInfo{\n\t\tLevel: level,\n\t\tMinTXID: minTXID,\n\t\tMaxTXID: maxTXID,\n\t\tSize: size,\n\t\tCreatedAt: timestamp,\n\t}, nil\n}\n\nfunc (c *ReplicaClient) OpenLTXFile(ctx context.Context, level int, minTXID, maxTXID ltx.TXID, offset, size int64) (_ io.ReadCloser, err error) {\n\tclient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfilename := litestream.LTXFilePath(c.Path, level, minTXID, maxTXID)\n\n\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"GET\").Inc()\n\n\tif size \u003e 0 {\n\t\trc, err := client.ReadStreamRange(filename, offset, size)\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) || gowebdav.IsErrNotFound(err) {\n\t\t\t\treturn nil, os.ErrNotExist\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"webdav: cannot read file %q: %w\", filename, err)\n\t\t}\n\t\treturn internal.LimitReadCloser(rc, size), nil\n\t}\n\n\tif offset \u003e 0 {\n\t\trc, err := client.ReadStream(filename)\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) || gowebdav.IsErrNotFound(err) {\n\t\t\t\treturn nil, os.ErrNotExist\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"webdav: cannot read file %q: %w\", filename, err)\n\t\t}\n\n\t\tif _, err := io.CopyN(io.Discard, rc, offset); err != nil {\n\t\t\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\t\t\t_ = rc.Close()\n\t\t\t\treturn io.NopCloser(bytes.NewReader(nil)), nil\n\t\t\t}\n\t\t\t_ = rc.Close()\n\t\t\treturn nil, fmt.Errorf(\"webdav: cannot skip offset in file %q: %w\", filename, err)\n\t\t}\n\n\t\treturn rc, nil\n\t}\n\n\trc, err := client.ReadStream(filename)\n\tif err != nil {\n\t\tif os.IsNotExist(err) || gowebdav.IsErrNotFound(err) {\n\t\t\treturn nil, os.ErrNotExist\n\t\t}\n\t\treturn nil, fmt.Errorf(\"webdav: cannot read file %q: %w\", filename, err)\n\t}\n\treturn rc, nil\n}\n\nfunc (c *ReplicaClient) DeleteLTXFiles(ctx context.Context, a []*ltx.FileInfo) error {\n\tclient, err := c.init(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, info := range a {\n\t\tfilename := litestream.LTXFilePath(c.Path, info.Level, info.MinTXID, info.MaxTXID)\n\n\t\tc.logger.Debug(\"deleting ltx file\", \"level\", info.Level, \"minTXID\", info.MinTXID, \"maxTXID\", info.MaxTXID, \"path\", filename)\n\n\t\tif err := client.Remove(filename); err != nil \u0026\u0026 !os.IsNotExist(err) \u0026\u0026 !gowebdav.IsErrNotFound(err) {\n\t\t\treturn fmt.Errorf(\"webdav: cannot delete ltx file %q: %w\", filename, err)\n\t\t}\n\t\tinternal.OperationTotalCounterVec.WithLabelValues(ReplicaClientType, \"DELETE\").Inc()\n\t}\n\n\treturn nil\n}\n","imports":[{"name":"bytes","path":"bytes","span":{"start":[4,1],"end":[4,9],"bytes":[25,33]}},{"name":"context","path":"context","span":{"start":[5,1],"end":[5,11],"bytes":[34,44]}},{"name":"fmt","path":"fmt","span":{"start":[6,1],"end":[6,7],"bytes":[45,51]}},{"name":"io","path":"io","span":{"start":[7,1],"end":[7,6],"bytes":[52,57]}},{"name":"slog","path":"log/slog","span":{"start":[8,1],"end":[8,12],"bytes":[58,69]}},{"name":"url","path":"net/url","span":{"start":[9,1],"end":[9,11],"bytes":[70,80]}},{"name":"os","path":"os","span":{"start":[10,1],"end":[10,6],"bytes":[81,86]}},{"name":"path","path":"path","span":{"start":[11,1],"end":[11,8],"bytes":[87,94]}},{"name":"sort","path":"sort","span":{"start":[12,1],"end":[12,8],"bytes":[95,102]}},{"name":"sync","path":"sync","span":{"start":[13,1],"end":[13,8],"bytes":[103,110]}},{"name":"time","path":"time","span":{"start":[14,1],"end":[14,8],"bytes":[111,118]}},{"name":"gowebdav","path":"github.com/studio-b12/gowebdav","span":{"start":[16,1],"end":[16,34],"bytes":[120,153]}},{"name":"ltx","path":"github.com/superfly/ltx","span":{"start":[17,1],"end":[17,27],"bytes":[154,180]}},{"name":"litestream","path":"github.com/benbjohnson/litestream","span":{"start":[19,1],"end":[19,37],"bytes":[182,218]}},{"name":"internal","path":"github.com/benbjohnson/litestream/internal","span":{"start":[20,1],"end":[20,46],"bytes":[219,264]}}],"types":{"ReplicaClient":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient","kind":"struct","span":{"start":[36,1],"end":[46,2],"bytes":[576,763]},"callables":{"github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteAll":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteAll","kind":"method","span":{"start":[121,1],"end":[134,2],"bytes":[2598,3002]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteAll","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[121,1],"end":[121,63],"bytes":[2598,2660]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":3},"body":{"122:17":{"kind":"call","span":{"start":[122,17],"end":[122,28],"bytes":[2677,2688]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init"},"127:12":{"kind":"call","span":{"start":[127,12],"end":[127,36],"bytes":[2734,2758]},"callee":null},"127:53":{"kind":"call","span":{"start":[127,53],"end":[127,71],"bytes":[2775,2793]},"callee":null},"127:76":{"kind":"call","span":{"start":[127,76],"end":[127,103],"bytes":[2798,2825]},"callee":null},"128:10":{"kind":"call","span":{"start":[128,10],"end":[128,70],"bytes":[2837,2897]},"callee":null},"131:2":{"kind":"call","span":{"start":[131,2],"end":[131,80],"bytes":[2903,2981]},"callee":null}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteLTXFiles":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteLTXFiles","kind":"method","span":{"start":[353,1],"end":[371,2],"bytes":[10151,10830]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteLTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[353,1],"end":[353,87],"bytes":[10151,10237]}},{"name":"a","type":"[]*github.com/superfly/ltx.FileInfo","span":{"start":[353,1],"end":[353,87],"bytes":[10151,10237]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"354:17":{"kind":"call","span":{"start":[354,17],"end":[354,28],"bytes":[10254,10265]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init"},"360:15":{"kind":"call","span":{"start":[360,15],"end":[360,85],"bytes":[10340,10410]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"362:3":{"kind":"call","span":{"start":[362,3],"end":[362,127],"bytes":[10414,10538]},"callee":null},"364:13":{"kind":"call","span":{"start":[364,13],"end":[364,36],"bytes":[10552,10575]},"callee":null},"364:53":{"kind":"call","span":{"start":[364,53],"end":[364,71],"bytes":[10592,10610]},"callee":null},"364:76":{"kind":"call","span":{"start":[364,76],"end":[364,103],"bytes":[10615,10642]},"callee":null},"365:11":{"kind":"call","span":{"start":[365,11],"end":[365,77],"bytes":[10655,10721]},"callee":null},"367:3":{"kind":"call","span":{"start":[367,3],"end":[367,81],"bytes":[10728,10806]},"callee":null}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.Init":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.Init","kind":"method","span":{"start":[91,1],"end":[94,2],"bytes":[1942,2036]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.Init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[91,1],"end":[91,58],"bytes":[1942,1999]}}],"return_type":"error","error_channel":["error"],"metrics":{"cyclomatic":1},"body":{"92:12":{"kind":"call","span":{"start":[92,12],"end":[92,23],"bytes":[2011,2022]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init"}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles","kind":"method","span":{"start":[136,1],"end":[181,2],"bytes":[3004,4142]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[136,1],"end":[136,122],"bytes":[3004,3125]}},{"name":"level","type":"int","span":{"start":[136,1],"end":[136,122],"bytes":[3004,3125]}},{"name":"seek","type":"github.com/superfly/ltx.TXID","span":{"start":[136,1],"end":[136,122],"bytes":[3004,3125]}},{"name":"_","type":"bool","span":{"start":[136,1],"end":[136,122],"bytes":[3004,3125]}}],"return_type":"(github.com/superfly/ltx.FileIterator, error)","error_channel":["error"],"metrics":{"cyclomatic":9},"body":{"137:17":{"kind":"call","span":{"start":[137,17],"end":[137,28],"bytes":[3142,3153]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init"},"142:9":{"kind":"call","span":{"start":[142,9],"end":[142,46],"bytes":[3201,3238]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir"},"143:16":{"kind":"call","span":{"start":[143,16],"end":[143,35],"bytes":[3254,3273]},"callee":null},"145:28":{"kind":"call","span":{"start":[145,28],"end":[145,55],"bytes":[3318,3345]},"callee":null},"145:6":{"kind":"call","span":{"start":[145,6],"end":[145,24],"bytes":[3296,3314]},"callee":null},"146:11":{"kind":"call","span":{"start":[146,11],"end":[146,44],"bytes":[3358,3391]},"callee":null},"148:15":{"kind":"call","span":{"start":[148,15],"end":[148,75],"bytes":[3415,3475]},"callee":null},"151:11":{"kind":"call","span":{"start":[151,11],"end":[151,47],"bytes":[3490,3526]},"callee":null},"151:36":{"kind":"call","span":{"start":[151,36],"end":[151,46],"bytes":[3515,3525]},"callee":null},"153:6":{"kind":"call","span":{"start":[153,6],"end":[153,16],"bytes":[3560,3570]},"callee":null},"157:28":{"kind":"call","span":{"start":[157,28],"end":[157,67],"bytes":[3617,3656]},"callee":null},"157:46":{"kind":"call","span":{"start":[157,46],"end":[157,66],"bytes":[3635,3655]},"callee":null},"157:56":{"kind":"call","span":{"start":[157,56],"end":[157,65],"bytes":[3645,3654]},"callee":null},"164:11":{"kind":"call","span":{"start":[164,11],"end":[170,5],"bytes":[3743,3902]},"callee":null},"168:15":{"kind":"call","span":{"start":[168,15],"end":[168,24],"bytes":[3853,3862]},"callee":null},"169:15":{"kind":"call","span":{"start":[169,15],"end":[169,27],"bytes":[3878,3890]},"callee":null},"173:2":{"kind":"call","span":{"start":[173,2],"end":[178,4],"bytes":[3908,4090]},"callee":null},"180:9":{"kind":"call","span":{"start":[180,9],"end":[180,44],"bytes":[4100,4135]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles/github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles.closure_1","kind":"function","span":{"start":[173,1],"end":[178,4],"bytes":[3907,4090]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles.closure_1","parameters":[{"name":"i","type":"int","span":{"start":[173,1],"end":[173,41],"bytes":[3907,3947]}},{"name":"j","type":"int","span":{"start":[173,1],"end":[173,41],"bytes":[3907,3947]}}],"return_type":"bool","body":{}}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.OpenLTXFile":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.OpenLTXFile","kind":"method","span":{"start":[301,1],"end":[351,2],"bytes":[8649,10149]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.OpenLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[301,1],"end":[301,146],"bytes":[8649,8794]}},{"name":"level","type":"int","span":{"start":[301,1],"end":[301,146],"bytes":[8649,8794]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[301,1],"end":[301,146],"bytes":[8649,8794]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[301,1],"end":[301,146],"bytes":[8649,8794]}},{"name":"offset","type":"int64","span":{"start":[301,1],"end":[301,146],"bytes":[8649,8794]}},{"name":"size","type":"int64","span":{"start":[301,1],"end":[301,146],"bytes":[8649,8794]}}],"return_type":"(io.ReadCloser, error)","error_channel":["error"],"metrics":{"cyclomatic":12},"body":{"302:17":{"kind":"call","span":{"start":[302,17],"end":[302,28],"bytes":[8811,8822]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init"},"307:14":{"kind":"call","span":{"start":[307,14],"end":[307,69],"bytes":[8875,8930]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"309:2":{"kind":"call","span":{"start":[309,2],"end":[309,77],"bytes":[8933,9008]},"callee":null},"312:14":{"kind":"call","span":{"start":[312,14],"end":[312,60],"bytes":[9044,9090]},"callee":null},"314:29":{"kind":"call","span":{"start":[314,29],"end":[314,56],"bytes":[9137,9164]},"callee":null},"314:7":{"kind":"call","span":{"start":[314,7],"end":[314,25],"bytes":[9115,9133]},"callee":null},"317:16":{"kind":"call","span":{"start":[317,16],"end":[317,76],"bytes":[9218,9278]},"callee":null},"319:10":{"kind":"call","span":{"start":[319,10],"end":[319,44],"bytes":[9292,9326]},"callee":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser"},"323:14":{"kind":"call","span":{"start":[323,14],"end":[323,41],"bytes":[9366,9393]},"callee":null},"325:29":{"kind":"call","span":{"start":[325,29],"end":[325,56],"bytes":[9440,9467]},"callee":null},"325:7":{"kind":"call","span":{"start":[325,7],"end":[325,25],"bytes":[9418,9436]},"callee":null},"328:16":{"kind":"call","span":{"start":[328,16],"end":[328,76],"bytes":[9521,9581]},"callee":null},"331:16":{"kind":"call","span":{"start":[331,16],"end":[331,48],"bytes":[9602,9634]},"callee":null},"333:9":{"kind":"call","span":{"start":[333,9],"end":[333,19],"bytes":[9709,9719]},"callee":null},"334:12":{"kind":"call","span":{"start":[334,12],"end":[334,46],"bytes":[9731,9765]},"callee":null},"334:25":{"kind":"call","span":{"start":[334,25],"end":[334,45],"bytes":[9744,9764]},"callee":null},"336:8":{"kind":"call","span":{"start":[336,8],"end":[336,18],"bytes":[9783,9793]},"callee":null},"337:16":{"kind":"call","span":{"start":[337,16],"end":[337,86],"bytes":[9809,9879]},"callee":null},"343:13":{"kind":"call","span":{"start":[343,13],"end":[343,40],"bytes":[9918,9945]},"callee":null},"345:28":{"kind":"call","span":{"start":[345,28],"end":[345,55],"bytes":[9990,10017]},"callee":null},"345:6":{"kind":"call","span":{"start":[345,6],"end":[345,24],"bytes":[9968,9986]},"callee":null},"348:15":{"kind":"call","span":{"start":[348,15],"end":[348,75],"bytes":[10068,10128]},"callee":null}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.SetLogger":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.SetLogger","kind":"method","span":{"start":[55,1],"end":[57,2],"bytes":[919,1025]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.SetLogger","parameters":[{"name":"logger","type":"*log/slog.Logger","span":{"start":[55,1],"end":[55,57],"bytes":[919,975]}}],"metrics":{"cyclomatic":1},"body":{"56:13":{"kind":"call","span":{"start":[56,13],"end":[56,48],"bytes":[988,1023]},"callee":null}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.Type":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.Type","kind":"method","span":{"start":[87,1],"end":[89,2],"bytes":[1873,1940]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.Type","parameters":[],"return_type":"string","metrics":{"cyclomatic":1},"body":{}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile","kind":"method","span":{"start":[236,1],"end":[299,2],"bytes":[6374,8647]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[236,1],"end":[236,144],"bytes":[6374,6517]}},{"name":"level","type":"int","span":{"start":[236,1],"end":[236,144],"bytes":[6374,6517]}},{"name":"minTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[236,1],"end":[236,144],"bytes":[6374,6517]}},{"name":"maxTXID","type":"github.com/superfly/ltx.TXID","span":{"start":[236,1],"end":[236,144],"bytes":[6374,6517]}},{"name":"rd","type":"io.Reader","span":{"start":[236,1],"end":[236,144],"bytes":[6374,6517]}}],"return_type":"(*github.com/superfly/ltx.FileInfo, error)","error_channel":["error"],"metrics":{"cyclomatic":8},"body":{"237:17":{"kind":"call","span":{"start":[237,17],"end":[237,28],"bytes":[6534,6545]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init"},"242:14":{"kind":"call","span":{"start":[242,14],"end":[242,69],"bytes":[6598,6653]},"callee":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath"},"245:15":{"kind":"call","span":{"start":[245,15],"end":[245,37],"bytes":[6691,6713]},"callee":null},"247:17":{"kind":"call","span":{"start":[247,17],"end":[247,42],"bytes":[6731,6756]},"callee":null},"249:15":{"kind":"call","span":{"start":[249,15],"end":[249,71],"bytes":[6788,6844]},"callee":null},"251:15":{"kind":"call","span":{"start":[251,15],"end":[251,44],"bytes":[6862,6891]},"callee":null},"257:18":{"kind":"call","span":{"start":[257,18],"end":[257,62],"bytes":[7196,7240]},"callee":null},"259:15":{"kind":"call","span":{"start":[259,15],"end":[259,69],"bytes":[7272,7326]},"callee":null},"261:8":{"kind":"call","span":{"start":[261,8],"end":[264,5],"bytes":[7337,7404]},"callee":null},"266:16":{"kind":"call","span":{"start":[266,16],"end":[266,40],"bytes":[7421,7445]},"callee":null},"268:15":{"kind":"call","span":{"start":[268,15],"end":[268,43],"bytes":[7461,7489]},"callee":null},"270:15":{"kind":"call","span":{"start":[270,15],"end":[270,70],"bytes":[7521,7576]},"callee":null},"273:15":{"kind":"call","span":{"start":[273,15],"end":[273,44],"bytes":[7595,7624]},"callee":null},"274:15":{"kind":"call","span":{"start":[274,15],"end":[274,67],"bytes":[7653,7705]},"callee":null},"277:12":{"kind":"call","span":{"start":[277,12],"end":[277,53],"bytes":[7721,7762]},"callee":null},"277:28":{"kind":"call","span":{"start":[277,28],"end":[277,46],"bytes":[7737,7755]},"callee":null},"278:15":{"kind":"call","span":{"start":[278,15],"end":[278,99],"bytes":[7791,7875]},"callee":null},"278:75":{"kind":"call","span":{"start":[278,75],"end":[278,93],"bytes":[7851,7869]},"callee":null},"285:12":{"kind":"call","span":{"start":[285,12],"end":[285,71],"bytes":[8174,8233]},"callee":null},"286:15":{"kind":"call","span":{"start":[286,15],"end":[286,76],"bytes":[8262,8323]},"callee":null},"289:2":{"kind":"call","span":{"start":[289,2],"end":[289,77],"bytes":[8329,8404]},"callee":null},"290:2":{"kind":"call","span":{"start":[290,2],"end":[290,77],"bytes":[8412,8487]},"callee":null},"290:82":{"kind":"call","span":{"start":[290,82],"end":[290,95],"bytes":[8492,8505]},"callee":null}},"callables":{"closure_1":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile/github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile.closure_1","kind":"function","span":{"start":[261,1],"end":[264,5],"bytes":[7330,7404]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile.closure_1","parameters":[],"body":{"262:7":{"kind":"call","span":{"start":[262,7],"end":[262,22],"bytes":[7352,7367]},"callee":null},"263:17":{"kind":"call","span":{"start":[263,17],"end":[263,31],"bytes":[7384,7398]},"callee":null},"263:7":{"kind":"call","span":{"start":[263,7],"end":[263,32],"bytes":[7374,7399]},"callee":null}}}}},"github.com/benbjohnson/litestream/webdav.ReplicaClient.init":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","kind":"method","span":{"start":[97,1],"end":[119,2],"bytes":[2104,2596]},"signature":"github.com/benbjohnson/litestream/webdav.ReplicaClient.init","parameters":[{"name":"ctx","type":"context.Context","span":{"start":[97,1],"end":[97,84],"bytes":[2104,2187]}}],"return_type":"(*github.com/studio-b12/gowebdav.Client, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"106:15":{"kind":"call","span":{"start":[106,15],"end":[106,48],"bytes":[2304,2337]},"callee":null},"109:13":{"kind":"call","span":{"start":[109,13],"end":[109,62],"bytes":[2354,2403]},"callee":null},"111:2":{"kind":"call","span":{"start":[111,2],"end":[111,32],"bytes":[2406,2436]},"callee":null},"113:12":{"kind":"call","span":{"start":[113,12],"end":[113,30],"bytes":[2449,2467]},"callee":null},"115:15":{"kind":"call","span":{"start":[115,15],"end":[115,70],"bytes":[2513,2568]},"callee":null},"98:2":{"kind":"call","span":{"start":[98,2],"end":[98,13],"bytes":[2189,2200]},"callee":null},"99:8":{"kind":"call","span":{"start":[99,8],"end":[99,21],"bytes":[2208,2221]},"callee":null}}}},"fields":{"Password":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/Password","kind":"field","type":"string","span":{"start":[43,1],"end":[43,17],"bytes":[704,720]}},"Path":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/Path","kind":"field","type":"string","span":{"start":[44,1],"end":[44,17],"bytes":[721,737]}},"Timeout":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/Timeout","kind":"field","type":"time.Duration","span":{"start":[45,1],"end":[45,24],"bytes":[738,761]}},"URL":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/URL","kind":"field","type":"string","span":{"start":[41,1],"end":[41,17],"bytes":[670,686]}},"Username":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/Username","kind":"field","type":"string","span":{"start":[42,1],"end":[42,17],"bytes":[687,703]}},"client":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/client","kind":"field","type":"*github.com/studio-b12/gowebdav.Client","span":{"start":[38,1],"end":[38,25],"bytes":[623,647]}},"logger":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/logger","kind":"field","type":"*log/slog.Logger","span":{"start":[39,1],"end":[39,21],"bytes":[648,668]}},"mu":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/mu","kind":"field","type":"sync.Mutex","span":{"start":[37,1],"end":[37,19],"bytes":[604,622]}}}}},"functions":{"github.com/benbjohnson/litestream/webdav.NewReplicaClient":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient","kind":"function","span":{"start":[48,1],"end":[53,2],"bytes":[765,917]},"signature":"github.com/benbjohnson/litestream/webdav.NewReplicaClient","parameters":[],"return_type":"*github.com/benbjohnson/litestream/webdav.ReplicaClient","metrics":{"cyclomatic":1},"body":{"50:12":{"kind":"call","span":{"start":[50,12],"end":[50,26],"bytes":[841,855]},"callee":null}}},"github.com/benbjohnson/litestream/webdav.NewReplicaClientFromURL":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClientFromURL","kind":"function","span":{"start":[62,1],"end":[85,2],"bytes":[1251,1871]},"signature":"github.com/benbjohnson/litestream/webdav.NewReplicaClientFromURL","parameters":[{"name":"scheme","type":"string","span":{"start":[62,1],"end":[62,137],"bytes":[1251,1387]}},{"name":"host","type":"string","span":{"start":[62,1],"end":[62,137],"bytes":[1251,1387]}},{"name":"urlPath","type":"string","span":{"start":[62,1],"end":[62,137],"bytes":[1251,1387]}},{"name":"query","type":"net/url.Values","span":{"start":[62,1],"end":[62,137],"bytes":[1251,1387]}},{"name":"userinfo","type":"*net/url.Userinfo","span":{"start":[62,1],"end":[62,137],"bytes":[1251,1387]}}],"return_type":"(github.com/benbjohnson/litestream.ReplicaClient, error)","error_channel":["error"],"metrics":{"cyclomatic":4},"body":{"63:12":{"kind":"call","span":{"start":[63,12],"end":[63,30],"bytes":[1399,1417]},"callee":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient"},"73:21":{"kind":"call","span":{"start":[73,21],"end":[73,40],"bytes":[1618,1637]},"callee":null},"74:24":{"kind":"call","span":{"start":[74,24],"end":[74,43],"bytes":[1661,1680]},"callee":null},"78:15":{"kind":"call","span":{"start":[78,15],"end":[78,65],"bytes":[1716,1766]},"callee":null},"81:15":{"kind":"call","span":{"start":[81,15],"end":[81,55],"bytes":[1785,1825]},"callee":null}}},"github.com/benbjohnson/litestream/webdav.init":{"id":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.init","kind":"function","span":{"start":[23,1],"end":[26,2],"bytes":[268,436]},"signature":"github.com/benbjohnson/litestream/webdav.init","parameters":[],"metrics":{"cyclomatic":1},"body":{"24:2":{"kind":"call","span":{"start":[24,2],"end":[24,76],"bytes":[283,357]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"},"25:2":{"kind":"call","span":{"start":[25,2],"end":[25,77],"bytes":[359,434]},"callee":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory"}}}},"content_hash":"0663d9d2f104f9e08f85fb1d08c60dd84bbaa0f77b692584f583b18f7f092a35"}},"call_graph":[{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClientFromURL","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteAll","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.LTXFiles","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.LTXFiles","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.newLTXFileIterator","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ReplicaClient/github.com/benbjohnson/litestream/abs.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.Next","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.ltxFileIterator/github.com/benbjohnson/litestream/abs.ltxFileIterator.loadNextPage","prov":["go/types"],"weight":1},{"src":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.newLTXFileIterator","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.Run","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.calculateRate","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.sinApprox","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.ensureTestTable","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.finalReport","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.generateLoad","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.reportStats","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.worker","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.calculateRate","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.worker","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.worker","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performWrite","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","dst":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Usage","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","dst":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream-test.VersionCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","dst":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","dst":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.main","dst":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.Main/github.com/benbjohnson/litestream/cmd/litestream-test.Main.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.main","dst":"can://go/litestream/cmd/litestream-test/main.go/github.com/benbjohnson/litestream/cmd/litestream-test.NewMain","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.parseSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase","dst":"can://go/litestream/cmd/litestream-test/load.go/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand/github.com/benbjohnson/litestream/cmd/litestream-test.LoadCommand.performRead","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase","dst":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateTable","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.PopulateCommand.populateDatabase","dst":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.Run","dst":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","dst":"can://go/litestream/cmd/litestream-test/populate.go/github.com/benbjohnson/litestream/cmd/litestream-test.getDatabaseSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","dst":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.deleteFromTable","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","dst":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.getTableList","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","dst":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runCheckpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.shrinkDatabase","dst":"can://go/litestream/cmd/litestream-test/shrink.go/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ShrinkCommand.runVacuum","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performIntegrityCheck","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performQuickCheck","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performRestore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.reportResults","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.Run","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.validateLTXContinuity","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performChecksumCheck","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.calculateDBChecksum","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getRowCount","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.performDataValidation","dst":"can://go/litestream/cmd/litestream-test/validate.go/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand/github.com/benbjohnson/litestream/cmd/litestream-test.ValidateCommand.getTableList","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Usage","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.flushPendingEvents","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addDirectoryWatch","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDirectoryWatch","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.shouldSkipPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.matchesPattern","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.IsSQLiteDatabase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabase","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.removeDatabasesUnder","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.flushPendingEvents","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handleEvent","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.handlePotentialDatabase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.scanDirectory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Usage","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ByteSize/github.com/benbjohnson/litestream/cmd/litestream.ByteSize.UnmarshalYAML","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseByteSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.Validate","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.isValidHeartbeatURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.propagateGlobalSettings","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings/github.com/benbjohnson/litestream/cmd/litestream.ReplicaSettings.SetDefaults","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.DefaultSocketConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/databases.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand/github.com/benbjohnson/litestream/cmd/litestream.DatabasesCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/info.go/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand/github.com/benbjohnson/litestream/cmd/litestream.InfoCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/list.go/github.com/benbjohnson/litestream/cmd/litestream.ListCommand/github.com/benbjohnson/litestream/cmd/litestream.ListCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/ltx.go/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand/github.com/benbjohnson/litestream/cmd/litestream.LTXCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Usage","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.isWindowsService","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.runWindowsService","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.signalChan","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicateCommand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.SetDone","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/start.go/github.com/benbjohnson/litestream/cmd/litestream.StartCommand/github.com/benbjohnson/litestream/cmd/litestream.StartCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/stop.go/github.com/benbjohnson/litestream/cmd/litestream.StopCommand/github.com/benbjohnson/litestream/cmd/litestream.StopCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","dst":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetMetaPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.FindSQLiteDatabases","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MetaPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newABSReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newSFTPReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newWebDAVReplicaClientFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.SetLogger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.ApplyDefault","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.boolSetting/github.com/benbjohnson/litestream/cmd/litestream.boolSetting.Set","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newBoolSetting","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsBackblazeEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsCloudflareR2Endpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsDigitalOceanEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsFilebaseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsHetznerEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsMinIOEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsScalewayEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsSupabaseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsTigrisEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegionFromS3ARN","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewS3ReplicaClientFromConfig","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.OpenConfigFile","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.Validate","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.applyDBSnapshotConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.propagateGlobalSettings","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.OpenConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ParseConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ReplicaTypeFromURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig/github.com/benbjohnson/litestream/cmd/litestream.ReplicaConfig.ReplicaType","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.appendRelativePathToURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.StripSQLitePrefix","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.init","dst":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.main","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Main/github.com/benbjohnson/litestream/cmd/litestream.Main.Run","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.main","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewMain","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.main","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newABSReplicaClientFromConfig","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.cloneReplicaConfigWithRelativePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.deriveMetaPathForDirectoryEntry","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newDBFromDirectoryEntry","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newFileReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newGSReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newNATSReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newOSSReplicaClientFromConfig","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newSFTPReplicaClientFromConfig","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.newWebDAVReplicaClientFromConfig","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.DatabasesTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.InfoTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.LTXTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.ResetTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.StatusTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.VersionTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Run","dst":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.registerDisplayStatus","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/register.go/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand/github.com/benbjohnson/litestream/cmd/litestream.RegisterCommand.Usage","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.applyLitestreamEnv","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Close","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.ParseFlags","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.NewDirectoryMonitor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.CompactionLevels","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBsFromDirectoryConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.MCPServer/github.com/benbjohnson/litestream/cmd/litestream.MCPServer.Start","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.NewMCP","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.NewHeartbeatClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.NewServer","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.Start","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.NewStore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetDone","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetL0Retention","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetShutdownSyncInterval","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetShutdownSyncTimeout","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Run","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SetVerifyCompaction","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.Usage","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.expand","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.restoreIfNeeded","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/replicate.go/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand/github.com/benbjohnson/litestream/cmd/litestream.ReplicateCommand.runOnce","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.localLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MetaPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/reset.go/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand/github.com/benbjohnson/litestream/cmd/litestream.ResetCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/main_notwindows.go/github.com/benbjohnson/litestream/cmd/litestream.signalChan","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/mcp.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreTool","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.prepareOutputPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Run","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.Usage","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.dryRunPlan","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.Config/github.com/benbjohnson/litestream/cmd/litestream.Config.DBConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromConfig","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewReplicaFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.loadFromURL","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CalcRestoreTarget","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.restoreTXID","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/restore.go/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand/github.com/benbjohnson/litestream/cmd/litestream.RestoreCommand.restoreTXID","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.NewDBFromConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.ReadConfigFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.registerConfigFlag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","dst":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Run","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.Usage","dst":"can://go/litestream/cmd/litestream/main.go/github.com/benbjohnson/litestream/cmd/litestream.DefaultConfigPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/status.go/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand/github.com/benbjohnson/litestream/cmd/litestream.StatusCommand.getDBStatus","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run","dst":"can://go/litestream/cmd/litestream/directory_watcher.go/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor/github.com/benbjohnson/litestream/cmd/litestream.DirectoryMonitor.addInitialWatches","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run","dst":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.printSyncResult","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand/github.com/benbjohnson/litestream/cmd/litestream.SyncCommand.Run","dst":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/sync.go/github.com/benbjohnson/litestream/cmd/litestream.printSyncResult","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run","dst":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.printUnregisterResult","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/unregister.go/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand/github.com/benbjohnson/litestream/cmd/litestream.UnregisterCommand.Run","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.InitLog","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand/github.com/benbjohnson/litestream/cmd/litestream.VersionCommand.Run","dst":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.vcsSettings","prov":["go/types"],"weight":1},{"src":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.resolveVersion","dst":"can://go/litestream/cmd/litestream/version.go/github.com/benbjohnson/litestream/cmd/litestream.vcsSettings","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.Level","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.NextLevel","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.PrevLevel","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.MaxLevel","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.MaxLTXFileInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.VerifyLevelConsistency","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.NewResumableReader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceL0Retention","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceL0Retention","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceSnapshotRetention","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceSnapshotRetention","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.MaxLTXFileInfo","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.VerifyLevelConsistency","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.CRC64","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.CRC64","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.CRC64","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.CRC64","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncDiag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.deleteMetrics","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.releaseReadLock","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncReplicaWithRetry","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Stop","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Compact","dst":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.Compact","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Compact","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Compact","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceRetentionByTXID","dst":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.EnforceRetentionByTXID","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnsureExists","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnsureExists","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewRestoreOptions","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnsureExists","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTXFileInfo","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTXFileInfo","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.initMetrics","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.removeTmpFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetLogger","dst":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.Compactor/github.com/benbjohnson/litestream.Compactor.setLogger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetLogger","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetLogger","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.SetLogger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SnapshotReader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SnapshotReader","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SnapshotReader","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotReader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SnapshotReader","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/github.com/benbjohnson/litestream.snapshotReadPosition.close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncOnce","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncAndWait","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncAndWait","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncStatus","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncStatus","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.calcPos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncDiag","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.effectiveTruncatePageN","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isSQLiteBusyError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.bumpLitestreamSeq","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointWithExecutor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.rollback","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.deleteLocalLTXFile","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.deleteLocalLTXFile","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.detectFullCheckpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.detectFullCheckpoint","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.detectFullCheckpoint","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.FrameSaltsUntil","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.bumpLitestreamSeq","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.effectiveTruncatePageN","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.calcWALSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.acquireReadLock","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.execCheckpoint","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.releaseReadLock","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.acquireReadLock","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkDatabaseBehindReplica","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setPersistWAL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Start","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lastPageMatch","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lastPageMatch","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALFileAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncExecutorWait","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.finishSyncExecutorWait","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.monitor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.monitor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.monitor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.monitor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.removeTmpFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.openLocalLTXFile","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.releaseReadLock","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.rollback","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.PageSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotPosition","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.snapshotWALEndOffset","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.invalidatePosCache","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.writeLTXFromDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.writeLTXFromWAL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.isDiskFullError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile/github.com/benbjohnson/litestream.ltxStagingFile.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.ltxStagingFile/github.com/benbjohnson/litestream.ltxStagingFile.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReaderWithOffset","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.applySyncExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.beginSyncDiag","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.checkpointIfNeeded","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ensureWALExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.exceedsTruncateThreshold","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.newSyncExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.syncExecutor/github.com/benbjohnson/litestream.syncExecutor.applySyncResult","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lockExec","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncLocked","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.syncReplicaWithRetry","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verify","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verify","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSync","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.setSyncDiagPhase","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyAndSyncWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.detectFullCheckpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.lastPageMatch","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.verifyWithExecutor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.readWALHeader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.walFileSize","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.WALPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","dst":"can://go/litestream/compactor.go/github.com/benbjohnson/litestream.NewCompactor","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.initMetrics","prov":["go/types"],"weight":1},{"src":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadCloser/github.com/benbjohnson/litestream.snapshotReadCloser.Close","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.snapshotReadPosition/github.com/benbjohnson/litestream.snapshotReadPosition.close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClientFromURL","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.GenerationsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.IsGenerationIDV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFiles","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXLevelDir","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenSnapshotV3","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenSnapshotV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatSnapshotFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenWALSegmentV3","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.OpenWALSegmentV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.SnapshotsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseSnapshotFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WALSegmentsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.DirInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.FileInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.db","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.CreateFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.ReplicaClient/github.com/benbjohnson/litestream/file.ReplicaClient.db","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClientFromURL","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteAll","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteAll","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.LTXFiles","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.LTXFiles","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.newLTXFileIterator","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.LTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.Hexdump","dst":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.CreateFile","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.Fileinfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.fixRootDirectory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCloser/github.com/benbjohnson/litestream/internal.ReadCloser.Close","dst":"can://go/litestream/internal/hexdump.go/github.com/benbjohnson/litestream/internal.toChar","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.LockFileExclusive","dst":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.UnlockFile","dst":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.setFcntlLock","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.ReplaceAttr","dst":"can://go/litestream/internal/log.go/github.com/benbjohnson/litestream/internal.CleanSourcePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.LTXFileOpener/github.com/benbjohnson/litestream/internal.LTXFileOpener.OpenLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.dropStream","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.readStream","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.retry","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.setStream","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.Read","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.ResumableReader/github.com/benbjohnson/litestream/internal.ResumableReader.stream","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDBs","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseDBs","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustCloseSQLDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustDeleteAll","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.DeleteAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustDeleteAll","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDB","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBAt","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBs","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBs","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenDBs","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.MustOpenSQLDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewABSReplicaClient","dst":"can://go/litestream/abs/replica_client.go/github.com/benbjohnson/litestream/abs.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewB2ReplicaClient","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient","dst":"can://go/litestream/file/replica_client.go/github.com/benbjohnson/litestream/file.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient","dst":"can://go/litestream/gs/replica_client.go/github.com/benbjohnson/litestream/gs.ReplicaClient/github.com/benbjohnson/litestream/gs.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewNATSReplicaClient","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewOSSReplicaClient","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewR2ReplicaClient","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewABSReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewB2ReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewFileReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewGSReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewNATSReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewOSSReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewR2ReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewS3ReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewSFTPReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewTigrisReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewReplicaClient","dst":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewWebDAVReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewS3ReplicaClient","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewSFTPReplicaClient","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewTigrisReplicaClient","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/internal/testingutil/testingutil.go/github.com/benbjohnson/litestream/internal/testingutil.NewWebDAVReplicaClient","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.Checksum","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert","prov":["go/types"],"weight":1},{"src":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClientFromURL","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteAll","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteAll","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.connect","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.initObjectStore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.LTXFiles","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.parseLTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.isNotFoundError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.connect","dst":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.options","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.ReplicaClient/github.com/benbjohnson/litestream/nats.ReplicaClient.ltxPath","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/nats/replica_client.go/github.com/benbjohnson/litestream/nats.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClientFromURL","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.NewReplicaClientFromURL","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseURL","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ParseHost","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteAll","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteAll","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.deleteResultError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.deleteResultError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.LTXFiles","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.LTXFiles","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.newFileIterator","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.Next","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.fetchMetadataBatch","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.Next","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.initPaginator","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.fileIterator/github.com/benbjohnson/litestream/oss.fileIterator.initPaginator","dst":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.ReplicaClient/github.com/benbjohnson/litestream/oss.ReplicaClient.ltxPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/oss/replica_client.go/github.com/benbjohnson/litestream/oss.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreCandidateBetter","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.refresh","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplicaWithClient","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ReadTXIDFile","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.TXIDPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CalcRestoreTarget","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBounds","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CalcRestoreTarget","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.CreatedAt","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.Type","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.MkdirAll","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/internal/resumable_reader.go/github.com/benbjohnson/litestream/internal.NewResumableReader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.CalcRestorePlan","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.ReadTXIDFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Logger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkIntegrity","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Restore","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.DirInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.DB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.checkIntegrity","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.filterWALSegmentsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.findBestSnapshotV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.RestoreV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Start","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Stop","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Sync","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBounds","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.WALSegmentsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.ValidateLevel","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.appendWALSegmentV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.OpenWALSegmentV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile","dst":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.LockFileExclusive","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile","dst":"can://go/litestream/internal/lock_unix.go/github.com/benbjohnson/litestream/internal.UnlockFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyWALSegmentsV3","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.appendWALSegmentV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.calcPos","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.MaxLTXFileInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.downloadSnapshotV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.OpenSnapshotV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.fillFollowGap","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FindLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.findBestSnapshotV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.sortSnapshotsV3ByCreatedAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.GenerationsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ReplicaClientV3/github.com/benbjohnson/litestream.ReplicaClientV3.SnapshotsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.applyNewLTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.follow","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Notify","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.ResetLocalState","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXError/github.com/benbjohnson/litestream.LTXError.IsAutoRecoverable","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.monitor","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBounds","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.TimeBoundsV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestLTXSnapshotForTimestamp","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.shouldUseV3Restore","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.findBestV3SnapshotForTimestamp","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.sync","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.RecordSuccessfulSync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.SetPos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.calcPos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.lockSync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.syncOnce","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LTXPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.NewLTXError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.uploadLTXFile","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.WriteLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile","dst":"can://go/litestream/internal/internal_unix.go/github.com/benbjohnson/litestream/internal.FsyncDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.WriteTXIDFile","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.TXIDPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.refresh","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreCandidateBetter","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.refresh","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.restoreLevelCursor/github.com/benbjohnson/litestream.restoreLevelCursor.ensureCurrent","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FetchLTXHeader","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FetchPageIndex","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.fetchPageIndexData","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.FindLTXFiles","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.LTXFiles","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.fetchPageIndexData","dst":"can://go/litestream/replica_client.go/github.com/benbjohnson/litestream.ReplicaClient/github.com/benbjohnson/litestream.ReplicaClient.OpenLTXFile","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsLocalEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsBackblazeEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsCloudflareR2Endpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsDigitalOceanEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsFilebaseEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsGoogleCloudStorageEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsHetznerEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsLocalEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsMinIOEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsScalewayEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsSupabaseEndpoint","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURLWithQuery","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ReplicaTypeFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ReplicaTypeFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.ParseReplicaURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.CleanReplicaURLPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseS3AccessPointURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.splitS3AccessPointARN","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.AcquireLease","dst":"can://go/litestream/leaser.go/github.com/benbjohnson/litestream.Lease/github.com/benbjohnson/litestream.Lease.IsExpired","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.AcquireLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.AcquireLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.DeleteObject","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isNotFoundError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isPreconditionFailed","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.ReleaseLease","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.RenewLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.GetObject","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isNotFoundError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.readLease","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.lockKey","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.S3API/github.com/benbjohnson/litestream/s3.S3API.PutObject","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.Leaser/github.com/benbjohnson/litestream/s3.Leaser.writeLease","dst":"can://go/litestream/s3/leaser.go/github.com/benbjohnson/litestream/s3.isPreconditionFailed","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.BoolQueryValue","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.EnsureEndpointScheme","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IntQueryValue","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsBackblazeEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsCloudflareR2Endpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsDigitalOceanEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsFilebaseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsHetznerEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsMinIOEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsScalewayEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsSupabaseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.IsTigrisEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegionFromS3ARN","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.NewReplicaClientFromURL","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseURL","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ParseHost","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteAll","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteAll","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.deleteOutputError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.deleteOutputError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.GenerationsV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.GenerationsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.GenerationsPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.GenerationsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.IsGenerationIDV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.findBucketRegion","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.validateSSEConfig","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.parseS3DebugEnv","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.LTXFiles","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.LTXFiles","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.newFileIterator","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenSnapshotV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewLZ4Reader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.isNotExists","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.OpenWALSegmentV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseSnapshotFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.SnapshotsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotsPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.ParseWALSegmentFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WALSegmentsV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.Init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.findBucketRegion","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.configureEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadSizedLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadLTX","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadSizedLTX","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.NewReadCounter","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX","dst":"can://go/litestream/internal/internal.go/github.com/benbjohnson/litestream/internal.ReadCounter/github.com/benbjohnson/litestream/internal.ReadCounter.N","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.uploadStreamedLTX","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.ReplicaClient/github.com/benbjohnson/litestream/s3.ReplicaClient.putObjectInput","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.computeDeleteObjectsContentMD5","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.marshalDeleteObjects","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeDeleteDocument","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifierList","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifierList","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeObjectIdentifier","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.Next","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.fileIterator/github.com/benbjohnson/litestream/s3.fileIterator.fetchMetadataBatch","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.marshalDeleteObjects","dst":"can://go/litestream/s3/replica_client.go/github.com/benbjohnson/litestream/s3.encodeDeleteDocument","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleInfo","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleList","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleList","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleList","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleList","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleList","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.NewDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.NewReplica","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.NewReplicaClientFromURL","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleRegister","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnableDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStart","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleStop","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DisableDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSync","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSync","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSync","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSync","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncDiagnostic","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleSyncStatus","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleTXID","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleTXID","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.expandPath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleTXID","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleTXID","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleUnregister","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleUnregister","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleUnregister","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleUnregister","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.handleUnregister","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/server.go/github.com/benbjohnson/litestream.Server/github.com/benbjohnson/litestream.Server.storeTXID","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClientFromURL","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Cleanup","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteAll","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.Init","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.LTXFiles","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.ReplicaClient/github.com/benbjohnson/litestream/sftp.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/sftp/replica_client.go/github.com/benbjohnson/litestream/sftp.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.NewStore","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.NewStore","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSONError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Close","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/github.com/benbjohnson/litestream.CompactionLevel.PrevCompactionAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.PrevLevel","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Compact","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTXFileInfo","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.PageSize","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Snapshot","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DisableDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DisableDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DisableDB","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnableDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnableDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Open","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnableDB","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceRetentionByTXID","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceSnapshotRetention","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevels/github.com/benbjohnson/litestream.CompactionLevels.Validate","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Open","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SetLogger","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.parseEndpoint","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","dst":"can://go/litestream/server.go/github.com/benbjohnson/litestream.writeJSON","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.RegisterDB","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.MaxLTX","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Sync","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.SyncAndWait","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.Pos","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.SyncDB","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.FindDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Close","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.UnregisterDB","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Validate","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Validate","dst":"can://go/litestream/replica.go/github.com/benbjohnson/litestream.Replica/github.com/benbjohnson/litestream.Replica.ValidateLevel","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.allDatabasesHealthy","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.allDatabasesHealthy","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.LastSuccessfulSyncAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.allDatabasesHealthy","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/compaction_level.go/github.com/benbjohnson/litestream.CompactionLevel/github.com/benbjohnson/litestream.CompactionLevel.NextCompactionAt","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.IsOpen","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.CompactDB","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorCompactionLevel","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.EnforceSnapshotRetention","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorHeartbeats","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorL0Retention","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.EnforceL0RetentionByTime","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorL0Retention","dst":"can://go/litestream/db.go/github.com/benbjohnson/litestream.DB/github.com/benbjohnson/litestream.DB.Path","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorL0Retention","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorL0Retention","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.DBs","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorValidation","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.isShutdownError","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.monitorValidation","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.Validate","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","dst":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.Ping","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","dst":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.RecordPing","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","dst":"can://go/litestream/heartbeat.go/github.com/benbjohnson/litestream.HeartbeatClient/github.com/benbjohnson/litestream.HeartbeatClient.ShouldPing","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.sendHeartbeatIfNeeded","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.allDatabasesHealthy","prov":["go/types"],"weight":1},{"src":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.hasHeartbeatConfigLocked","prov":["go/types"],"weight":1},{"src":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/github.com/benbjohnson/litestream.PosV3.String","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.PosV3/github.com/benbjohnson/litestream.PosV3.IsZero","prov":["go/types"],"weight":1},{"src":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotPathV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatSnapshotFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotPathV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.SnapshotsPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentPathV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.FormatWALSegmentFilenameV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALSegmentPathV3","dst":"can://go/litestream/v3.go/github.com/benbjohnson/litestream.WALPathV3","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReader","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readHeader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReaderWithOffset","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readFrame","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.NewWALReaderWithOffset","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readHeader","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.assert","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.PageMap","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.ReadFrame","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readFrame","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap","dst":"can://go/litestream/store.go/github.com/benbjohnson/litestream.Store/github.com/benbjohnson/litestream.Store.startHeartbeatMonitorIfNeeded","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.Offset","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.pageMap","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.ReadFrame","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readFrame","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum","prov":["go/types"],"weight":1},{"src":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALReader/github.com/benbjohnson/litestream.WALReader.readHeader","dst":"can://go/litestream/wal_reader.go/github.com/benbjohnson/litestream.WALChecksum","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClientFromURL","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.NewReplicaClient","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteAll","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.DeleteLTXFiles","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.Init","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXLevelDir","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.LTXFiles","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/internal/limit_read_closer.go/github.com/benbjohnson/litestream/internal.LimitReadCloser","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.OpenLTXFile","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/litestream.go/github.com/benbjohnson/litestream.LTXFilePath","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.WriteLTXFile","dst":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.ReplicaClient/github.com/benbjohnson/litestream/webdav.ReplicaClient.init","prov":["go/types"],"weight":1},{"src":"can://go/litestream/webdav/replica_client.go/github.com/benbjohnson/litestream/webdav.init","dst":"can://go/litestream/replica_url.go/github.com/benbjohnson/litestream.RegisterReplicaClientFactory","prov":["go/types"],"weight":1}]}} \ No newline at end of file diff --git a/tests/resources/go/analysis_json/v2/README.md b/tests/resources/go/analysis_json/v2/README.md new file mode 100644 index 00000000..1ca31787 --- /dev/null +++ b/tests/resources/go/analysis_json/v2/README.md @@ -0,0 +1,30 @@ +The Go analysis fixture is a single schema-v2 output committed one directory up, at +`tests/resources/go/analysis.json`, generated by **codeanalyzer-go** (`cango`) on the application in +`tests/resources/go/litestream.zip` (the [litestream](https://github.com/benbjohnson/litestream) Go +project). It is the real `can://go/litestream` corpus: 55 modules, 959 call-graph edges, +`max_level: 2`. + + # unzip litestream.zip -> litestream/ (carries go.mod at its root) + cango -i litestream --app-name litestream -a 2 -o --cache-dir --skip-tests + +That is the command `GoCodeanalyzer._argv` builds (`cldk/analysis/go/codeanalyzer/codeanalyzer.py`), +with `--app-name` defaulting to the input directory's basename (`litestream`). `-a` is capped at +**2**: cango has no L3/L4, so this corpus is a single level-2 file — there is no `a1`/`a2`/`a3`/`a4` +per-level split, unlike the TypeScript and Java resource trees, because cango's L1 output is a strict +subset of its L2 output and nothing in the suite needs the shallower generation. + +**No version pin yet.** codeanalyzer-go has not cut a release, so there is no wheel to pin and no +`analyzer.version` to assert against (the committed JSON stamps `"version": "0.1.0"`, a dev build). +The binary is resolved at run time from `$CODEANALYZER_GO_BIN` (a locally built `cango`) or, once it +ships, the `codeanalyzer-go` PyPI wheel. `tests/analysis/go/test_go_e2e.py` unzips `litestream.zip` +and runs whichever binary it finds against it, skipping cleanly when neither is present. When the +release lands and the pin is added, regenerate `analysis.json` with the pinned binary and record its +version here. + +**Schema v2, no `--analysis-schema` flag.** Earlier generations passed `--analysis-schema 2` to stop +cango emitting legacy v1; that flag was removed (`_argv` no longer sends it — the binary defaults to +v2). The committed JSON carries `"schema_version": "2.0.0"`; if a regeneration emits v1, the models +(an `extra="forbid"` mirror of canonical schema v2) refuse it rather than parse it. + +**The application is committed as `tests/resources/go/litestream.zip`** so a regeneration runs on +exactly the source `analysis.json` describes. Regenerate the JSON whenever the zip changes. diff --git a/tests/resources/go/litestream.zip b/tests/resources/go/litestream.zip new file mode 100644 index 0000000000000000000000000000000000000000..0089680ead7217d09b41113096bd51b700aed3ce GIT binary patch literal 2072430 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
tMl!+nio-SAFC^ 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

Or6?dQ&st2xuLXzPBTL$TLhn)V|^Dx#9kX{khT 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

@xewwzlcpY*UNJi?cUms-aN( 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�zLVeI69=TBeK2*#egFcGfMGB(zt;I3l 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ΣnYj5&QLVo2E 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%0ATuW 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%0AU# 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

fbNU1#i0&DD--A3-OFlx&x|Ym*mFy4Zn8R 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

c6QV+ zD%`*?6wq5=p*?o7K}3k z(EXAm4WQ6G30bGPVMzkEY;gCUA>lnU96Y!YaR^hQ1~fq18U#zy4Po;I)-v76UJ8;7 zH@$HtC{LN`H*$#^Ke;-(IAh;D6e@9O#5aQkg?cdja0B`NPKII**)*-lODX|Hj2$4#(`#oFr6ls5Eufd@Z5YbCM9N!FM zGWE+`jl(Yi{XfUJ@FoJG3oZK~65UxcwV>qU!_JBWP?&gFac30SEyI1-iAb`)tln$dN0YnQx!NjQu-O?}{ zF3WdKUOLsw$Cl#*^aW(;GYqlsE)%HA3Sk;{mD3`H;Y8 zgJho$fkgHa07F(H76HPW7)0tZPUiIt%QLXMh7J!Vqnmma)0xg+p5@& z{Q(H>`HjaS9lq1WrSF-|sw}xz$3H;o zv(97tom9!5#0R0Bgm0hFfyC1Si~6YrF|QV5FQ$y?ipIu=ZUgjB2KYE*KGO9!e*>N@(s9(wE`)+%HZlk8bBH>j4eENSM@ zk!m1u@J0d1g#EV6b&zv1vWr54u&L0Jx6{D7WLr$*c<@0$19pixn70^I$QjrKNWM!Mts)W$1NPrVdSA$SftY5RptFY(^bceCTj%h-_vSfMbo zM}=q~M~J!m-=Yocb+ zS`&EZZLJW*sz52&jv;1*Efons0U!t#awt9ylZjT>CT!VThPU>9$}Jmuh?iKO?y#nC(<(m7Lja4 zq;~_>AH{b|`(JFfP0|K4RG8};A&yKxN!sHt+Q$#N{9>h~pi#zHzqfRKL~J4(8x*qu zZyzSz)vWRV0x znQ3tT=)TrfypBhQX5Q`#1GU1X#8gH~T$ai`O2G!C!vqCuQ%ms>gLeF!%qJI8Y9_zR zB+AI#DM#~YUzAY&tegC0TNwu0ld$&9>~DpBe{_dlR|8m@aKHZN9N+qa_Wb&t^T?(P z=grv^tCOo8V0rldeX%5Em>esgd9pf(0lfECcB!_%hX)1umBAmP!Nrrv+Doq?)tCb? z$vb|49~kbU)1D2ZYwP%E#h&$pt&Tt9XdR1^K>s341Vx3STM`qRVej2L0C+F;W0t zLx7NWyQVFsdRwric-jj4c-@Q=B$wTahyLNk?c$y7*q0c+kdZ zLtKS=RJn>@)G2z*@egh6pZNCKIJlWc4;(bc^3Z$(`J!BFEFjD-x;U99=}5@+Tw78U zZ_n0X77E#{=jutU6+0{?WFr+{_=lqz6X;Pkkt!n4d3s#kx1y!2I!%wWM)lY7%I1(% zKnjoMI;Q$_YgN8RpIA~3T8T?qWQ^JzYc}G}h?Z0`3L2aK&J|iW^=;A&$1c;$7SnGz z7~`VjiRSy;uFM$hn#=ZU&T|s*65zW!MhFPpS(8tSXQUr-bJmGD+!%IO+@{e9<|Mp0 z(=!I}3NGku?wW-=RV9hQy<8o)4#AU0{napSzU$$OtW#9t+d=^bJ=q{9Z?9ICb)Mz6 z{=^D<9W)bpw}aDY!<;&`dJ7-T%=p+y(*V-BAFNcc_aR_?c9`PQYWvwW5i)*AbVKmb zezhjEbr?G~8ph*RO^@ZNlXKyl%Zd*nrF0p(5$cCSbtB~YJc27vQn-2x9_88<+$kR3g>ldugtq*=s2TBz~FhN6H}RkB{`B8p4g zK>ZSKN!>_t2cg9#nEI0EO zk+5CjLr}5{?;lt)+QUz^3i9Q*n9J-^fT;u`$n&?Q4AT}NbC_cL7FeiYs z!+03kKTiVM)36|f_CR^&*0qp-R?@lFR1@qPS#P=_hRJyl0l}=!IWktl7*WF9A0-0< zQh9~s{oS*T!w$tYLZk8kCTXZ9@8t}|mae)<$ja70J@hxPu;<|;HlH7lJ?h|js5v4B zKRCK1Xv}A3-zbnb1ILIo5JP2kW>{Lv7!Zc|29vd)bHjj-D<5iu`U)#$=X8O&l`Y+a z(pDkWabFpTQ%u~cb@twPXiRqPr{l2<&uELIY;~JeNdz5Z(VtbToV!&N(;YX$Sy_Av zbs2h3DcGqcrt767_4#<1w)5<|}MnHQl+n ziG*P5%ha4Q$JFbttu|N^W+&`5y#8IO?uwx?#=tZgR1NjL)=NTp7h8u!!>Pn&r<6J= zE^8|~?Jv(ETiQ83{S5(WfnyBsbG3%8L+A#m<`I^OEX7|0O6mu|($kXiyw2?$Gg%>( zVMFdz045b~qcAl&HTh5HD6{eSQWP*CrH=A=EbecxSKd422q%ozX$LHxdOwteBy;?< z8mHdn?@@ur#Q=lJV(>=|9){ z$#tXmT~w_+51x~PXXJpvA zH&w&i%D&yc9@936)zLh2fae2$b@1_>On&6)x*#T5hXEp0#nLOMS!d5rt3W$XPNP=k zA7^rLUf2p$gi|&TDe4Aa{@_q-x#{amK@3o7K@xtqZbKLXwK>xYG=-VH3fu$Og0$B} zs99~o9S{S|u^-z>9Mbq5hoQOOuKOK5A-FsxuoPa^qC4omX;bMWS)iNwt~?PGXq_LM?(8M7#**9Q(mV6cEI{MjYeXN+tGRjNpA{7rDP(?6gb2Li>&lBdV6rd)@EW5 zTSsCbw{Z`Ywowrd-m6yhndyD_01G(PDIq7Z&8c2{rcO9AGRKby+#jYv4JD=d{d&zw zS+2!kNmt1fa>wuAqo%pvoeTww#VcJUCQC1>&o=Oj|KnlXb)JI#dz)|aDk~{~u@?{Y zL+mWa2M2RtaYkM>n%BX(P1&_i@8ZA@A2XCHjW^h@@7=Ky5P}g;@9RP0G=|N?b{f{M zL<21Oy8}F)q;YO2xA88hhob=IA^`ou7SBjU?m>!;tjA>o2GgeX=giA!x>8oN@S^1` z6*sBd46u)wVIr~hahHl;b6v;dOlg#9*B^`^zcQ^->S*-jn5-@|=#}*pY&%V7kzp*> z47B4Db6IIe_vyNW>WYQZ=Rp=f#c()|bk^8nH_v+IHm9xURyJnOM6~mnXI;0XD@&$G z*L3{aE$vT6VD7uKu7sLOl8>He(2i zzY~^+r)6HSsQqkdfU)>ZCtuB}AuWXX?aC*eJWKRso8mu^`G+;*Di{8ha2!DWgT8;*Ap-G| zmDBeO^Pm)E%b*gpqzM}}Y$tyRsBWAh%z!vW<_p{+RE~>a-hq;J%>-ScghMLPq!~vv zaR$RS+Nu0s!c2fB!fNmwY@#E@uJ2l%uqISfh<3l^Oxo zqNssR=4XRouNv2t_P|uT*zH(e&&Qkd0}k!N&7{M0c){qFK;VBK9&^7N$10EVE_H8w z9zsWfy#NF>B|qB^>pOJZWz*PzCcS@}Dv88kZ+z9)Gv9E#@0aine|^g6g&wxwwFlAb zea6u42E(^3S?1@wo0A_RuqmMi%Vt$ZJ}*2`!!DokT|TAZ(V+%PA~(6VZuz+w;e{P# zNql?@u{FyP4wrXy*yy|dTKIBs;G(+U6@GAFU%A}ZA^+0#Oan7ojUe7}m$$u_)5psta$~oS)$?u7 z8UB(8MdwbB1?hVJmc=p%6y`&>Ac3{j7s@!uP`} z`P<(l+PC(vD&1hae0QmfJtjsfv3(1GNdPxsKSLPxP<(=@`nD4HtHo;?AVwOxL=U%bW4xYz zu#n4dV}GUc37W;gnzERO^ve0DDiI>f|R9&!>pot2)0~W;#*j>t>WM=;bQN z_jj*jYSHjVZzBrguS_5)$yd;7@DYBjr?&aq7{kn!+6Rrgx||=Zip$NTpFc}RS7QY8ETaSNI!`Cu1^VP^t{(@PZ%bE?7m+bsf=FYyD)_8FnTZo+{}_&>8sP7 zlK_Q+Ve@NE4sfe)f2)n-0L-tPr_}9uiT);N_c(pdn{RL2!urE*)$W9112@(57;ytI zxae|Vdfj&ac-cH1QCsb^)L`@bm9|c3AkjrKU~lu2N4ACat?ThxF5Mo+eP_wkb11wN ze53%mRd`I#z>l;?mV+W_GxqE8%tx&^&prfwDAMogvXb83HnSDK`=w}a*s_`IoELlws#OYiVB`vYT_ zpMd#FDVK?hn45;T=WN-M@q+{bq@P zQ?=w@8a8w+JKj28;f3(Scoy1sMd~_G8m2ga^6o%A=UW!p zuH2G~!EK?r%s#o}p~nZ0oCn`6tGo=Bf2e(vtZD2$wh}`ABq!H7SA41UIIu@XbhN2q z7cG9Ls3MLKG+u7kE(n6WhOI7k2`W|7)_+~6WcPF90)%kq%DlB2IlWpcv3D$$Ju}H5 z0sAJwSH^6>4!)xGLME0G-{3eQS3R%3b9nZieMw4uXXf-_Ng8*d6TZ!!(#scx3BU8V z;VQ{r?6AhIAr=#685kUt<=H=xo!B`1p=-a2>NHLHwJ{3{mjYO+%20p z_^dBGOl30t6tEAj+!$cCW%I_*&ko+m(SS(eKyk}NWXHqG=Y$0|v3xEqKU+V;d@ayi z1d?BJblBE)cOk!B6eXrF*-*4)-$=iuY5nN)|7}VN0{6~%g29ztWv{9R;Tk9lV(GCC zwVSQ}tU=e4+yGMSkV%R9865Qrjtz|b{nd?7zxjAsaX>#vCB#boy0oN!&GuSCMKlA1 zU9G%{_kZK^#`U|s=~U0Fe9a8rL&S+QU0%nH8zAp5Oa%{52g=F!c$DC%T5(TWW|?C?)&pY+T4Pj42`7Tj_hkrrP@K-Z zKy%X^+9o&Eb3qA{Cv3K^RP;+7QuenwHH<4#IbOHio1nX44sjO{Qr=17aHsT6>!1xz z)m}))AcXHy#KSNzYMjw!vGOzQa?2(YoG(;}LA&Um3Q&f=^1K!LoYNNJVSB%DUj8fT z#zJVB=Z{7xBBpL@P*-YBN1vJHgh`iR{bn&or8l5PH;53+64R5mjkf)uSJ$ijrZUWG zi;lwmYIY4Z6AP7vl;xkYXpyya71b|RPL|$R!`1_Ss<_Qc6{(A4j&VopK?yuOE4|sV5#>(%NV~D; z(cgYbTQ0A(=T2*2gbGQ0d9`@j2y{dsUBpAE2JDJOzr=zP6e8oK6`n_H6M2S6Q!XJB zXNCb?TcXLHr}3i8u(pzuEXQhac<7E$tw>CY!)x3rFljys1d60JWG+SZRgWSF5Ny=! zLYoS=1v#8sut6-_6`T^U05>667~*5>^#E9)Q)z2N0`(V4u2|Kt&0^$_^5xw;7R4%s ztkMm$B@YTHq7RF06t4QKg3Y#%5kw?T0Z9v*s&_rI?g+XfH1X)58=?5e9kSg^Dj7g2 z+zYC`C~>Q}cbN4?@Fr*zk!8u`<_vqu$f&lb^e~e;fF=PR0)s_()B{RiEZrtb4rj8D zyf(D(!y1mjDTur)*!3Jwp$QIRi*xx7b%$Q&7WzTnD{c9iDTxnen>IA0GK?Y;5f!KY zwMbq5LT-i^|6FU1jJ`kiRQm-8zBl*##DyttVf`(I_xsU(1KicPuca3?QiheVbs;2d z>ZL>NC>???${*=OKeA~+GUcOpkton}$SXGvCTq7GPie^_paOg)kN94jjwrjHnVYFD zZ>(i>ELG<_I(<}t7=;rTf&x!iZ4k*X@c-OVH@-B@!@~mrAdmt8p#7H}wVK%fRSGH5 zvUT4WNBybQXC%c3s!h1&Sa&|iZvgJvhnOC@E;zvVQqyc4L6rS9eHp2fJf!m<%wW5TZy0jBKCnS*iA%q%=_#%0~5! zuEf%_DD1fW2q*fwN|SQHqt+x$D7)7>>}--s#k?k5Rb(P~WQ-ax#;_1qi-CZw#mS{z zr)t&gAs0ED0#%Y;g@UaU)j}Bp;d?miL)&u6VZRd*$sgQoMdw8o=px1~r~PI8 zM6y^W!S~zrE_TeX{q)20=Kvvk@0;d#;f6wXf?f33aR0JYE0I+Ib-&h?%(~|4J4L5_Z%^5 z{%wX1?L?ltU{g6uj^0D@OWa45pTvP9gE4rZ3f85Te}|h{ko~D?Gdyws?Dboe})bL--|Zb0#0+>$)iWhn#>e7O*=4R9erRy{>&kkwnq|3 z(5wMb)J`Wf`l~xN9;y11G3zSktvr_!>qhkh0-n!N)UZ?Iov?i!ePo7PeT&|dXi1B# zShX+tKtUv|rsB1t{m$;Js{U)+<1D)~2zAD4IYJEozS>ZhH?DpuGrJl8fip-ZKtLaD zw{^s2r>k&^YTUL@;jJzbX+kgm^$p;-IFU2<5`r;@@160}6|q~*xUGUjj99iKvYS(V zw!+)%0Pk0?SX0PtD4d#9Zp)p#uPm=8*8;AHwv}0HTJptO5G2} zGM=81V{Ajvi`cq8Z~9E#B_M@Ad&tSJP?#G9d3@rMoAT%ikV zqnd+(Tm^St=Tx>tO4VrEtQC{TN8+kqe4>0jFO*WMLhm9x@0KEXf{;Id-jewv=?{c1 z2x3-5{^Z&CeI58%ru|y+x8>GL$b<(=?q)@QZeNBw{xwDqcWy9IgiT_g~HwYj2Meo9YXWhKl z`wL!v;Iy^C0UgO?N=ngv6W!MANsh*OiLU{3AOWX+mRYQm#V(cEKBZ*26wC4Ne! zWQ>pwuCZS++;!hf{-UZq$>I9`0|#W9Qv8(Wyit3K497-uL2=U5CTj&4#7(*ENN_-Z zU*uN)p>}^`-T*3N=4*8CbVmn53>A;&nN|FFMy@8}ICPG?n3KPvNIPbYT=7av(iWec z#@c13UF@StVZ*KL;uf**M3(!vAA%r9Od1J^#&Vo0afxz3jyLeRm4;O^uBe%9Fq(V!%O{;Eq|-J zfRVENO;mRi>r9uhPRb4r%6%LdE+jovXEoBJY>MrIkDzh|f7S%{xn#9C!`iwL(j=xh zG-oX$srT<`zSc(=A$<+G*(E%@n zNEA3aA3Tx>ulGnzuGPRGh2GbX0FlS#Aj~cw{cCZR)^acJNcJ*y*}sYGGhNZ~6hX9W z;nHe?VG$jfN)y3||78iF}mfGcc1jy1KNKFBWgB+ftZ87maNn=dXWwgG!1# zq*<8&JsWcT)da&toE2kxt(WUNSe>Q`>I2^8Kiu5RGSFJ!=%APHXxZ&BA6)DtW2E@;uERkZS!|3@<5{2b{g6^}8 zS5B!BoR!3gHj5K^u7Ga6Up!Z$*9>;U!G%O;)%8dBq@)J$sl_l(J++9EeaEV_qIi1l z95Y(pVpf)wz_nVpEM*P;#2JN6o5P)E{sKusz*%Gm#8|!1x0DVH-AzMta`p_u;>>+Y zBw^|$=qiuG`6Pt?K4VgYlm^{M7x=EbRm3EFg|#g~cXEha^JH(Emk)OxeQRT0zDR#IQ` zOi*j)NJ<`>(Z?0P4h7HZQK{vmWC%6uoCPWx$>~E7vKba4PaaBrU^x$CiuuT4Pym&h z8l!xWKjIpijg*Noa?f-`UF-a9U8AhwYc&N%IFzDIcM&Dt3r_|J>H{W4MRP{Ipcze59>ed z9;AzNyI(7V?nV^~98j4l+Kdq61BS47R4ImO58Q|p-?VkCxL8xGd_z(A)Q3uODs9sC zl)+<6v>;T{GL8oJF7C{hc+EDIs+JKtUDrS49~2(@ ze-mSF`EhQ~;%sQCk#;LPwW<$u@7K}}YR8)cQa zDS>fUimFqutvKFLw{w9n%H{?b5D${9ilLkmxIZvNqE^)r1c!VCN`BSFBAj4GoN60Y z&Gi2+F7|CTu`1`WT6pcW*;uRaS!bVVB@p8@8P$iG@2FqEeYF_g1tll%f-jL9$=!nh zI5`VZoQftFN;j<0DFz4VEc8qr~9g>77Sg&)DYU1)5s zc#4-Ye9fMs)CdNMX3pkeuo%qtEcJhG74Zyr-;a1(GYG{ zAhAQ}PBx>_MnvYNssGz-VRI*A=jnI)%|XjjU*u?HdnYvD_jW`+tdXj~qbL^19&WTD zzZf*ULOAYYrVaZ2>DISJq8AKnd{Pdu(NAc7ml=H+cl@oD%em~8w@dt94aF(Fb`Qg1$S zo8ouP?~*J<3JSfQ7jYxk9uC{MzZ5?!zxN6VT%=^*eewz< z;Ou(-JO!>rM%cb~kR%;lz2uqpU3VDoD{kZHo{B}uz4XiweeIA%E-EoL`aP?gi(N+M z-zP2kIyx_mgIV_I`WWO-Kq%-!-u5WR*<78Urtr7{w#8m}Fwf`Y~eaLqEc= zsZ%Q^44s|CMpHS+chyxOM5t%l{ZrM1RwhTD$6WUZc9%{52is{ za|Qy~^QLH>#;lBzo>FoT>V7Jd=!SXCr zWBlJ7`-^I;y@x!+XzNfI|5g^W>2^=BKh;|Yy!$#We&>~^*Ho_J&~@OWnnfbj&bgas z+?L%A{wq}LtG%}O`dzRFLZsGr0x1c)sZtpa3oXOl^G?P520lCZsVbIrjuUC;yD&| zC%0R+rRCa`oeLKSbhoKRBZ=nwBx`GzUKjUZkf`!1Q}ahoHe7>OL8VYh_`bx z7-r*Ai`uAT!QBn@RqDy$@vy5)B7Bm~4F&d}@r5;i0nK(>CoDA$l{yUMNzmvSpy>>b zMuKwoE`h~8%iLG?w7VY`0<=Zo90Ol0!jhnzLK5P)CAeEhc$){;`KkMn$!&gu<49$^ zo1<8M_h06@eX;Km!1LVgmpW{g-(C54xZ)D<~OEAKDGnypBC$1ZlI&$AK1(-E5`l%lpFlXj5uSE@=%b5x4QzEMPUUNsZ5p>$U$ zrL-aial#<3!O1#gJ=Ia`lIc^F)F^3PWf)8QKqb}MCc%_QjcfLK6e5dCaaj}7T(x#o z+Ol3)O|`}}8w%8MiiepJ&#Z)_58+ea@A;S{>g9FBGxK=kjB1+??Nl%TvCdwVHn%qo z^c!8YXrA4QT24BtMwuIn7md6);^B5gX{1v@h@C9~Exg;h@r`U(&W*-UY5S#456CsXeavwT){`t$O?{UkwSZ@#XV?D@9FX8xKX)|LYWgjl+MN zFQ`+IWwc2Xw=6@o!PY9neWg$te#wNF6UqD0IAMx*X6znv8|F2^MD`&<)jOQ#4CSX< zoyly(mezRX%RsmjWwMluvCtwqR5?zhqDJC5jHh`7I6;%#q}JfClFEXR#spCDvMAag zR9y}AN;h|2qzklFi+tu-<_tlG5$!TVwc4EKB(5gSXi_RoVOop7NcenXp)Nkb#w!;R zYt{K06jWP!n5w%EkaB}NuASS)wy$SI-p$*V1O+onC76S>ijHOy6~Y)FeZNM+dD~qZ zEzhQ*uGF1U%A;2wxW5VhHSi`4mCIdVbq}F`I`QKvUx+ zV*jSyXEIfl_fFhlo>Xb%K4J?hoG`{IQwarlYcDyK=R(HFDssswnm4RlCZ2eOoFbes z>D1`HLw7d|!omqORkkt;auc!Ke5AE zQFCE1mf75$-A~pK?X?#+J!-7DPg3OTQMcXg3N}qiJi%1Z2`${NusYjOm4F7L+s=tD zfeh1D{aM^=4)sIxX;MI%0M@SZazbg7*_VMG0q()eLJ=cIfC7@|<~?ZMZrYTLbEU|Q zW1FQ1N5@ywU+2XV!&mQ%O;yq#tdY*^Bvu!qVknq91UX0{3=2-aoDwdcvx$k;95soo zNYGP%&BKpA*)XJA&U>Cj$;UteUsUO&^LiojU~!nXi?ySgM;%O1jvVVkL=N6Q05~Qo z3j%yivxU!dl*e0VIk*~*NL24*!V^Tjw?i>ryEmI?YmA6>d3gOjy_mecA0AM=cli9B zC(#aLg5#ZC+qT`GpB^rruHFs)!HODb?V6b|unDxZm}_#nMj1b?x6A@|`HEBzN|&;- z=i2E30F(gQrd7xw6~iTgOSoeM{aIV~KLbKj+*1+afPR~> zUrw?c;0^z#9G~JKH*Y~$(Izpu-lK&pNv@>LhdwvSbN9^Eb7_%kG)cZ-V`IZ9l-jf(k?TztO-t7&)kmsq?H zNi>s?H6xTkU=pELfUGhJHO&g0X%D@e6KJPz-{>{@oo|TPGkd7eTsT(9IMU4_%J~|5 z0mhyHOe)?>VTT>2&w}#cE_z-Q<$(-Dzyb?H-5-J9Rge6){_@xg)Gqoh|9R&#=kfK^ z)J|fypIUJkNQQ$9zeC{-kMiMaaVW5e@a$bs^>Tp!j#T@3D!a?9u}iZ>Cv1fob(g^a zu^Mq(Y?|JsX2aKj)__`#1`v$xwuK9z4bL>ZzEfHWgU2y+E@>E-_Qt6ld62Hq;+Ew# zaM2Bek4h>^9VUJA#W-@)p)1S3v;{Zsx9o;8lO zjm+iQFnXq-%atIE^$>Z9XzzhDX}|q=jIS^iim{~KU|jv=fBz zSGGItc_ZS!;_cZzmfdO@BgOA~JA4B{hi=I>j4Pa-n~q`xtw5^Akw26(7~F;c1g4{3 ze1Z2&k76SGlL6qhb7COFOg6D2=pD*V=8=}L-?Zd9of(z4e#7#s<2A`zl1Fz~R##cD z_$)swA>SUm{7{R6!3Vi~LB~JD8*O257+M~Ahig)Z^dxc<6&}mepWBPQ>K0C;8Fdc2 zLHv*2xHf|OaRJvk8GztH(p)JuU6}JW4J~?6n2p31KCg(q6GO9@KZZaLSWx~r%$dcY zF4?h$yt^dJ(ssYCx@(Q~fqY%?TYRTq1C9&`!Nw#unNFE$wc+R53w>|GSx%>4c$a18 zR0C0gObG=2(nYNk!OiO=n$Bq#Q!mz!8|>KmF?apgLB~pDJL_K9M9xTm63@kWLr5ue zZ3{NjE`<HLHbX7Yf@!GEt8I$>g6En+1cxvxRkP-s!L()e1fc} z+NkeaBRV;fN4cZFr@A(NR8Ah^yhsGi+VhqP_U_dnJuT+voWP@TNDzCh{lhj}S@G>F zXZ%n;1$OOeSZYw>;g)dD>?p%U6>Y`F%Wh!$v=NyN1f+{BnQ-Yn#i_wOmcOG!{R#Dm zgUWIqDq?Jo8y_8uUssT6X34sdqG7pfmq--rvOt%{CDwIdT%O&Gh&tIu!(9}Ew7yQr zZ}EFS+>*EXB*!&bYI~cYB0zCldmUGi0b&WH77%wJ^_TR*CPp|ogBZ_3! zzWDMzgwXBo{7qa%%TMlB-0Ek0>lij4-?y@K6^;Ws9P{8~?;+ZfMyhIA*dU z`D_CZwg&u8byB@hoU8Q{@b!=wdF)x)B(<3HhnlcnqCt%0th^2k;w&(3)$$yk)TF-4neYWdVbV!kaw*rh$26r?` zR8o`$%+ZF*7scW6cr*DtIIc@SjC-((n#)KBmOUKKo~-%cSPfx;94*^Aewmm#Y^LkT z4RS4;vQ50KEC}V}N)b-|XbP@2sVKN5Z4>;bOKm-|Fc6yX$*w{=fK_87hC=zimfG3m zqW0Yp@uZ^Se4ssVo9}7^!^$RCRh%?&KQNX%;=bNj zKUG9*tTu-F#0`@A?UO4vUOr?#h0C?oYSn){%6L{Mck{$!Bw{bocNdraOOd?3jog-V z#porN0E+gd;rAEnGIZ~W@UW(`!xpveuK(p`IXm&m{FW>Y{YQ1G3108GN=7mI^EkV? ziw7@LOSK-=lcqEO{|o?14csGnSO5U5x&QzK|0MvZh$^f6FM{p=!)op3u~fz$Yu$aO z=5pd>9b5?L=U{~F2o-pH080Pk;B)&}bZ1dYN)~OFtf`?F_4_l!*)vlJO8%@uN9>xX zH?v@VouPik^7r3Jd@HMg`VDDR`K15?c*hEttjTlI-ZMM&HCwhJK{he@80jz8Ij{xN zBgbqyI`|dZ&mV*kaOD{v`ooM(s~)eB+HS{TO(w%|$!ubes%2ySrB3uV!(@|*ub1-; zPg3>sX;))#!%uv$tMREGMwv=Bn7QxscJ%R+TpX#pwA@+87J|P+B&}k_bMud?;+B6Q zuWU2DQUD7qX$AG~P|BGejdpkDwwhD(XOVtmeJ6SHr$Wt6|@CJ3V-WAV(KZ^HFZcpLQNx1;KWS`897=({0I;6RvxDIfB*xH-1T z*G@>obLaaIaI-J=_#lD9mPDgPxUnC#Z~0^vR& zuB_orkEydncA8uM7$flHgfi0Le~8Ejve_6Q@jV2XW`i4bd2$5X*|W{A4bjR6#!IG# zIzUCB$}U9X_7`gtP)tsOMoMM&$7@!RDgx*|JmFCek~C<9^gDxq<=%x1y+O8bIvTz(Aous8k4eT3|LtKQ(^~8`2X%1&tLcV5a~hziP%JT+JXgn03~_${qaog(`DO3L&FRPVA^pX)5^M#@=a8?wU)CBA4w^c=_fH4f-3eDdoV`CBmJvia< z+B)=890PJlcW62J@}l`7e&m<^xMn%T-rr1H>aqAUHhn9ZFsj%5`@Yw_UEo-e-{GAL zv&bTulU<7F3z&C@V&(?FAL0x?!`o_S*N8X^x{K&&)s0wnOZ;?~@G19s@US=Xt?gJzEC-iMb3#{QyvI1|0N=zC+s^* z3~uYa#N#F%_`mqu&>TH_lQ}OF?-m}Op(x)L$~eEb^}BF#{IKGG-^I;wV-MYgv-S5{ zm){}%eryl{{rdi4ICPyM_sn;2-FtP2zdL1;L60@sr5R-HoHAtkARX|}74 z7}7@>#Hqq10XAT0Vs7BbX?(WDPi}6TXsvhO5T$`hM_}a2mb$J4D&r1JViM>xhVP#1 z>Rq={^Ry3sSB#*lxfJ^VOUUKLPPe=%E7FFFBOd8|RlO7|MPBtm<@4y0!W+3B90j@# zWBYA5cP}Zqro{I_k^>VBThrRS#2VgiFW_e{xk;`b4b@Hbd@w{;*RQLMX zagqzNsHBsizyPNx?73{bcHjJN z>zdVtJ`;yN8~gdZrn|g-YV%v81bp7rRQPu1=I_03bnoio=1}qMDf}}%I7Q^bhjW7<}=~mR&@}2r~x!3zaSF5*8 z`yo1r&)y(q`o{&%rObN<-+;D3!Bc!RHL>m430CL6ZqEB8u7msTtIHDVl*WN82Mdh& z4%BHgxRyrx+7*XRbj)1fn*nNI$ZgIz`W-kdv9UyX%wB)`Y@rkSr5)}-mB*xi3QuW^ zd{SBt3Yb{5h|5HXMjlw)*P??VNv$QPf( zO{?cg!(aMMK#N%Nh>F5Di(1XN105=k z+dJwz?0r8ZF8|b?hi9Q&TT38(ZThOa3~*8}7KBEQ{-0&yV7MY ztR#?bnF$rR5(aAT2{34KvC2Qmay(>y(Eh`ON|Yoy1v-ChZC7HMZnMxInSSyu^L~RC ze9#fzh(bqQTXqA)Vop3B?ouN3o##!Ep&v|kmFbsELKMMFq!--n1UX<7@;XGX! z#=U?bQ_*_iHIYJhV`XYEJ<~rTGMlqBjHV4d_PZvHvh}c(6-ysQye`H*(-7tYkNDnE z*4o1J^;)@y>aBgDdrZzeo+9zWhOy5lXor&mE>8~|jKhT({+~&Na`n0ho6$#%& ziqM=BN%2%YjBUq|n|RG5(W*%GRs-;;t8Rj-_%{lRtc4GS9c_b_Dt(R*u70cw@C4Bm z@>9P;J1w8tI~P+*6eSR`Do|kJ3~4+l)Iu7Ta4mSR0Y(o6ocwf$H70VAa~FvwcGr{D3H7iu8N`aW@`r7hMJw$PaRNf53rrm-7S{$DPbp8I0xT*B%iar7 zKd3f4wZ^XFBf1&&A2(RXLYnE2_ap(O+yGV2vuk@<9^+o{klF|*Zk5&3*3_2y&8~v$ z^R1Y4<7c|cBP(+E>)I{AFD^>sItbQq!|PZ^h3XDB3R`u=F^%o~h^0zG(hA-Ef9*LB z7AC;hW0L%2kUTOXO*vJvl`iv}(n}-9P!7@K9LclA{2d-yBg9|xXGdNgFm}r22iOZ? z&P^i&hI;FP7zN_(`0-B$i9u^^x~h27#0o8iT~l;Pvhp`exUhCY%3?Oy;BO*X!J!I5 zBaxyJebWq_8Z1Q+{L-V-uCr%<09P(`qx9koImyrTpL{lkGlVgXGF@94kzUJEURfw0 z()EQ;C zJOZdxhY*;#`N1keyi}RbjxmO4QdkDZ4J+T503EF0WuLnR0&8_*$?s{%6zz?E)2+GP zfn#(=4D=6Ox+iYh5Pd9WaCRF^(fi;Lb9WR+KKHXr&9k!n)cchoqr_wipswLXB5Yr! zi=Y>^Z}CvieWC_>N52rRg%?cQA-!YS$}eKa;5`{BJOsti}W=SyHF^yG7rCX)&WZPq*C=GCEl-C z$c6}%L?cT%MF=}H{Tr<{5E#^{ti@J7wQYhW1LF$osqPx{O;txq?!J9Z!X+@C_V;U| z*JsYnQ^-u8nDOqFT!Yub{my22<0U(W^@MM#hmow4H$;44$Q&0z1`Ugpo z!RVHkwIJ+;!D%7IF!{GKC!r*4CkKV`^ledh2XG?_bm?*YJV4-8P{v+s1Xbn=$7O&#)1Pf;vs=rj53NAVw>J zBxJ~f&W1}rnb(*0HRfL?Z<4M;5qL7?%MQm2iKB?Bet(jwJwrTqqW>Udt6wG>R)H2w z;DYs^cx>&ZsZnQ7Bj?waJ2#WU+1^u69HCQ=UaOUvg6wRpOzpP?C{O$aw>J)WKH-8pbzZGUln z%}!4!b_Kf@yLA~pW6>O2?H?_xsb3lHECFYb&~q3S;Ue0hHi*KLz?Vec0mQk5 zX7)>S5@i(8kdmR^3!vFzHXqB{sHt>s0@Fi(OD8GW)=~IT@8chGAWqm8md$>V>!ZQv zPEn7izk)h{dWFEez0*u^7FBOHJH`}rFMCMY-do(S8=}rGcY0jOg(HTrW*WU(V5(Tg)5SsZ(|Xu**^+mBgQyhRc2UGC>Wt(5 zSyBbNVW+2RpCS3vCkDK$Ob?MlNCtEBMZ(=%MIkn!chUT}#HLlfIa*~%)}Jr{n8Un{ znZAd*ti`42Zv&^XGaeW$A@x8oI*Xs>U#TA+T_BWBY-wGgNToOTCcV2hiZJVlT`RyX z=^{2uhf$4-Jx(t4^TJ~SpUPUZN<-^mvMHbX25*?+D4gEALE;+(-*9F)pi}N7ihG6% zu&fK4*lok3X~Eq90q9wBWL4ocl~zbY@y#_MTIkVCmZ%|(KMR%8_RHG#<=G>+{GS`x ztqZyw+ghDZY?+>lOWcn}EbQYNU;dxh&gy{%E-*bb!U9!;^kI4T1Tb@KU zOJRwS7r2k$ShCE?;zM)BG!2UPE75fNf3Rm|P9}(Q1RZ6-mZvowkGD0cZqa>d-M+;4~xCmZOM>~H+oJ3u>tNG?DB}8ae z9I%#7J5+yEKQhQYpOI=}NEqA*Q=#F~a~qm0XRabm3(=IEe@W{=UQ(Gm~6D)lS3@ zi`wbl=PRv8uyruUCD6C*RLS)qR_@GxAXcWEPWZV(if7E3)@A7y=l zdx)qOj{924X2(R)4jvG zf+5wSs#Oq%e{9uPoOA}q4}wY>QR|MdO$}a9Tu`cNtUoP$H5`cHrj7D2&D*)sc>>Z_ z&;N0rY-XECECmWPh;fL4H?K${WOaQUzW~;b5nw-_+JHU?{Q#DJ=yg2IPEg^5>QICT zUnUGezcNyrOJahSsE;iYfkl#0>=8e;t!_0oirsUf?$R z2H`;aPkp98Xx)vM@BibcJ1GMAOQgWt**D}z$vaji+tOh6xngtNfZe5?m7i93Srk*F z&Ghl@&8*c$6B6SjB;!=DKLRjlS`w=SC&gK7^3u?i-A{$-UoR%{+9>!Be*8DfACd9s z8EmJufA5GSmt^pvfUI6HgsmQTjt7+QJp8;tx7QEAm8_QN%k8282YBTOyZq}EF|NBz zs_y|I8*{VVa1#-)s#`f0Q^fWWeng)GJ+>=Lj?GCm_NWabqds~M~ha#-oj8TgH8QJ7kCF88R68J=LmJr?h!O2W3#$2 zbiZUrtVXmWiaUYEV29U0v<~~;!4m@pdc|1y(00E?@B0fNs*g=giH<=y=R%wcJ4PgQ z6}NV6V9+;WksG1fwq?lunbckZ|jvPGv@7 zRx2Isc?i(-wLo5TY3HQ2a=Lgh8SR8sRHELVz%|(_S)GpQ)zovCiYU>8z%O$Ey+vQ@ zrKEC`I=#*OI;V_9RB$ohRLcH*{*VY#bL~4Or0@oE6)<@ zOqB_uTX4}4jYMOuFB=57M{|5+qW4x&@$PCqIF>p-%-zG>v)aLS_Hmh2-PE<@bLWC-{ zj&pRVw^A>y0hL}xIVF0Q`2-G$%x?pXY{K{SR%*8DbQb^lq`{B;2y*u$XgewR%W5b( z{hwHrizRuHOaqe%ZONZWXi1k#ty@AxidDUx#yi9_PHFlRV$n7Xm?RbNxDR0g(5XnZz~vdGrqe}f=kUVgZbE4D}=YZlnm*Y8!|5J;4a z?sla<)K(r@sj^ySF1G=VOSuOO$=*OgQb_cP(!_Z8kwX+Wv0|z_dKtfJKfl76Z_`=M zx>rB6984gS6)$pVUBA^%+vQJKquN9V{iVOGKCT*}K5Wm9kfa}v4D0v)iA;XYJV(F{S+rggHd4ex(G zKXnbQfDj#Ag+fa}tE-ECwA>4nybtOK zU5ZGkg<&CSOqZMdqwc%DpEp@BZ(7*3aLuv5ty8swn5lBQ$UMbfL^|$f0j$!kz6MaPL`k zG3C|inmHz-?yFxfF$9uV0J}TQ$r`tJfDBVEarO!rl9>$ThbevMOE%gS(GuzxNoHh$C*-CR3>Z%KG`s2Yd6u=zH)EDT)XW52 z6}4|j>a$8VILh3>{g$D;rtZ+Jq}Z8$6^&?8NB2iZq+qj%T0+_6t2ZTzN_`}?C1+h|5d&7WC_0$7XB!MNOaDf0Ly9w8o0RQ8pYl!si$$@F7 z{}d4ms`=|&SOg58WH2#p7ly4Un}uIxV4&f*ZFY3qS=g$SoCfhW2H11jNMk?@jyX2x zX9Mk$D1g;O%+7e=$arIoi2Y?oQ`Y_kC}lvok_QV0B0EJBUJ0|vGn`Pg$8i&j$m)4T zfqP|8N6cc}w_v(*6FL`keK!D?^A4iWx~uO`gW7TNM?_VY#Y|gIc0_e?)Ku=|ptq9z zWtoJfVTkDqToGj|`J-W+kxeDJBKFSp24EE`dahS=A>hw%oqP+VX0^gBhbqsOcm@BT zi!ZX1gsdtI0Dvqt008p;viMRGRgjSs7StD(krb6v`G4)drg^TN7ROV6zfoc++nG3s z2n{df%$QUOA>(@>izP7ZXhji4tu`~q6UFf*d6c^cdIx*A_$G4eQaer8A^+-_>8R9~ z{BWE;oj-2->h~-+k-!D_kgQl%z?C(L$nR?_jA~ZusW}#V_cTfBlr#FNH}P}@{X(Of zEo#=1bI~49*BmrcJW>tIg<_d@L`@4ga;a7Hs)=SC4`@{VA?RMR9IlByP!bl$l~J8> z*n{w^bN}t-f~G^NX-wFdT0jD$^6FuI-bd&?Eh1QY;(#A~D01g#gI^W$V_U_7 z(yg)I>EGKz8rz;KRnC|DqcIks?ofeP7>`xmBEgmd2DB-0Dgd^PRZ5_6q-zaw7CF`3 zp5L=$mx$q~5G_;?yPK2Cs#7u|mtXB*DpknhM)7TZ8#?Vc+c|g0Asg9IEUtQHtP7^70JeF-d!+)ZtpdL+k+v@aYN#=A6rjWd zY6nr;6f~9sTUolG?l~BRXuF;?#H`u`KLZlbC(zzg->umG`y_jQd;cpu3RuBK0;8g| z^9J!W2PUs;qRFIy*E`$*7fL5A`e~+sd@~Jm6a%%8sRe>G9tSb8S!k#BRu8Xlemnqs zR~aR~MLg+}@KdCMm8XP{qgvmN8flr$^tQMc7O_i^93vJg#&fu~bpE`G{WkU`(5GYrSVbE5I<;O3lm^0PDfAd9NTrDcnn+6% zE2Q)tnE|9>=Ijhd!CQr1{U4%2VRJQ7Y^za)SVDO(Eo`g;u}x!|ult{Y%;f~@P6t{U zlz^=r*a`F+z8E5LG7}+0dR514Zk7UDgNarV|Lvg{aWlaSP+Dmqmf*RVk8K+wS1h+5 zNVc&&Uaf4|CUrn9cfc<;IK-n}0q=1R*^n@c8GIq31N-?7<_La3MhTMZ(x_AzgC?WR zWA}+Pv>5h;3Pym69I}9%Rt^9$Cs@c_&qgFzy=f;u6fhbrkwiQMktFpRx*5S^NCe!H zRe0-S*}$te!%#e5BrCU`uYzn!Xj(vKPppnIVOBLU=1@U*>=?xD38tNv)a#%Xz-UF* zzXkx=1FEnN(=g5^z0l&0Ut-8dEwTR_6VLj*LL-Txu%9GV0H5;fSiZQHgnZQHhO+qP{^+qP}nHr~ABMr_0$>MztG z>#I!ZgD4D=1k8a(^3V%UAWJ9g(%s|XbhDI?5+IUVgMaf1_kX_OOhCmxs>O;}Lv?)h zkE*uten(3#M=A4=DQFlkg?`DBIYoE)9>Q19t#Rv8Q*Y%*$+$oD5HBKK*0TxKObqNvUFZ6DD~8x3LG> zETECd7ZojTQ)?7*j;bN~hIiZDxG5tM(b0L?uQWU$5p1+ROz>j5zky{SZ75df;Hy4Z zxnZB$Qf=J?kX0bftQwV~pq83(^2LqiWvHszi})Hy-jgDae@A}j`Id1Zd^F@7zXdzr8S-4o;T;--H(xO4IaqaauY zv(dueu!cJKwS-~u`qqG$w9k;=oJOWXW0ITF&XOTmFxKn`x+d5D@@^4%9o!i{!79-7 zuguR|*r2n_PC->nV8FE6TM#QaA^NRHqfd(SSX1mKAhWHkE)ypn{WxU%L(BotGQ+%E zteJj;zx|4tL;dpmTGNVK>l5TY2%;yO$}uGdl~UH7%X-NimC}Ld&H>h1xf`;e8mxdHT^owW0q& zKry_cOTl_ETB+(nvN@pu_(6+I(<1`BQ3|jJAX$<@^fxK-*8*C-edd33_qQ;I%TQSZ z7dM8})I>wsuChF$=-d@`qyJZ`Dx#>WA!o32 zlz;yNi!wLI4;pA82OuKkc`yGRXpD()(=uly*6@bl2a+H$0y;1<>uZtwy)$eD&FiOq zwsuf3Gh;Zhmh+B?T%fQjpsP+*3`~1NLw%qrp$E$O681`fpvk9P1HcE!Y2W-nfNQ0p zo`%Ls#eaQALU-^C!%dYQfDyy<2=WJy#u~$Glt7?f2}Zi zmMxmICg|Me>A-C13$5fPncU6{$N^MSXDtbJNdVj*7+?--fB@+dbNqVVwi+5=t-l2V zd^9|7Y}VW(+Xx&;Wvtx=7qN?bcI6pp%8P;B!m7^xhsd->I^n|v9Ga4n?T9un-?CC~ zm`4d+L+WM${hOEiy6G8$B>ty)MU($f;>Kg)PNpVAhE%Aa+Bz4Hoa3|?TY-Rh%LDDV zIKk#*dfNn@bt3roZ2?|y3Y{-z-kgBU+0z|;1%4yt_L?k41W=9&H8V4E@#e;XXa$l4 z{&XkB)W5(R@o5x7`i8rMBOq&g;NDx(%KkyfveNj!$s?OV`y1G{m*=m-&(=P;zdXbI zS#M@lPPfbY^wwAcdoV4!swr%s=q3^K*q;RT`f6uES@Kp4J+}hHMR!5PbE%d}V(aeF z5(Td6$G2$o5&*I?1HJxr0s#v0q$TWkj3|4{YpOIp)$}(0%RYBlYl%8i7kg0MOWnJ{D_^*3{H2^&;fJE~;8pOze#Ht9GR< zWWVyy5y3Wb)*&g>!bIOWh>Wk13S2nI%T|7CZ>zvry;yct2}e2}Vx~QA`6B16Uwi;{ zCOeV?4sfL;qk;7Ir)WQB+FI@FuI(*(;>1i96hv7qPNWfRvjR!k@ zp=;4wJUeta0*;Sd#d_RrF^}=ryiy7=F@#vA!Wm(wAkX>z0UkMwW+`Z&V^u+V{ai!n zQTH@aw3-Giia*J~M)#)RIv4|~8CL*nBKoTS=msaNaBdg~@upBL6(S2T2_DyPpOyL( z=<*^$7(AxPOIpUg$gv@Z%DaJ|>4M>tmUN6fW7VKeXZcSs!aGmkBAx{wW%Pz+vZky! zGK%^E=`(B%Ny>WtG}zVgYI1Ga2F5S^5yZJQMd5P1m@f6%|1tnuo7l4}{BW=kRTvO3 zOXy8wyF#u3=5)-Wf4nnGteRptl?c0<`tWrwAHQFBC-XwCy}@20;~hd?jl~+uWb5X)Z5 zEuqMY=g&(o&q*ewMyF_faDb*D-?)XRF!?%1DJAjhdokdX$8Tf zVx@*Ae}S-Yi`8^F+hR-x=nc{q{Ip7R{p!XS9Onh~2K0552jRJ3R*h7q7U%r%hmNH% zTvU5ecOgu3!P5E^k_e8?+BU&sTD`p@0r^*r{MaMAVA-X4XD|kmi=3kjOwiEhGI+0c z41v|EisD?MddxKglT1r$@beu~;n0GP41o_2M#RC)@d^Yk&1p`WwlOsMRk48=O$uhW zhu#7yI~d@6RUte+ozhT(s&C?~WTOYYH3K~9TY|iw)zs09vAHV+g>pu18^RF+jN+L( zp)=d6bB(zCTnh^Z&cy`bf(QWZj2wz~D15-6oxi#e^WWN&gnXMCew?Fz)H$}d_q4>e z-%x%#5^|QK+9e|nPNQH3;jnHTGDd7boDrQTtkCq&Ss08_he%Qm;zJ`#aE*^7uC&1~ zYY4sO-N@mhU~#sZnQ8R(_QFLtte>$+s5xr2*VMp+>FTEt7-K(JVQF35vqRD(BcT$8 zhp#W5W!nN(LGyj{BeYP)Q>3<*R3p}&#)U|Y)BuTB_a}&Cs0Sj0-yA@(0&|(L2xLt0 zImEUTun2bCHW&_Hjkg`bH0j&nB9NBO=`kQv$k4c|m@ant{1HDEC-{LXJzLHtQzfv!^ZWtGQ0JGl3-(e_$qP1s$4@IlEYpuSRV2B^EaQGQPC4wP@*()bETmChDxH{PyDrW=X%MM_K!b6cKFC&|`x=lM*y=3-GK5kOEOr>@uI4K^&NCK;m`NsWSYb`z3b8$u2M%=9S zB#$hC>TOPPs7Z215U$mp~xUFh=8VaUbP6W{7cM0 zq8mY^XAvnPL7_}hE-W^y?^BRl6MhWMFP4!70}XMXAO;kVyNnXlJYlO)pHh=|7;y zlHgwRea}oyeBR`oqAA3)WURi9O^@0)PsJhtSM1 zQ3%Z;YY%(dj(3(euz>h`1PO49Mbg@Eim)b3?1b5tWj((KY9^s5YxLI4FbdsCkT&1k zZwmQo3+#uJ%pYvi66giPas~W^^nomRl;}}3lu~i~H zEJWvn&_QKMx=g+6BX&koCE64=`?zon2;FoMUUE#==k%MaQ@@p_*<&%seMbDWcJdxyT?JPu1g?RYK_v~U^=K5b-kWkZw7TU3w+S#R8z=!N$Tk5 z^};XcPeWUCb6esvzlJPr)OG^Kp{L*^T3~-oo-I2v$yO`-S3*gWEYxP*(T(WCwe1qH z%48$A<4pMg-ZBEWl(NBW>G&Jsdn=MhO~B-7oV+QPLt@R+3I^83))?CPmvsRi?Li+X zT~5Hg_=Ty~MPM(ySAwG1du!~z+SQ$>CVFY3n%{DuN@W+@+KDnrX>j$F#WDpq9d*P6 zccT{O9u_*^b#MZLOy!OqVswXmV9e2u`Bo)i(R%JHDZNII%px3qnD23e1##Wi&Gw>1aBh zNWsr7p&ES)4t_b~+~m@%QvI>Z$^VpM2s&Mxt+fEsXlw3iE@WzOsZSA7#tbL1CxC!o zG%M(F5Ada)Si*T|#x$!kVI8x*-NP-i5T)~u0clTy;T;I6lOc0_ulJ3bc_aun^|kIv zPcD?>W=1u+{rk0m4H3YY9e6IqWA0q?xQSWag7vf5=H$JQeF1_sqyfU_mN?Z5vd!Nb z%z6;X&>FR5Fk(@Hibmmj9AjJr&?e+3P4-pKW7gbd>_!UCzo|OQI5qjMZBjYI&GAMd ztklY>g_B={?&AZ8R>K{0k#^OBQX=uM0~vpu$VOsT!ht=IQeqjX>~d}Wz)lvgsq=q zk!!%|=S^^cy&_kgx3M3WVy0yMdBUAz?)2VwqhKL>Ev>x*43<9s|HpjANMnRFL z^m67{7YLRQzSYj;_pa&HS2{9#;t?*d%VBn@ccz{w%d)c_?1_x-6k}q7iARs_xb`{b zpLT1zdY@-Te}?zQLZ6l`O%O{&O`R5gB>-n!>@8NXa#S6jG?n7?4N0=&aU0IcjW@$i z_89%1(Hh#^6;%wIG>|b%+qf~ZvtH_EXGQO-5vozRp{;D)w-)!3z6DCu^ z_5O->j=35o^nRCs-#RY$03Yusnd}aZM)&}XIpp2$8QCiPKylY~vl=BHsgbpkxeLCW za}CC5mzL44TaLJ>7b)W90(ep~h1x?M;>9<1M6_2*Yt2z5xue8{V>gk1^NU*&Kp(AF z{)Xq>#0B1pH|!?Y3SJ_zv28)@0eo=w=_*4lDoCGKhe63Og~DSV=!OiIRy^*kp*0aW z^XVgqZMJXLZW`!K@u$<1+!QUi+OK(P|LRR{`#+Rp1}Vj2MI6!RJmvZ}bpHER5OaMO ze7E7LfYV%kyK!#Sy0+m+(9}zZC(VaLeV=*N1)8?dVjNkkI<*KfQp2R)bne((K3De1 zLV5ROSoQIRwQlxV+4=ymM1T1h`u*P|VsxuwEyo3gv+!Sl!eDJTr3hJ8FA_A2uWHm% zV0{*YZVyb5!<~tvAI{KleH~*wn60*OsU(S4unblpUO@5caai1cs*3E(Rp^8DSNDs& z*p_4gB0{4wfrvh?dzT1ojSE|}TUD)(F|F}D=J=wlYC0Q+?RudBG--E01@IQ~T!{Pd z>R=PQguI$(K$zx3=*rM^LcylY;*KbsHB(Nir*PpbTDSF#y_{4q0D*JRc_U7}4P+E_ zqz@CTU;Jywo#nJ`vZU%=J8O}wy1;QII^CWnXxJQlKTbb@*D%#GS48QKHOnVn-+(YH zJLrQN+V`U*F$PP6=TRQk(;`r7u&0FJM97>@I~ofQdm2|_j6z&C)vZENUsJBl42C7n zYo(f&LUKXW98y=)!z54@Xq6805llS*auDP=@5Zm=8XXMs^h39AMBQ8NAWxKX#Sx}F|9f?xmo3-ZDqG%cf;LkFfz zejh>ut_i*s%Kv7 zrp5njc(fv`1(O8+mjkE-MvFH~VSAc6FYu!8ivI9H#igJxy2^capu-;@qNg<0{%q$L z_&?u5ghK9ZZqNV#zytsQu>Z?jh`gY(vZ$i$|1#|jYkApWizWW%#4ZBvQSE@0^!Jt(=^~O zt1Lg?94NVDu5?sN;Z83rB$&IPEjQCWN{V_E!aZ=oUWu1EF-lRVpg1tEdej^c)fJ&o zBggD!$T9!{K>zj5f0AL*Gsf~mtPa;-mtduobkRvpv*1%%wcvfcgIIQn(#1>LBII&ei5=3Z4{Hv7rGq?j+^#Uqg9Mos21nP>P6PYNE|zb2}zEb%d=!gyR- z;M312W`T_6Pt|YSF7FuatCAj-fz4o?I%6cY6|hF{r zGJmMxim~mt)9wqrG0ry4Pdxckq)=mbF>_y_u^=&$eMAN|{)k(vs$9 z;D()oIN82CmHniz?;z+005Z8Y_Q#PuuK_P0#WlE~@ z=5QMwk|`0byNmNH_S3{@uRAi~hobm26vU@LR>B349VL;IZ7 zvj(Mi)l(<+{(S~5E~rpTkynQ4Oidn3ii$hM-{}odUVFDxWzirC9y_MHhacfODc_r? zG2B8?YL483an@4MNI~BDYzQ_%NX~QCQ?oE=P~Lt+nAH8 z4Gx3Q(O4Zml1{*$E(1R4{diBix2d_^T1-f14ugc00VUz-TqU((I)V!2-HAah9&L(> zg^pWHoK0Ex?BOt&i0(jFp)k|gE2n#bTly0&D(F{aR$@?t$RNp*u}V0qm2~r`EAXl3 z$*+V#uZOcq?)m~}n9MDwLdCVV?h^sDh zVJ{_7Q4pn4>KBPOdFX-{FDnxMor!5m`^^uctR?a<9-zxqxZFFjbMVsgz-))WlY@kq7O+E|?^(wD14}qE$1&jF}9XVyl705fD zYSuPKO>^ALGX|iE65!;;o`UtT?p^IDXW&QxyV?ep!Ll!>l(6@&(PNUJ=y@U@?<{Km%ZZ?F!EKQA>x`HeJ7X_5LEn_&jK9)q4yZ20e?Hi9owqPFti*9 zX>`&g3!HR%%re^u^pc$Dqsw?LP=cre&E97uh5&`-@cN^qxTl`Dz8qB4vKwjx zy+(@40Q4OrjaP-9ZLn8E4Jm&@2sR--AYrp$wpJ%Ue)Acfw{`~esv9*m-Yl+;CPX6! zKOtbjmzeLMKk*ZC7CZJ=2!j{J$!Zg@)eU~aJt`2&G@Ihy1PO0>g_0|*MefG@y<`7^ z=p!&o5>_So&uGSivC)WBaj0@aUneiXt6ioCn$C_#D zSW2R~1&&|D>tZa!hy)UN1=e2+9ZSnW^Cc?q$8~&Wn8I)C)Q4snCVs5m*@21VQd(*6 zkR?;kGB$-zDm^WY9RvF+SpZuG+XQ}A>YJLON;+Cb@qOQUby32ZL`Rj(5>tx~&A1%uatIY7Rb2u2&OFX#a z7UDUcUe+tosW=?_fPD`!-XoS=%bw~a4~}PUka)Or+)KKIbppHe1X)!b){oN7t#l0s zL-~8=5yb+x+ec2Xap|E_j--VV(yJ7mzdtyDGeMERy*>HZw{V3s8WH!+C3#UxJ*4S5Y*2C#L4pSV+EL z$2K$xQi*JG?^=Uya?`(3m~(x*-z~;NKF1YX+dOYY_yYgB$XTvTN&IyF`QaK0KqOCv<5(_2>T6QLLso!Z4xjYM0bS_enk>3UEjl z-^G;#StnFnAIJ-*MF4P8U9BBtIe00~n=S~TX{9p2c)2-Ob>jp7(ABMyvnu(Ny%67I z2h^l!Qs3ge9(J0KJWm5qB0KrnV)CQs5*PLR#X`C4cFL7G(HN&QZS*bYq!>e`wS9p|r&|KYx+;4#m79v< zQhh%7=cw6J+W#S2JaNy12eNaV*8amFOo+JOHQ#qn%K)=i$DeJDaf`fwU7|`X_BWnK zaT{@qHhe_1ZM0VIVGR@(^I0FmKM|`$R9vf#&)>$nqY#Xf@XCB@zD?9rPvnR;Ag3=? z6Oo{(Zi;t4#X`~h?@0LXgp8v(FgqUJxSiAArt6#Q%IY3Slj3w~Djg-oJNU@Ri&Jr< zPAL$WU|QbYZ#`{vx@!+LlB4`L&?BD&@V#OK5~fC5De4G_9FaOpaaFI2-QO>KViHSj zv@~O~r2J6mx;=~|)FYS|aV`D0XcA%AV6=lCnvJ~kJUB?1akM|*>0?9)Fu zj0?zDzomA|1-YVXlwk`2fdvYk#@J`gu&dg1yF8_{(_7Td+=XS`QAjO7jw=M?K|Kon zeYt#zYCw@9fr`Hy=Dw+b0*u$jJXC5$6zfY#!SX+J2{J0_2#{FufwZc*vY9m46+8#0 zf-lT29+M3FMNUPSXvBk%h)?stma{_h6aA`oO*m22<^di+1}3dkwk0jmGKF_0MnGbYGN3R(j3VDW&ZH zs`cCPXL1T~kCL~LlqzmKtc1WB1OQE9f4>JJEE4QdO?Ql4CTxJw3S!9#bc9T{q&<)D z)2=s>XEW>kV%Sqa5wR%LlQ^=V6td6W*vPb@IQUeP_iNd;*|tg?dInqQ7(ym?`lzw{ zIg_e76A^GR0k&B9f%~UpSkYvIGA8k-5JniI3!5FxeoZ8cdf z^!Kf&iN=u+T&B8duvg@Kkx(a7+tAJMv2_tONjSOCRm`}j(Hs@{6YgRjaIp+rUB0Ez z%nE^p?M@#adzGMn*w9)0r67phMho6*rxakJp}qQd&Q2$=pf7|{t!&MFwxRI-ns~`j zmNU@niUom9D5>$Qz!xn-M10y=S%H6~d}BMgm-ImYfZ^7qd#!Bn=IolpUF%*{B&$Rd=B?X0xz$ ze2MZkznxK0%+0OcMIB~198t-6_Eq|Eo~m&10ka%@e`2$VdDzs_2>#4IH^0DJ0oq2D*Qpj99HcjP6+L5hBc&nwqR}xV2Uv;T_>kPgcHa-3gF@_PqCs* zGOwY^WNHDWUXyd=T!I^q3kG!wkU)v~{CTrF)Rw@zIRev7x_YYz1g0MOnX6@O3dHQYcu&?Vi;id>wXCLlLdqQ7&$6 z;0Es2!h5?y@A8lhq7D!qZ$xR}69+3rKcR)?ZbkhKMz zz{?sFw%6p5@i=_Ki)qp!8O17dyazRS0iCLD5T=R9kzS)PNr1CD#{{=R2cj%WLRoES~4JQu8T~)Gov!}Z`?(M-9z5b_dV5D z0NZ(VeD*qh&HujtZ4vgbe{B`M+V<%A+x;5tT5jjA@8#xoIZOv{&3~G3I-7glvlp<9 zi?_DzasNdMW)10EGPoXoSio+^mB^jr>(}h((Yu=lB|WpuYap_@etJB-UB#kUxdq$agYVdVR6f>5XnZC&w4D4>0Bd?)d&Xk$U5@~;TRySKf=sHOGerRN6X zqAZr?q@e?o3JxYY!Om+FVi944;2N%!CL3@~KLa+mAqU6Sc3qihq)0_9t2t&;`q9JX z)=hM9lSw{xAwP&vdv5WHn1Twlp;n~Eb0%HTW3|2hcu;Zh-I>Mk1=rF9z^Or|9g^8{yGpFNk4fTZ@|YfPQA2uE_=?`eAia1|VRSmkv)s|wx7*lV(MHn9d zY=v9S!ziz_My-aN!Ax75ggpIZ7qobzq}+)qUFC@Q*^_SkK3^&!a8db30-*eFk$4l2){(Nc0bZWKm}t zCgW^(HW_>{!>BBy`{2oi4e@vf!Ib^Zd9T{FHqvm~FkqH{Xb8upeD}uIi1VHjQ1RI6 z;WmzBdsL5nHe~~oWBqk%2U-MTOU#_|J~4%DFDRp|eG;}aG8a=RrMg3OJn4n^N&6VH9`XW;~9o^wo$Jr@4LD|!2BiMbQFJo$N@f=sR>zl3J zU{|jbcR-r0iN1_O@u9qF8=8GnnVd{|BpE<^=5$0$Y(`T!pC`2Fg^2=t@56jNWjw8L zIQhKs+#NPOoVP2}FNhRvOKMv|j5om>JD2etyRRShE#_l;&oq8<9kVs-s@I=atzUbo zGZ(7!-Iq_=C3|cV`V7kCpKoS%s+(c(#Fj%+wO!lQBDLbQIk)Ky(FQ(ex#Uvb6=8*V zJOb%0#0sr`J|xT}^}PMxq1`#!6!%Rr6cJ@$(YZq1Vm*ZGDJVB0{jFTw;D_V9n-sqP zH3Yx{oPQ4v2S;m+BtDF7@hmAXbMl)#cCijD#K%HeN<@{K6&#i!*+(sIcwIoF`wG=r zo1$k^cdN z4qOV-zW%xAU2OX}%qqOkTT@o{GgM-&K%W}<1^rKiUgY&k)Pf8Eu*eDkK>S}2x{`vl zgtDmK|C@9bWd)`G7fP?;wo<}wZ`}Q+c9u|Ck*yC3h{w4#urn}1+P&i%A?Xw?QTO=M za>{_m`3TT8`SZF7FHyuuW-N!RMr9(kU8Cw&rH4d6G~63oq#YrcSjCdyKt{%e%8`6r zk@%=-!xF`Wc#)r8MS_0ei#SO!PNREt7sxVEBrqb9FD{f~+Acjnk>PpdI}xl~u6&Xp ztJ%B}g>FbP+JNLqY-{CNiFcM2&TU^-!^n_T3t5Hjfwo#o~cs`7*)N0afWed^K?b~)!jS+8Q&f-8m2Ez=4YL1aO4X)ej*!nWUoZjiFVis135U3) z-!n%k&eTf8FL&%rhsf8cBtx7ID#yx$iI)vOWHK^^P0=2nDf*|Y2y6waQ4<)>e z`Y*+pCF>X7`XSh;S?xmxoP}NfPx=+)Z2HtQ4;08GjB#Et(Xs_PLjK>s!*^ zp{Un>`ja(+rn$13#v`3>6}48bVs2unCqALg5wt~8rfiawqc)1JR^@D&g{rPyczCZd z^P{4WIp3^-tgMUYraKmfP*77oRzkXQNvH_p}$x?Q=x^oyV3yiQpZcb|yjA#yv!y<^ltAjzQP9wrB z0lEhYki=N>t@!i4Hfx?)@!HMmj!}wIS|JMt`)30-N`|hpC<>$ zxBd3F%@R7s5Dn5b*n9Tm)4vd?#5KW^2#E&$bg49mn+lhrV_))C00)+;yx+%7;^+k* zz8#G!aAFc$IGoz;t`tpcKYu^`o%skTR6}>`_KuI$>!$7AmzP~n_afN&-d9VO-K__J zm)-77*Wi0g*6#YtiCfF=^*8Wo>(1soZ(hL5&Wx9)pH$M^99r6bTd#RWn2~g~0FDPzEK()KXsojw?)HZv??YNU)!JaXN|T z_P9O#(vOTxq8`#pV&a#NbuF&y|VUz@i8ng{>_nZWO+Ei{Vrmak+=$PJ-nlt>=( zJLQMJiKw|{T=E)ZNHnpBNQV7~<&|7?TX#}1h~e2AeI=s-?N?gbR&4#Z6z9#Dgx3J0 ziL}Ov9@0;t-@te9ML{5hIj4srBs6BRaOGP=t^Nc?Eo6M+TmQQF5ic~ zb|9HU_-SQ9f0Z2Uy|3gDM=o19uyS*%6N%dn`^WW3T*s!Dv6}nOMg2GiwzKbdyt%T7 zN<49i*4lccW}I<#cBoNVTs?_=U-Wa};$1o-m3~qQQlQoqS6I z!-4@|?<+C!>ZlF@sAWP_)v%b}a5?NLbJc>m9xB|%1aPHd!=_cf2gEmRYnOr9!?BNQ8O92eO$WKGQayq-0wtOkrg%FNg5KiRD1^OL_Qx{LH zfRBQSMj-yU{ zQV<=KZnPjTQ(DiHAX%Wgn2KBk_}g=(PQG|jFOEdgvoWT-Sly4u0p=Pz3~;k8m_d!W zcnp_Hy^Sp};Se(K)7^g!giNe06a$ilMcgcwBJkj~+5srLr>7=U1VUk8t?=qm1gMx=8l?b3(KLZ~i`mL|}lqI;%a%B*URb<7$& zPztegiAsqb-Mw{Aj;U<7UKE8}rvN1n?(WJoAkwh~SP*h{04^1kk|nD|g{M7N@N6n& zW{r~pDdfh~L-$^TEe&zkX0->QjQ~CXsybuOGuojFV{xC>Uf$?F-q0i2#C(Y<)6JL#>sRS zTXA^yXFiv0xNWSz+oa==HoMP*Wd@uEZ^k8bc?$!crX5zEK@Sp6(2&8R&Ps-hy^H7C zfa|4bOCy-dEA*5qtOx}sap+^dHsat*xI}Y^D&vINkV;jVC|JQYsKPK`b-UC~8J+V) zV(}PD?OZTKetm&guDVR2{s7%1;S$Mpn0>&sfCW)R@iEZ!cUFDDaYQn;<&u6h$93L6xk9i$L@SN2edD=u(Kofv4HOHXp1U zYY7O6WNr?vNur>fU%6wGY#^Fta=X-rb3MpuJ9TFq{Y0cjW$>&6!epA70Bu34vKDbN z(Tt93fA^Zy>h-R4T6O?O&NB-KJrRa%LxBjZ$h_22r=uA&ETRdbr{A%;jpX7Nthnjf zXsmg$%=5hK|FbhY7h!-t0>kfFue7529qj3~bR-sfS#faHY#?{h+kYm;-I2{E2B z1fKFay&Ivc1wRL#KZ$K1j?rG!Tzgf&N1T(j!C195kC`1|v6bpBb90h80rGyRMcq?4 z3}ak#=s<%-SI`3vvWvvS!gCm>0C){RmYGX?%4}c2j2kv9NB0%vYC?LF6RjDJsc} z24{>=FglE)?TQkn5fqNuAlcPA6BXR?E={LJ)=#q>L3by4^knT0bTYh5J{2#aIp>f- zTj#{lj1}15;|?8CtH3j&cF*QSD`KV@5Dc3@2_)oX*DA8U$$S3rba*N2W!`tgXO4|D zwkfA#i^>ErAOAQ?f(k5vI{*MzyJcDkG5@#sXq~^CPvZEYcPeU9+wqyFJsBy&(@hpN z(wV61>PaFJ7Ke4>G`?UR@`JH&U%|LVuY3 z56Meqn6}S`>CNB1zo0V~cpz)>mCIel`F+I()sGq6Vs--kPs&u)2f6T#v1#<$rsiCz zBrIap)b(Y^u{!5LV8W{_*k3EQW=2ZZ?s9_!mB}CqsTN30&Rjl&dm|IKnT*CaeVDg^ z54S^lfB@4(ag^AE_F=hmIjghUzdLw(fk2t*nTnUOYMO07?W@u^{mD!@=&}bn?xD35 zFgSC6h5EN@5AT0_DPq2rvwYgppV`GfmTF`AZ-5DiV#QUzjyHGv171~?GDW!Q0`OxPe7WJF-*tY>3?2hFL;^jR zDd=zEhG9O!ELwqJAmn}Z^nP^s7H{4D61f*BS6jx@a*n_eu=KZMbE-3vm+2XGMVJ3-lUx$9^_{V`;EtJngRHn z)+)ToEHor4!q5x!!WPi=UzK*!)#*r};qFmW_6vM^VerN=tq>+^}(|oG>^GXq{SKQA>kX(fbi-=KXN7Uqe*UulwcZc+v&7`6waPoOmX?%`)WS z%1xAA)~aiNWcH1}>n@XUFKTlfjYW^fSId>;-LG5aWESDCUk#Tal5}c%Y=53_C+@V z9Zf^snQ5@8ycbOOvk@RU*Ck?oMcQI-`8NGL#j-nZ4?t&Rc-ZJgKF~tORNCiIea~T< z4^G!Rwu-B@U&D5wy!dGxBmEPv+@1^^I_`rq4H|I8wKl1g&2dU7ht@+!)7 zHpVK-kO07#DXW%J|Bj10GyovTGavu}2nqlIK#jVM-6k8tzl^nDo1V?6!-4^9D4QhaK(45b14*+w0v;fnNOTsoBvi{OxYS z>rCnl**ItGl=`%}Ad?D;@=53#YICqDCN-^um|k=urG^y(Nt5D?$_W%1Z9^nR7PZ;v z5qwPw8|3oTq$b%Q-D2hxyMA)N5GT@AX2e-k^MQ;4acAsvPS9|;3(O=$)xbcs(_z5ZU?M)Wv$3mjQuplu&a zfye(5_D)@zgj<*Bo3?G+wr$(0v~8P}ww;x>ZQFKM+RjtoO^@EYdz`+A9}p2wjJaZJ z%{UE^X>s1p>>&mz4NfIsHZPO@D#-@4m#7jR9i^yRW6Ac<(`Pqz8E&F-4@zq1@RF^n za-uI#TPopUi^}xVa!N3+{aH3`|PiB7HN6Of~f-!Zh&h^U2? z)qqo&IylHZ1@1k7Xr~_f@MEfPW~Kz0qmoU{16Fz{^5$g|w-QzUV6~H_WhM64a!i?K zrtR#~*~E*JEWATmQ+3D~0TqVO_J$zjCf$_g>11YTQwsCPA{X@#krYMf~^4@5hkTI6o+Yt zkqZ0yM_jac^6_y7??0W$`+O|0e~!Uh;>b~Yfdm%=#;}?#jJY$uSu=6tOGnef7n8<8 zzrS^`VhX02!8E{3%f??$RY|iuQ;x-HU^X4hq(e`m;mV~o%TYli-xtuF&jk0{a;6(O zglh17@}$WEUsxf*rfuD{A>g$A(nP1D7gvwY&d$&(tT1Vt9#-zZYToBM6fzdE5y{#A zSp)T+!FIq>12(rn{#ewTP_RZ>)CQMo!$E(J8w_9c?0B2dkP4BA{B{VYeOOJx(tqXo{QTr~S#~rWsA_SQ*$I|sa%>O<6N zl7~9n>2qn-$2rxs)v)oZx3qW5_w;*S!wD4I*1+SAK)`$7o*=bD^|Zp`k@#G z5*1~Fw^-MY`^oRk<`^i`z~2MdrxrC#S9suD`8QWNvqT|K6zQ(TP6!b$t<*6E4yu4= zOUz_AuYaXhYr2JA7~q8?%-R$$zwwxkl~MVldjt1$9?KP=BmG+jwgSHyfScHCzO|YR zLo0Y0wfWiPfK`R_f}{_I!N{*e(wj84A~bV=f9GAS=;=>NK^n?|IQV>3h4{|#EVbK( z@}n*((Y_O7NL==+2_T$l2i38*)3{q_AByoxvh={uC?!yarbY=U0CS3$9eAfeAK;e; zeRU7COkTu_ZsXzNa6 z)e6?fXn9I4P>Iv$coG*Z2g(HeA*Di(LhnN~$M#UJR@Yck>2s@`10c;V4%g6Xl(8ift+^f`uzLzI-DPpfLg>@F>@Kigy@% zCPf6x7n(#r3<111?Lwc<`6_!>$gr+k?zLM;@XPB}e zg}Zv7sVj>8@74^_BA@Jg$mK;cf7LuvsZTR+ zp1PR8iF|nBXy}qUx(fXv)i8kI{3Z`d>0jgflnmp^ULN{iREh2|oj*^6nC+3-Yco6HC1*RT7sP6hrl}pBaNP@>dcLd! zY)24x;iLM+7aCr)$%u!z%NDKm3|S5-V<{%Cs->y=&{d=l|B%xF!4UqeZI@!c0pt=2n+W>AMhup)hywBR@*cn~K}18d4g9n|g_h<{FmD*y7`vv|TYPB}d*)Y+ z_87P5aoAh$_qpDW4$K~kV^klWvotg3Bww} z2Fh!dyg>U%u#gyPaL^u9BHEI?LDC>aul7$fH77uL!7J@!@I&6I_HarKfL`4%bg*b@ zthRWhms%`N?5k)4W}W}=8B63LissFHV3K)*zN@>|^LLD|=w2^?-~2f86zr;0KZp!+Nyb6GqDK7I?D8NQ0a4FR15~G?BubgBjbkuGp>FYJ ze$+I9kA*?|(nDa$kpWE{^JF%3(rBhKgde!&27txfBbQw#a~`HC4pUAv@B)n-z8;^?Ur+OBW~Z@j>Wfa#ZMIXoYgVWHtD)c<(ZP+k9GG* zSf!MDX=%|ZqCMVeq;p@AY-{a4k8>AW-SoTWXHPu$ZCu2npmlH2qix>v;F%D&tIfh|@YCUA;TEMKlOv5uJ}LB6c*wFKNKmzTqzYt~-xDs!R) zhVtzZVsZ!Q!@^iYQj$s6XF~f*tTa`?t%ya$qp3SlWra{`+}!+P#IL!n3|Zx|$5piX zdI4t;G@@P#1qn9LRX)eWze(_ne2l1=t84N`kv{Kz< z>@-0}{a+&P(ND{}M7K@DxJ58(ONL$eC}X@gF({|XHh#%F8XCTw$f?~BD@ zXvIl=>Y-PzgW<*1#3&+^rVGg<*ckIW$U(u%sL4tC4w%RPw33kJU*P4mL-F27gqs#W zL3q@Ri_8O}Lbu5*f<7Y1#%~gXzFm+d-z>NrG-BI2`7~SNj#dlQ3L6Cf#RG58J1DVe z1-q?VOi6|EaO>Y-YRPw$#UaNH)!&e2xDz-nripAYd7IkoPq`PB-O#*~))rncQo?*$ z5>f?e)zbZ&InS>^4;(r(xsC3{`h{{E%AU30#}KkD?DN$OjnE7puzz-ybSk?Q!V*ID>PW(0n3G`?t3003qlsOvc_au>oM}O}~w6`d>a@p{1|AMv2?u)zN5 zSahpZ2$>2x(AN+uhrJ@c1l^zUCt)VMMP7hEv{H)NNtpX?kDhxD=M2IGt z8Ssn*)WG%aHILMU`GN9&Vo!?B6hN}i;Sqp4MoB+XJrZ!2@U5V#;Mras3s7l1{|qWh&e_;V`(RE=On#m}=Ap@}(dIrk-#E z8cvnSygF1x;MvHp>)vh4s4o*Bq-0zbl4Pxc6bRsv5F7a4lnn`;1=-cF>bxEZBwwBu zU*|rCg>9tU8*6Q#hG`5FytM`g$Nq<4Lf-9nzga$$8?%tiiFz&cQ(5SRV zpwsIC!3e^fIYFG}x>bVeJ7H#1ciK6+WK^YEO!qHGddf;Gou*Rdz>cIS(45JjimFju zRt`;weugcY(`rIEmvxYhrqHh*Z_B;o<==5C!;Z>gn!^ALywJVSIdtZJW5#==h%G+) z6Sg2rCQ_~{HO;d-ctc$>QJQiYOdJ)?iddj6=@(~YX;l8cg{Tnm#p{t>LUAyJi24Rj zU-BAk&R=+EO*P@(Su}}KAoGE&eXOJTfBhm9m~(^?s3L1hMCG1f1C-69*)9bQ&^Zge zi;9c9Z2Y2ep=wgSD)K5ivHL&_8VpI;L9f>^)9}Pr+q1{O7^TN}=9d4(Z-ZK@_SE{d zGHB&-Ag69D@(MIXJatw25xpomnL@@g(swZgF|fe{fhw{!DOsgJFsrfrLzqzI@bh&x zwB4i;-)*RCHNhnAR}5qtvKZxz)lyXQ`LSFgSWOd+v`M&rz*(7UkQE24R0UB40z?^s zPqQ#YZoft98>a~aeGGJ2+*aD?;ickY0``)6!!W~xf`>O5922^ejf@x;!MT54qhY)| z0tj0J?z}E)eVe&<+HvN4hf)j9gq`fh3TrP%zMCrqm(>j2>Rzr>B4=#c(rM>DqnkZ7 zr#T9lH`etZcw-Rucre)9!Qdcn2CSt>_#766o9Bt5x}WcR`?k~ET;)F z=6(c{OV6VdFD%5UmVTK5yUOC(C;e!)G*z=1T3ng}Ak&}9!|zkq!3>=H3^ ztg}~`HQ6#1jI$L`yV!9ILpxvmlchf1Wy|+SkHz8&*G)vM<%Rw4FsUt&qf?B(R-iZb7k}@+Y~zbSnGw>%?})Vfj43H= zpzH2gS1?GkpWw*@(dqiaf;K5ZA=gRhugzju1aM zhE07}m_H=}PH z>frJ!{&03yX~+AxyPV2BP*gjUMR z{Yla2{|Fiw@cNdxM}M`a-Nz>_?bpxLSkUkS(O?dVw^VRA%x0tes)#j3vSfa|RCDbI z&YMY*P~!wH56JoR6Rtw@OQgl#&!civLBjIu~AGm2#+-2s#^nX_oO zA(n*CX1*p91$?)vTMHiP-fwdF`O8IxV0<~P7Bg7y!sDTsqX zSHV?bHHvc!)Vo0?ij(jx{#DuUpA|Z~DQ*qORhy}wDlfo{Lz3Uo?=9W4Jau9n*#i`3 zZq+NxDqQaA8s?%hHbwob*m&($@XcWEfYZq>kT z3w~G>e;fKX$TSpUx!rv>lqbvXEmiG9??})V_Zm}?7wBq6YvFX*JAGHJED0dw;#Yem z%5$f5Tip`q+S!D?)-%qJvp zl83nn2v-gFM7_8%QOSeralxQ-mMn&SqCy;S3B~$A6=yOOpp~`{Ew)NA8&MB|Y{Xq{ zv7o)})gJD!fYeS^B^&kb@eKZu3?EY}4Tn+7-b4y_!uyFac1%=%&n3cFjoDIOiZ#!w zjy2^}_BbhcDFZh}pt`MvOAyGUJXnts!s=Oa!sl>3 ziYXkt`8c%IVEeBNDY_>ci@}5Qv2WmDJ?tnH*6wOTj%HNpuDzINhT(-KC?VYs%1s3I zbyIK{BwYB|$Mx8rH|p*AI`e#&mgX`Ta$TO0aw{heL>)}JW37IuZ-#rQCB;1cK-@uB zMKyakhzjwx*`ITY^{L<86zBkW?IwVa;MDV^resXA0{mKmatl9A)4c}u5vQOIGu>Y= zKv(;g5Zc<`MPV*tG5hK~`-9Ze!~8_o*&Ue99oc(<3SxL_7$aqcgA5v#cBPi{xW~=4 z4L2L{FLh9dSgb?><~6nq0;pnup9jP$CBO6ECwzS-MO9Uc`$ZK0EiQ$({Vi*jgNRSC z2dJo%5J&WsvNdqgw<+;J+)aD4CCkihZ^FBkaxXPfyN7ZwvY(eBEm8c1HLVz;Jp1jC1!3__jqR}H4g}XgXNh)-%pBNan$Ed)`1AyK$$YQ079>`xWf1Fu1-D;GM77tzTPQh)>xYW+>@+yL zf3(u45&Ja6fR7pk`@i`_#*AXx&Mukbs@QOLG%4Dx#=!~$ytd+Sdv&j~AY<>Q0Rp z$zabS;ulaHWABy1y|94ko6A{@1Dubl6ysCu z+5;eag-9AY5+TG#Gs3hCCpmWNyjKyHTDC){&*f27L zsaE-F2du73&)5F1n7*^XdnCx0Dfmg3F%!46~x*%29Ax&0k60NUx}s>DR&%u zab)XvaLJ7Eq7#*T)-W)M`Ze;NwVcukhg6J};7!n)%m}Ygqjzr)d}}j^RmP!*3hIQ$ z=;!rlpl^KUG;6iuYCI7Zo2Fu5e7lrz>zI6PfFd^A{EgP4^4}>SzD1J3ZJ5u4QAhg# z!D#;wzDvBK`=0){NBk#B219Okk+~sXEwV;g<=WKimqovk55QU);%~Fku81!`wGsv` z&&ZoDfd3A=A}YpSY zPlPjRD&2$109=|$-I9Sx!u-8POS{S#+>of)7>kPvr!{%# zB&n*!u{F6}-$^3_;j4y*L_4{(rh@q^z9ZkNgswWZA zdQ>c5ELnonyThwN7ha(wKU;$ygHXmkH2dYs`-!vQGhigw>RvI{jfqDZU##t2y2JBZ zBd+dFxFCJHr9?N}@f_0Mr45fu`f4~K`&fQgrn#BIZkBYR;T&;I$ygK=)!D%ZRV!?p zpT$RUEW=PaqcttH4XL{_`@bcwf@Vpoc!e`nbcv>_)#JHyG6E~e4x|_l!#9n}oSny* zSfxKeo5QbOW(9g`{gL4AbJlpA4Ai71B$^TudrZk)eYbMyDdHD9k4bxQrqKJJTK~10 zlE7C`1ZLwB^|x$E34&`*EO{vyPv^@5sm6V@D@%HOIuQ8d(kfiguULt}lyJ238b(V? zPJ+5XVI<3mc9h)R0(*xYHA?#SP!y4wm7|mdzZ2f}OG)3Wyd8aWLH)wWKTY2bV6{M}kHe+nZD*^YYol`~$f@frw^yG{j8>e#Y& z=?5xLNuXb-YLE+amxgV2h>kLWDSe=#FD|u;vJDlfB_Y2ns-s|>V>hRnie)p{_^R+brL7? zyiDi#Qu(E(nQ@(}Cn<-h7qV-x92D+(_yTYTN5v-}n$#f+6d(*p3f;JBnGk#6lB+k5 z{BK{a{uKTSkeYmdfE4_DFfWyVJsR){ zc0j=e$688G4==MNsLVOE28?enBArwhS+~{uM;m zLGGbm&O67v@TNW+bCw$z$uD*|e!I_}KHA(FB*NFO@B9txL8%yJ0vZg2Gkz<{{Vero z6_@50$meRdOpD@N(wJJjrp!5j`vt)@vNPfN$}^TQFKEESrA0KbWn9 z$VZhkdJaOW?6i5ZZ_7RXP%TC!q;ajVOhzQ1?!WdB40T5pPsfnh%HA^wmc2{lVGm%jwGTr3A_X4OUqq@FX&I2 z125b;e$G!!(`bZ?l9607shhfRN` zO-sGF%;CHEES`J_OPls95J71;qUzUcANT8Je1HBhBLc4(=}l%!?f=6=m^hbaUD0v9 z7loT_I7!Gsgcq`%zS|(Eu?oa23NlS^^qn~dx6~>OXzetuBW1zuT2s46a#WLWdsE2yx$OFUo!0b zji0i7G|E!l6xk7l5n}b1NGHQEzBq0laO_^*|UM&PCT2w-b4*}4Xy6(&jQqo~em zxaf$zvs2M-_gl3d%z1JW!K3pwQL|;M4LfUQzk_KJ?H)prd!iI?P76=(z9_Qe z2_#+!e)pd{Lr|icjH=P( zFE_eQkFLVa{urFCVuz|1oV%+l6Yd_wRU#g#Bw)zz}u4;_G@1b>x_#UGys zjjvO9NZ*LV*(dP%(rf;P`A-Z+B|Jm-`DcAf{&)RXEuq^lX9F8cJ8J_MGiMiibNl~= z!?ORUbBb<;2R@h)5p>Q^fvFIIe&HCFRS6!kx}S;W6UaOAXmeE3(wtSnBxV-DTUzt> zOSLfPG`3p=(N!(_P|_5ZTna~jwxX<@ZUdJ(ibtNxF3`4ol&#GjI5EE}xZ$O{6ID}6 zcS92SMHkf`R^Ns1iu2ThxT^H~;F$yb{l8T6IXp1(IEFB2G_(zM+sBW%wH738C0zTl<#SmGZ_MVCI@OYJdaTa@2q3dIl3>y7a) zi@K1ByYZCwP*xHiPmWNKIImJjSfqpQRScd%8rhUcmksPKQ$xyp{f?wz`fm>7$3uwc zA&Lm3ti`&j889}xeW#=zDbi?kH;2+G{*C*;`*HwxBk>j=oW$f%Iqrgy8*+FVgn0es&>DJNaFO@2hx1Ars4#MWMVKesSPUiNG z`tD+1RbUO`Vq>|?P-DiLXBVETTzy>|DkWSBo`Y`3h~37h&;AH%$Iv^wnAk%%t#!AZ zSEjS$G57@_=b_BZ&quLT%j8tPWhwgPNA|vI`!*)m>)!oWx4nSQHm3ThV+MDN^B2T_ zp4kyN^G!!60H6v30KojuS8QYXKZn)H%*ghCKd}E7tKabdSp7JWzj42ySNdF!tBZ=a zjg^krA&!tCo`@_v>Ko}4QCpitheb`5X_P(Nw?AKe!x$PaIk!6%(h!)$;LO8jr+9HI zPu}2q(f=f>V{StB$RfA@aW&D(yo7bC{?pb90t;jJmW@+y?pJlDRj!MntameAaxfj7 zWre+si7h4f(~PsaMSpOkPep@7VTkZnP$Y9H^rCsS@XXF;p6V*0N~n|&tqn4%%0#f<7^oe1Z$rUfTW z!JmH+cM^lRx1w1!^>;;2>f!Y=*N)H8$e2#Q(hB{i2z*x3^P7WVZ zTL=oSVp89+2RBbgHs9|Iw(1Ek-QcOq`-{Q5c^lju{=Y5#yw6%rlQ>RpTdV|+s&^Z- zO>DFtNFn?Yoi6#TEZg3GlV-!GDVVU^+NVL5X{QUc?b8@I)+HUsDYTj-7t$v_M@GTC zI$>Z!v+I`+^>&#pErn|bAOjPWB#6y~P1+EPVZa^JFLv7tFrjJ`3tKMf0(xqDY&3WH z2SB~+r%X_F9rLZo`@g`H!J=T$ne$RSV3_P@tWDg<6fgN!TMIo6Va^+-`In4K5S1*Q zC;b%M=&f#|6&%5RXk#Nqm%YpommV^B879s?$?ntQ3^;W6c z#lTW7vm6u3!N)|4xY`~#ahVTr<0N)6V%n+ zkW`AC_$?UeB6ygMi=H@m1_EQvEyC`#nQL~iCotY44U}{}bH;s&j zezQ)jzhyX|56OYaS;*32r&`wzRnr#A^`vju_@=^0OOSNjF`ag-b4T z=r8?T@A*SgWA19-aO4KFzb=&Vx)vPwuQ*KU3{`$6xy_mEFUVEj0b6>79qC=~A(ps= zL%(hU2mzCEF2F>=vGVV4lYeq&ks#O{Gq8Qf`>0`cmqhWrHD1kuP^U1Q;sri#Lz-je zvzHQqhg&ccud-P?RD%pkT$07edTB-uC;W#LgV9EUqXw7E;_ee9poEf4?c% zICPw?XaiIXNifw<$-5X{W`FMsxeF(3F={q*zmWLi;t_Te0e2$bGsF} z_*4$m(S4;n%K^&TCYEkXlyB>Wluva-UeudFPf=)SIjFkw5X!QB|B+KpG(560Wq^yN1==QdGpebUdi$uC!46%xGmlYuMJ^NF!d1Xt2&mw9bs z=DhMOSm|}zilzh0YZlVe>bv6f;EfWtLTagPT|^9Y?Z_Cs7Y$4WEACkx)RO^M+NK4< zQsgi3PUeaVYU+$hFa|dCKuG6 z+HYm_xH?7 zyl%DDiv$ZZXj7dm(aP=s~AGohlZ32A2^Q`Qo90$o`3Tp#x-tgu?x zWuLV)4o;o*REg9%2tUtpcmpaf1%&*M1*=i_EMARHAl(&%#>N$mXgjm+o$~o=3-3*E zIG3mZ1YzxkiiRKe&+nlwE$m)y(;M9VbYJXQSGVJA*;9j~{#7DuriaX(9>4qN<;`2a zUjI)oM9RM%M?r&nesahDqEnC}CVCxAWG4esF%C{0bR+`qE30@71UsZk1`JreB~7ID z=BoCU4w2W5CG%=xc*!`JtFlZ>)LCs85Ho1oIQVYo&6IB2A0BKj7077CgdsOV)9aT# z)+#0(qCkNQlax^bbC*%j`XL`3MaXgTag}_}LnP1EKUQ^nIU0L3xG9psB~30wq$6&A z9loC(EBr!60zQnmn8B>Bx8WljB3%(GUAGjFFOtDThbJG_DqaPY(0&}{5C)h!C(jm@Jkx@HgE(TnD|;RqA>>(tc3@NMid)4M4Zrpxv;GpuPLMBmz zQh(!RMP5u@4kro!G;MTq@)cx_#cGAGW$lJw+9n(xBdJWWW&apVrL49Fb+||l+Dl3p ztS0rEJHUPDHWZQ)yj~mMC-j{;NY;0IXg#W;Q6iY zlRI}@x9uT+8`R@xF2BSYE)5?Wv`L4w%~8||&6ajre1#hM|7;rb(_eqgb<+DS=H$K@ ze&0%QWNA*Tlo_r$Cn}Hl`mA4&7GC-(nHYNTjf#ci^qf6bN|e%qMz znLwNwE1^=NXB4N)XUUtJm*Rkm&nYi752X{U`K>t;*cjw9tT&_hFARx?7Tldu2kMU0^z z|BeT+&$8F*wUaR1Br)a17focX;Mr$lrg!Ou`hLx-`}$}ta{PGQz0~S=rSAnRs&_}K zoo_Vfan$Qa*vktDcX824;uR+f_Nz~D$}}tpg+`R~rPwKaQx-Xk+vTLi{~S2ec;b{O zpr78-K&xF_-6U3fA>8qo(`Asvxb#I@(@cu5W7lq^=4v-6VGWMdZx4gRw{9dD zav0PckqVmE!&Nko!>7Vi_94c^!1=7g>0A0d-hZouQ@El+*v5po;=b^^D&gzh%QC73 zaMKXkwSG!!6N_ed%)C(|2^Bq)x`O!~cezGSJ#VZe)ulH4&FEYO$`$9|4NI_4{+mnF z&iufu_1DL^9{B~un=5A;Gz0_%=+Ykh8xYxy2mc) z(zDPqONDC-b*=s7O&_7^i_q=+2A-hQ{ukE?2AA+DHORp%!$*FM24_iebFDmLk+hoy z9Lhn2z8#2sULAhkiR2N>(;d|W9 z?^QW&O^tS&sSPt$uXY(VD7I9gBTb(3@XGiu94Y4jd=w20?_zod<@<%zsHFUB0GE&P zL59sPG?I{8&6zH7x?3MNPz+V)A$YElI(*;=0IC4%vs-um~2{fKD$pXg| zM4NE%-0~81W_-QhRYS={r~C|JtNCP!xQGLtMPp)oS{D+C{Za@U*M9W^xTol6p5}dV zb(}WV*GIsn792rD7LWb~ZhTZds}rau^fvn^iLkuMrHTmL0TwPwBf`W#t63FVo=E}sAE&i`9o}AT-QREL&)2_} z)w==e=?5F2XTNQ>0;3hX+hM{__%f$< zQL|c=LT$e#JQ!MN&wF-5DDp0a6)Z&)7aOwt(Zl3~rzEWEWo8^PT&W!RbX$VMDKjsjYP20__ypt82%tSEPn{ssMwF+t2xDxnjTUK5Ry1Kk)@afb)s z;`8%)x2Yi@u*Kiaqqf&)Jap7rB86rqFvv3R4tH_eu%+c5puYTuf4kcVG$@6iJe_I< z*ALBE(Ox|_+&RZn{;0131q=l7={fr{$_^B$-`13-)XD`aBw5FQ-{gQ13`2m!jAyu3 z&z|2(ax%UutSjU$p|M9`CuF~rBXi0vrYn5la5`{xVBrug#Rndd9w|Kmazj^xPV2~b z@TDr&mqv0E5Dl*Gpk>sL8DO9Xen({e!x61$y{>ke+yR~rejFglcE6Wmqmh!P$~_|?yDIpv zv}pTLz{*cJ%Hn(`C!>!~b~}dtq^uHrzsB!k$tJ9me00H3FWne@?DE98hD26eKl#8Z zK}`Gez+JN6EV%3ry&}QPm4;RCJh9(&(+FqRik;REdGAtLAJdpqPG_mL_|%_COq{^$ z9l~z>9VzPO7ctT~9S*d~^^>s(L&-=ZNlM%6za;}Ae%7nBER@iJ6})N))%PB$MZpCZ z=(gaES&F)W@cbZzev6a$X0AE>$j_BLc6NIEF@{BG0aWR0fEwd?>MC_1xErN*IAj%bDHjz)+d2RRI z%|c3+*iqa^zrv6@mcbGp?mYkWRHJKWt!{dhtkM6(=4rAUWRiHDghvLJ)RY)R9!_W& zZbC&G86=fXU<&D9mz4TxijTFcc5yeL@|kuiIB19tdhb+xbYpO{o5E|(16=A#J$`D~ zP&yh^GCueoc9tg&MV<#b^wpPSE5y>ww3}*%Bzq0?PLigYohV#ulJM$FhdeHgFT1ni zDL<@7oW~QRbA9X<$YCo9mF-11d;`Sdny2iJ&d0 z8;y(98yhe2un7K^)gCOPy`_~+=<#%c&=FsyHJw!O`L2! z&wr7F+=__g*_c1-q#^7=BKOD9`yny{q2zI^gzBapwgazHaYhYb_#h?~z&$deVp-Je z`+ZTz6BkxuoHVyFNhj`B%a?{Muh&qsj`hl##%5Oo-8Elh)tZcbx0t+%Xk^a#x{lrVW z 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%0D1( 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

A>c!xd!L);a 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%0Dw%1sk^b1bCdiT3d75))9WkuUOL>hxC|~ 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�+W+?2|K$NM{t~}DOOIq6U7WdKWA+G}5E+Gvo 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 dJh<9B!+ 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

=)`q-i-c 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

yCBUEvk(d_}C;;B@r)6CdKY+p`}=|aZQ_+9^i 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�rp^bS3t~WLJM?!-xBgT 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≤7sONJU&ukMv9pQ+c$~#mO>5gg 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�`cRK?d|q1_jT z-?DqE)?>_I9QC#DFJ(C}#}=d{dAL!)Z&LPf58ofdM;yhrJ3@fcUKqbqx=y66Yp@H; z8Q7lXNOFGnyk-2{tZC2;QC8d+FSfI|xbL z6c8A>c=)snzCE^c(Gh=QMyKebS}Tu}nu0>DMBxT9tTf|+Os zt5oT=4*CfeCwkc|rMDJ?o$uZoy-pK@BQV*yU=FVi1YE?n+x|bszA?y?uSvIUd)l^b z+qN-{Y5&@`?PkV z&S?0)lC(}i0IS78-@!^|!&+9nM$D$U8Gjmcud5ID=F&ECW@|~57U5DdK zqJs-XmXH1X1lgHLiNV~e;(rQ)OnIAb{FqykU7wtu?PU3QeV4Yni@h0ENlIjL@Oee_ zDC1QZ0+|xo=Nla{sH8nRbh~RGHHQYkxl-w8Fa2B%Ms9)Z6Uf{vi^cdhMU#%D9_u`` z3EP-epGHtKp;4(un2)cb=c^KX;x>R7v?aF>nweB`-$*ZM%YSL7l_;!6T z)T#=Pf;Zg%n8;pg#AU!yp3iQ4GQbpsUBVNbqU%myFEN^zD@f@w>R!@t6F*9>%toFv zVF>-3f!(hFg=|i<^~N6&v{&;i1q@EkBbw_7IuTSbo}m-v5<3WSJzGJ%S8Br>czJ<* zOLdxg8PCfSUdYML9&5j>ZIPlc749B>CSnQsOBx{^0gdd^_S9SY>%X=M=NQ2cRiah~ zgE{1oxc@0rwmwleWYk)+wYJ_V`mmiPTPb}_+cX#k|3dz9WgJmxgN`G#g`M4k)J8Tb zA;-UwvS?H6lCtYoMOou*{kVD^gL&WjWDm;@1ar`d|FqiYFt4cj;l8z<3NbVrAGs_E zbwT;n{&~BLu(f55W+RF81U|bZgGtez&FA!2d))b^wIbn}tvY{zHJT|)U=aS=BuE_U zqoac}x@4A6s3TQU;OOEQflSy=9<7%tR)oT?s2S*>jv5FEr&fKfW zx>1)aad*Q~0GPuj(Gla=8LRP*SFG3*sL#6&*^bs^R|)MG%G|pO?quFL56Jrh6w=W` z2)!gy3Es(6OOos0O7v-648MQ(txMK=%K`Bm4@kym3FmX|-iyI-h2OVOk{2V^T#JwR z^F5U8%i1Le)7Z9^lCy$7CNiJQ+>y9OSqRJ4+REhM7Z{isL?58ZyRH{6Y?NmK!XxBx z&Hnx?Oy4G@(Qtkpx1+z9XFT3ZPE6qQvHMy)MBgD-JCYp=7ssR|)914poAUUCN2mVZ z2t+`Y$?6}CZLeNDV(Nw1Uan1*-VL~J0z3z=05^j84s!L&vfPluFq^BVrS<9N>2B3I zV!L=jA9#Y;UQ-C<6A=gg@$zrY`AI%j;~c_n=caQn_9@f#Fx2{Y*2{(`e=oDLPEI#F z!D;7muz6KByY?8CxP8h4lq8XkU~e~P#7+;7CJQ?_=O*ODCb;e-ztT(ftuZcRw>h8# zlms)Y5*XqLwa1G?7!%%|DpKQvB>`By$t}nkYqquCr@Xhse7xLgNRYZ7h$&qnt3q2K>*o%^2prxm^38lHB$(yyb z%Pi`O8^BuD!eR|f%6^B9aF}5q0}*ze?}eyA%9(MuysnAWnpdsebZGv5#6sm9k3$6A z!^6ipzD?rDrwAH$UH69Lh+KCE5ps=6^I*>wgirHj0!d+YLAFl>+%uLPE1tRWicZ)U zddo6j6Q=KV_4{`^C0((Zj>gB<*)SZYrB`5$A4AgVu(BQTQ;7f&au>8q7tOCI&+4mJ zVq@c%hY8RX?7+%oE{UUyAW_X{&WgQo00|f{v%4D6yxUIHn|!Nlo!vuEk%GK|nYPTC zGXtcj2&|wn`sp>)cGeOB7}Ac|3!1bEo}F?BOAf3}bMsI#+V181rn$~LQo6#NYQ}1v z{LKyC*7t)VFDTf@ZiW1h&qnpP6FDDN<=yxI70-mVd3b2K+uDn@@H>gD?>`7we%a(A zAHGV`-MD(&dm?JhotHI;R6qvNv;fY!BDgXS52!x{Chj=z3e?Rg-2=xYp#KsYxaP}o zJ)TDlpYPjzWsBQq)qlK&@kNCE=U0D`4v4ELL-4k4d^4HqU)9a?k1o7uQ^x9lS(^cDA0i8{2VmgZ&7yr>^z=KhZd-$#4mTVT@_IRmI5#gM9hlymbNI zQr0iP8|gHgDEzQ)Ecb`UL5H_p!G}yBQ7TssVa&)>K*;z>1bJs_C4DMuq+(?KP6>$G zE>{m%TGe=WNPW!i(|gnoN`A=y7(DDBtFl^54Qh?0AGKzWu_^c9oglx0RP>0L(j_FP z$FGROT72mJpsEQ^J9lvTDTp@Q>2;lvk%O;XX`Q|#-?U0#qyXCotUiBvJb*=?#T0KE zx7ZH6q}mh^&b$)4_)3Jfm=;)jA23M8?j9cRO!!!ef7&%Ju3|UFl2OyAfQMa2=HDtv z=YS!i`>xD3T<%_i4-q_((!#Qg6A4kzy_BLM!gwzn%D+f-!77!~Ara<>-U6e2URg6f zT8Jzp>e5BI3DqTJo9ZxrMwBPDG=yk07Q*0vc$cM~-mGYQmLn>WJ5(tVaMCd78 zmux-_2Lxt_;oi6K*hSGr4!p`3ixIvHJp3I0B1E~x1tRuf{^Owj7E@PgpV>2Xc&B4` zfd<8hiGXj>7?Pr}l)(!Q2d7gK1Eg?bSyTcldawBDz55G?PS4G!d5;R5N&Zx)+Nucx4j|f;=dp@FuyP@tiuZmGM^i1(=}YxW8eCGZmjZ za&UVXO0bbGdWNjSmodCudldr_eLh%uX~whlcv`7(AZ6)Ksd&z+{^~90jyHvT^%g4G zV0mG$iu#^#^St)#m};LZ2zv3W(RL--QS^XfnIX!4%uUZiq8tV2^%xg8yu9w+C(1U%x8DN zI79GPMr}dlMC3}Li%Wm`eSLu1K}+a)@$qz%^sPS*g2HY&tL#9f_Cq>-6X$X z82#uIY#(b{5-$dm&yu)mcjj@y8YY8cZZ7bN<809uwAF}dr8!FI14x+@5OG_%;#A<0 zuRKV~13{@s;E{{SDZY!srDia=pjBeq&b=82%WUbPkeMph<7{5=>)uDFZ&$N==@XQ5-jHlw% zIqy|QRlb>CDdqD_6{a&hMV3O$3MS<+3w>{vXMP)c5dj=_ossu~$0Nag$v=MakbvnS zXwmM=E5*u(uRR)`qXg>o-Td*j@(B`lTp@O_BK!QKP#=r)t&-EE{|D$MCI$7-KIoKC z!nMBG1Ro_DfwW1BVZkGSCnFYE)QwK*iU}`+2&R$CB>1?sscL1X2xb-oMTu(Kk(FUo z29yBp_~;04JN%Z9?DEkHBJ4Qtz2LA&rv#rdn7)|niPxYMle2kc@yT|S#DYm15##r} z!FGvA)G7f2(vCssXhDJ6L|-H{cUS$&^dzi8gHm^`v$rewc0wiY}%Lyzk8IFZqJ zrWPJP)2*#Al8RX?9c(5-pX5%=mdA}kH_QrZAodH(rYq|fZHBSNne-u3JHO_ooluY0 zc?@>9p(34m-0O)m@Rw04cX8h2PU$?Mw z-|q*dR-o|ONwhnBos<@!&$jJQu5NFFnWE6{!xd2Su-B$3Qx-f@oM99cH7BvkYT0t! zgUQaF9knPwtwvmEw%_u6BBzJa=F}VR_k`@f%^7N{;+Z{#N7~sMn6y&|JPA*Us@1Bl zZxxl-+tROE`V80_5tFiH5$FM@Jz1=J_(64(aOZejq{g;8)y`7?Uc8bJxII#Ua*yll zb?f)f`S@6^T}uC6&y%|2!=OmD8GR+6*NV3)0nwyzbP%DV_o|%HkZ?;ZlQ}ixje#BYd$-67?D1)R0BU>9q1%x(f)Z(O&O_({qjZe@j&|IZ-QNjJOfNha-}8X_WT!U zKc(t&!DetVSE2ws6Q;no+|XMsl!s3pRF?<-FP{Rw=_ye0)=h%>6z9zCdtTWShiR_n z4a|SUYN4z>n3>Cz_=ak%o2nqfbTzJ~yXr`uHGoPYw9j9=`FWx0Rmp=33x zN~qdbWUTmZ?h0bAW(J(y+O%5YlTX1f3}Mv3vQ{-9*ui`L#Kf*9d?nQ_Q7)QP-e!M&96tLXlU zD|3io`^T^YpE45qw?7gUI1RzZ_-c4<#kn`Xs4mgR!p7%urbMFMP{3KD#{7c zzO>uv{|Q3c8+4#)P?_7Oemd>hjg4!079Q|?OvTwcdTef2^)plTbcjtfet#jNi_gcQ zGYn|B2&ivkI-VTC1$IG~Zs*+wpQJa$CzU~nWejl5B>cILUl{(VD|G#F#_6+t}5eSS_o~4?)qX3~z6`2EK~FhgUJ_3&{!v zu^nhF0tP3>V*W4y0p@yqU8+Sl(bi11e-!R7{IgE{UO2D)my!BNANiraWt`KsZ5*uR zEl5;t`E723=jI=uxJqbAu^xZ&TC0bl0~TO%ky$Vxt)@HI2yN+SU0K9L-}D3`=A|?! z8pK>GZpY+T<}><(_g3-wo5#Izod6D_FUZpI98&F*9SE7c_6IXzZVPiuB7HLQ5g`6%7*(a5l+_rvPYA?$@Bsfm`={%DjQ!>hk zeCYNOo^MNyL*Snb?L7gEH?fNC{GqgVi*%_qQ})5_i=FMNjdx&bKe)TRXVvFvit;;g zP~?~5ta`RsUAUM}{cTr$sb7DykByieT#`VvL&YC+p;?ahJ+q6wkO)bHXc)GcBm zoK+)Q3xb*6kxIA62O=r&;P6csD-}AZsGAbM=qP*F8uce{C7&T)MlNx4?xyR58CIyGHqRpR&wFQ#X0Rj10;RnFD9@f7g0J*6h6I-i{MuXgS0>+I{` z&5m+DbR;}KpE?WI2O=JF^}n(ES2;m`dKE;T zFkZfF!A9R;2I+)c;?u%GAiIS1C`QdAyV*bdwI%x{0h(@VbVs|ShSE$$bcrOC^?8=j zH)M9?3pcol>08}AD1R}LKYh#X<_yaOe>P>z$2M_pq|Oe<5(b5Y(t-_i7K}h;GmtR)kuQB zj`$i>PUA@&L;CKBh4c8QHY#+=i`l~W1qICKN2Uu06i<3qS@z?|WAPsj5@39K1!Ma* zqn!?CjmizTy)H|79In+3&%}5egfHdpfK{R_g06zH`8D*Aim? zIE0Uc_yL2Xy`1*Tv!SB{-US;XFx$%^=5|b7@o);rmQBk|c>)@(7``gg)d`$-2Jjbc zV$tbh%pEr^Z#gEpfwtJp*~-J^`E9SYs`Qr^RmqIcHyoN@WZ5dwt1v208C9A&SoPrD zQaD}{$g>3o+X?BHsCw~hU5aj9F|Jo{HvD~@*RAZ5B6uai&;<99NlY>u+m`uScCPn< zOUF9BdLvKo$IhgN>r*8JGgjT4Li#4da|-!4tcp_<3U8AH>)1G#-P+b=>%W`zD~aZ> zI#t`xHd(c%wWG|@V|k=6Q-8ai)#Poz=9TjS9?iF?v)>(23ljgBn4*^*6={~QMo%tQ zv~plQ4jmR3@V-gF?MMua$BdminV6bQ7T6t~KKfuZI$<-4OnUTHTIEXMS20as2=x9+ zOnsnfJOx>d#z_jAv8q}k^)+n8K}Z#E)q7LCsjbqmY5>|#7XqX6sC=?WV*i;nXtH=3 zsyjT~2m>e?EUd$Q_CIU4s5zHd$sNf*{)`h5HrP1Zy%V?f8yA!e6eK8C71dM!@ljE^ z_ISW7&pEo*AoyHmBp4@90I)I{7g1y6(%Ev+Sh;WUMlNeSpi;9Gj8=$h+f;8eBhF6# zUUa*WWk%_)Sk8Fme{+H3Rr$1w_Ioc(5>htqNQ+EGm}A)8pB0!-9)|eVk%<3ftQzP( zj(WUH$Zs{bkENF4`r_;X`uf@B5#7@wtD8F1PF#w2+jdrkt>*EyhXnMF6Y*Y^!9|6}Ej=XD}*lLEK8M}bsU_WrS@U$3N zJ3lNub-q6eBgCUs9U7Mob~@Q0-M@$w>qVa#3?{Jm3Si*7ckx}U2X@WO`$hhGbHg*7 z!C>pI?1()nAqM{o)no-AvNM+MGR|FJ)>=Y+6;Ab4n%+L3QXbeGkPEz5WoayLVHsh{ zYGaVn!}IJWq_J}aD^?xw_r6M$LFA)Wx-p0EKq3aSgmf$AtcD^Q12-MxBZ!7%(?NQg znQEy-tzYl4BlhYvswJ0hZa0-hAKK3Sc&Zj-NNsUP`}xla(q?-3 zJ!Y2=>qz|z>4DEnN+mlo8Tz61e+jZ#nKA*AEBI>;}7f^)~nLE6|E*%cd7ycCw3_z*ZjG6<3pcB z)nS}wRW7q?nw47NZW{>9AUoS+Y>hE#+S8I(tD;&n*9OOMrP#IHwy^hK~ zov-Z=bxy{DUkctuHaba6-A)91RN-KotTMz`aj>@jdRBiNjdWeqi6uHHJx54lT6S!g z)p{braD3Vy)o~Wdl2n?C3jZKu+GwmJre5^%x|c6DW?;`P8ZL}DKyWYJ;PUPZKyLghaz{%c17kKn&7$~x{wqc=NzX35 zM1I;3@=V9akwL}|X>cb9I0K(sMz;xB4C%B9ZCsr2cnS}ty976Qs8lA`=_GY14b6+t z{iJIgFRKqAFb|{dTe3rZu;g&%qE)G^Wfj?Y(s!RF_YD5az$p}^bWhskY{=sNZk>HO zsFiP-yfNh|4H3`4GxJsDUpnxhW3zBQ{#T=M46FU;k1tIFdpz&k5Dhb!RI;XT%abTX=Z2-p`>S&6t_!KyoDqk|^MwlgzmMcRi^1n{alwx9Kf z2R;i7=AZw;5&WMm=KnO%AN2?xn0>dm+kapG8-#(qk;yMJ({B>OpMd{>F!+CTwbMlj zAp{blfj?#MQt07O9@1RcT)+JhMFYj!yZDt@Ma~lGK7DCw$>NpAGXEmSgTxdsVBE3V zos@JIJ%sa%9DZw!;x1Qic=sNbIc9yww$qt7%HKyIxwbeWUl}2%ru3Um=;c4K9R900 zzIfh{xb2(8b<_Kqr&8Kj36I{@o60fWZCYJ#BL59Ya0{YFn!m8_y$xbAih**~q4l(ylp zc@%5UAK9@#9RIzu44Qs#8H?OY$D+=XzOgM+)K~96n=+7`MX5AfmlwUAY+2dR%TaZW znqt2K0R2gt2+>Hr2kj$9b)D#W@FSA?dUo%T{c0XHnN618u#H9>-YE30+d1w0z0|fy zsg7xeX4O0qO+5Q%0ASPti7AMo?7u)b)8NP8c)p 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

M*_l*)yCgbh*pW15XX{o@%WKho6^ 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 z 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 Date: Sun, 25 Oct 2026 11:52:18 -0400 Subject: [PATCH 15/21] Update tests/analysis/go/test_go_analysis.py Co-authored-by: Saurabh Sinha --- tests/analysis/go/test_go_analysis.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 8fb5ac5c..362bd331 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -1,14 +1,13 @@ """Tests for the Go analysis facade with the cango subprocess mocked — no binary, no Neo4j. -Two corpora, both driven through the mocked subprocess (which writes the payload into the cache dir -exactly as cango would at ``-o``): - -* ``fixture_analysis.json`` — a tiny hand-built v2 payload (one module/struct/method/func/edge). The - deterministic level/cache/capture regression tests use it because they mutate ``max_level`` and the - call graph to simulate L1-vs-L2 generations. -* ``tests/resources/go/analysis.json`` — the committed real ``can://go/litestream`` corpus (55 - modules, 959 edges). The ``litestream_facade`` fixture runs the whole accessor surface over it, so - callers/callees/source are proven against genuine cango output, not a one-edge toy. +One corpus, driven through the mocked subprocess (which writes the payload into the cache dir exactly +as cango would at ``-o``): ``tests/resources/go/analysis.json``, the committed real +``can://go/litestream`` corpus (55 modules, 959 edges). + +* The deterministic level/cache/capture regression tests mutate its ``max_level`` and call graph to + simulate L1-vs-L2 generations. +* ``go_analysis`` runs the basic accessor smoke tests over it, and ``litestream_facade`` runs the + whole accessor surface, so callers/callees/source are proven against genuine cango output. """ import json From d571fd091c405539294801582e655def8505a82f Mon Sep 17 00:00:00 2001 From: lamwassi <85893516+lamwassi@users.noreply.github.com> Date: Sun, 25 Oct 2026 11:52:56 -0400 Subject: [PATCH 16/21] Update tests/analysis/go/test_go_analysis.py Co-authored-by: Saurabh Sinha --- tests/analysis/go/test_go_analysis.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 362bd331..bc066c94 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -23,7 +23,6 @@ from cldk.models.go import GoType from cldk.utils.exceptions.exceptions import CodeanalyzerExecutionException -FIXTURE = Path(__file__).parent / "fixture_analysis.json" #: the committed real corpus, via the parents[2]/"resources" convention the TS/Java tests use GO_ANALYSIS = Path(__file__).resolve().parents[2] / "resources" / "go" / "analysis.json" From da79249f999bebf2408141773c11475b54d54f41 Mon Sep 17 00:00:00 2001 From: lamwassi <85893516+lamwassi@users.noreply.github.com> Date: Sun, 25 Oct 2026 11:53:10 -0400 Subject: [PATCH 17/21] Update tests/analysis/go/test_go_analysis.py Co-authored-by: Saurabh Sinha --- tests/analysis/go/test_go_analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index bc066c94..3bb8b526 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -46,7 +46,7 @@ def _run(cmd, *args, **kwargs): @pytest.fixture def go_analysis(tmp_path, monkeypatch): - payload = FIXTURE.read_text(encoding="utf-8") + payload = GO_ANALYSIS.read_text(encoding="utf-8") monkeypatch.setenv("CODEANALYZER_GO_BIN", "cango") monkeypatch.setattr("subprocess.run", _fake_run_writing_output(payload)) return CLDK.go( From 1e319be17600fbf5eb6512edcde7200321dc40ca Mon Sep 17 00:00:00 2001 From: lamwassi <85893516+lamwassi@users.noreply.github.com> Date: Sun, 25 Oct 2026 11:53:24 -0400 Subject: [PATCH 18/21] Update tests/analysis/go/test_go_analysis.py Co-authored-by: Saurabh Sinha --- tests/analysis/go/test_go_analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 3bb8b526..218100f6 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -61,7 +61,7 @@ def go_analysis(tmp_path, monkeypatch): def _level_aware_run(call_count): """A subprocess.run mock that writes an analysis.json whose max_level matches the `-a` flag it was given, and counts how many times cango was invoked.""" - base = json.loads(FIXTURE.read_text(encoding="utf-8")) + base = json.loads(GO_ANALYSIS.read_text(encoding="utf-8")) def _run(cmd, *args, **kwargs): call_count.append(1) From f445f85f37929f4265c97275a07a413bb8bd604f Mon Sep 17 00:00:00 2001 From: lamwassi <85893516+lamwassi@users.noreply.github.com> Date: Sun, 25 Oct 2026 11:53:35 -0400 Subject: [PATCH 19/21] Update tests/analysis/go/test_go_analysis.py Co-authored-by: Saurabh Sinha --- tests/analysis/go/test_go_analysis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/analysis/go/test_go_analysis.py b/tests/analysis/go/test_go_analysis.py index 218100f6..1f7a7e33 100644 --- a/tests/analysis/go/test_go_analysis.py +++ b/tests/analysis/go/test_go_analysis.py @@ -127,8 +127,8 @@ def _capture(cmd, *args, **kwargs): out = Path(cmd[cmd.index("-o") + 1]) if "-o" in cmd else None if out: out.mkdir(parents=True, exist_ok=True) - (out / "analysis.json").write_text(FIXTURE.read_text(encoding="utf-8"), encoding="utf-8") - return MagicMock(stdout=FIXTURE.read_text(encoding="utf-8"), returncode=0) + (out / "analysis.json").write_text(GO_ANALYSIS.read_text(encoding="utf-8"), encoding="utf-8") + return MagicMock(stdout=GO_ANALYSIS.read_text(encoding="utf-8"), returncode=0) monkeypatch.setenv("CODEANALYZER_GO_BIN", "cango") monkeypatch.setattr("subprocess.run", _capture) From b5785ac29caf51b62d7c785107d94e52d6ad807e Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 25 Oct 2026 15:16:14 -0400 Subject: [PATCH 20/21] updates lock file --- uv.lock | 2453 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 1535 insertions(+), 918 deletions(-) diff --git a/uv.lock b/uv.lock index 51f54cfc..f7b11d84 100644 --- a/uv.lock +++ b/uv.lock @@ -2,40 +2,50 @@ version = 1 revision = 3 requires-python = ">=3.11" resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version < '3.12'", + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version >= '3.11.5' and python_full_version < '3.12'", + "python_full_version < '3.11.5'", +] + +[[package]] +name = "annotated-doc" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, ] [[package]] name = "annotated-types" -version = "0.7.0" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, ] [[package]] name = "anyio" -version = "4.9.0" +version = "4.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.15'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" }, + { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, ] [[package]] name = "appnope" -version = "0.1.4" +version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/f7/a82489c2b6ebe32d3e2831895ae19c77861f0eadf3bb16034484d965dbb2/appnope-1.0.0.tar.gz", hash = "sha256:685db59cb6043c3c2e528adc0b3bce3a5f8d09bcf7492c6ea650d1b7421f3c49", size = 5454, upload-time = "2026-08-20T21:36:13.748Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, + { url = "https://files.pythonhosted.org/packages/46/c7/6b687cb0f83d2a51017d47953f2ee430ffad6fec2a8ebc964e0718a33eb1/appnope-1.0.0-py3-none-any.whl", hash = "sha256:6fe0c04218aab65c54c4ff81638cdbf848d89f5653b74d68638a137f200dd16e", size = 4158, upload-time = "2026-08-20T21:36:12.444Z" }, ] [[package]] @@ -52,36 +62,62 @@ wheels = [ [[package]] name = "argon2-cffi-bindings" -version = "21.2.0" +version = "26.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911, upload-time = "2021-12-01T08:52:55.68Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658, upload-time = "2021-12-01T09:09:17.016Z" }, - { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583, upload-time = "2021-12-01T09:09:19.546Z" }, - { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168, upload-time = "2021-12-01T09:09:21.445Z" }, - { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709, upload-time = "2021-12-01T09:09:18.182Z" }, - { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613, upload-time = "2021-12-01T09:09:22.741Z" }, - { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583, upload-time = "2021-12-01T09:09:24.177Z" }, - { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475, upload-time = "2021-12-01T09:09:26.673Z" }, - { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698, upload-time = "2021-12-01T09:09:27.87Z" }, - { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817, upload-time = "2021-12-01T09:09:30.267Z" }, - { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104, upload-time = "2021-12-01T09:09:31.335Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/0b/43/bb8b6e8708d49a5ab36781333af092d9f483b198a2710d01281204640055/argon2_cffi_bindings-26.1.0.tar.gz", hash = "sha256:63505c71542a44b68b1e38060450fb006404170da375feb31af153e7f9c6205d", size = 1790807, upload-time = "2026-08-20T07:44:22.492Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/d2/0ae991f1b2181e5be49007c574710a800ad36c2978683addb3e67c474e55/argon2_cffi_bindings-26.1.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:21ca0396fe5ec995dd54431c32698189666f9224810acfa752e50d2bd94d9df2", size = 25521, upload-time = "2026-08-20T07:32:43.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e4/ad91d8297638aa2258aad4501c306aca99480dfe76ccd638173fa3702db9/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78de2d65e0b9ea7ce9d1b1c3e87297b2d7305a02c266ee2a2d6910daddd7ee69", size = 27177, upload-time = "2026-08-20T07:32:44.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/86/5363df11b86d02cf3662208e7406496327649cc90eb365bf6f4e8a54a41f/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27f1821903e2ceadcb88ec2b45ef190897b7682449c772f4d9b53e42c520cf29", size = 26597, upload-time = "2026-08-20T07:32:45.172Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b5/a14dcc592652347dad23ee93b278a4da5d2a25c9ed3ebd10d68eea823a4f/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d88e5f7e60f28ae0b0cc6b2f16c43e87cd642a196a86f85e0d8bb6fe016fc16d", size = 27403, upload-time = "2026-08-20T07:32:46.13Z" }, + { url = "https://files.pythonhosted.org/packages/b3/81/b4a20d4902af7f796390bf9245ff83c5217dfa7367efa1d14986956c482b/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:34b7d9c24a4165a2c61cc8ae11d44d48c9ce2830fb536cb7914e11fdd9962728", size = 27132, upload-time = "2026-08-20T07:32:47.13Z" }, + { url = "https://files.pythonhosted.org/packages/7e/1b/c8de358af07b1c490e0fcb863ef98e46ddb486e45567aca5a60bd68d9daa/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:224865cbbcb7a2bd1356741dff12b0134df726b6d44bb7b500df8e303cbd9e81", size = 27588, upload-time = "2026-08-20T07:32:48.087Z" }, + { url = "https://files.pythonhosted.org/packages/48/2f/7ee62a6e79f9309f9d9982d301b22a00010adb580c05c8109b94d7b33de0/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ffff613aaa9ce6236766e2fc6dc560bb5abde7a2e2416e3db1f9ae395a2b4dd4", size = 26785, upload-time = "2026-08-20T07:32:48.977Z" }, + { url = "https://files.pythonhosted.org/packages/e9/10/960d0ee93d4897741bcaf4799c697dae2d81499f66fd1ed042a7dd54c1f4/argon2_cffi_bindings-26.1.0-cp310-abi3-win32.whl", hash = "sha256:a86c069c91a747a2c4e5c51473590aeb48172fff9b2130d23729a42d98665ecb", size = 23898, upload-time = "2026-08-20T07:32:50.114Z" }, + { url = "https://files.pythonhosted.org/packages/6d/3a/0cc14a05810e6add9bce5e87693334baa2222de5f647fa31781885b6573f/argon2_cffi_bindings-26.1.0-cp310-abi3-win_amd64.whl", hash = "sha256:2c36ff87b5dfaa477d0bd51e9d7f6abdae7c8955d2983c97419085d842154b3e", size = 25730, upload-time = "2026-08-20T07:32:51.091Z" }, + { url = "https://files.pythonhosted.org/packages/4e/db/d83cf2af140547f0b9cdaece05b2dc2dcbf991be4667331d073eff771435/argon2_cffi_bindings-26.1.0-cp310-abi3-win_arm64.whl", hash = "sha256:f9c4420a7a864fe1b86ce35befc95b8e39fb852493b81cf798671ddc265de638", size = 24478, upload-time = "2026-08-20T07:32:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/bb/5f/f652055e18d2627e2eed94c7f31a792127cfe38df786635395d742321674/argon2_cffi_bindings-26.1.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:af11ac37a7c53dc16cb7950a6190851b0870fe218b6c60c0bb7ac355234e3083", size = 15434, upload-time = "2026-08-20T07:32:53.143Z" }, + { url = "https://files.pythonhosted.org/packages/76/38/de696045960f5b846d428c0fb6c130ed3da87aac2af209b05c193815404c/argon2_cffi_bindings-26.1.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:db0fcd827ca61622a01b220aadfbece01939acf53888f2cb98cd93e9b1e2c97e", size = 15449, upload-time = "2026-08-20T07:32:54.075Z" }, + { url = "https://files.pythonhosted.org/packages/91/0a/c25af768f6b75a5a71e31207f87c540656b2808c015260444a22763221ad/argon2_cffi_bindings-26.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:28524438cd3e723f25412f63d4fd516ff5bae9ae5aa56acbe2a1404398a0cf31", size = 25683, upload-time = "2026-08-20T07:32:55.05Z" }, + { url = "https://files.pythonhosted.org/packages/a8/7e/be212c751ab0bcea7f646615f933bf262e8e50b3f7bef32f861d0a2d066b/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac82fc756a446b6ccd7139ce70efa9d8bbe541e7ad579a12dcb52764b7175c5f", size = 27311, upload-time = "2026-08-20T07:32:56.166Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ee/f84b28e4afd13d3cac36c1d8fa8c239d2dc2c51cd978d02ee5d5ad98d9bb/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6a4e68eed961a8de6928d1c17ff3dc2a547e0e923c17f8f1cd79fb7bc9502f98", size = 26771, upload-time = "2026-08-20T07:32:57.206Z" }, + { url = "https://files.pythonhosted.org/packages/21/c3/95c07a023691ecd529da9cb6a8f0779e13ebc1bdfaa86d145fdc1c6e7e79/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:151dfaad9de753f4af2a7854e707e4784f2acc434340ade64239c5b104b2d605", size = 27568, upload-time = "2026-08-20T07:32:58.361Z" }, + { url = "https://files.pythonhosted.org/packages/e6/31/3a18e31406d8694b4d6a31573c3e572fff6bed318bb744453eb653766d22/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:061a6919145bbf282ebf1f9c59d3135d4833c25313c8595c0d68cf7712ddfce2", size = 27280, upload-time = "2026-08-20T07:32:59.343Z" }, + { url = "https://files.pythonhosted.org/packages/0b/39/d4be4577e178b2397aa5b5575c8a309bf0da2afe05fe0c72c8f398662d63/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:62ff20cd130c956c7c9144d5fe35228f98b51c579b2439e988b27ef93e16c02a", size = 27776, upload-time = "2026-08-20T07:33:00.325Z" }, + { url = "https://files.pythonhosted.org/packages/71/47/78f4dd96f7411339f723b96fe24039c1bd5835102b8a5ba71ac4ec712ac7/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:19423e5d7ac1cc354baab59eaabf18db2ec04ef6593b5abe5a34f323c4a8f87a", size = 26932, upload-time = "2026-08-20T07:33:01.272Z" }, + { url = "https://files.pythonhosted.org/packages/3b/cd/96bfd37434cc0a848a9066c291d84b28846c4c9ea289ed9866b1164d622b/argon2_cffi_bindings-26.1.0-cp314-cp314t-win32.whl", hash = "sha256:4f84cdd868978d7b7350a566c254042d44216d9e37f241f3a6d3b1dfebeede35", size = 24878, upload-time = "2026-08-20T07:33:02.189Z" }, + { url = "https://files.pythonhosted.org/packages/f1/42/d8b6810abd9b1bd2f47ebbccf460da59c9f32e94888bea4f7b137d998797/argon2_cffi_bindings-26.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2b741888c93147444fdfc851abd81cc207f37f7f7da42062a00deb3888e57da8", size = 26656, upload-time = "2026-08-20T07:33:03.222Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d1/095d95eaf2ed1d9f77268cf3291bde148c6cd56121f8db2c74c1ba618a0e/argon2_cffi_bindings-26.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:6ab674f668d5962a3a4136ae0812519b0f1586874263723a32181d60d64137e1", size = 25378, upload-time = "2026-08-20T07:33:04.332Z" }, + { url = "https://files.pythonhosted.org/packages/66/cb/214092c39c4dbcb72cf98b12234ddac2221f8fe2c0acf29c6a70fa83be53/argon2_cffi_bindings-26.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:1d98e33bd8bd67d7206c124e200bf2229c4cfa8c9c19f7b44a897f0fc71837eb", size = 25683, upload-time = "2026-08-20T07:33:05.337Z" }, + { url = "https://files.pythonhosted.org/packages/83/e5/02015b83e9b05ccb85ff2ced424cf6e83a12d3810bc7f66d679a92b69ffb/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ccaf0a46cbb380f1fd102a874e32aa629fd3cb0c0e94f4943fa1f6d5edc5dac6", size = 27310, upload-time = "2026-08-20T07:33:06.344Z" }, + { url = "https://files.pythonhosted.org/packages/c3/4a/85e612787d0796878b3b4f6bd53dcd5484b6fe7b64cc6fc7b6e6a04cf835/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0c3103fcff20183e593459cfea6e012281c0e76ae3ed8b5565ad1b92eac3990", size = 26771, upload-time = "2026-08-20T07:33:07.429Z" }, + { url = "https://files.pythonhosted.org/packages/f6/84/ccb003b6f9969820e87656398f4d49c857def71a85ca1588a0e809afd7ce/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c49e853a3bef9dd10329f31f702e7fa9b5c58229ff9c2ff6d069efaf09177c08", size = 27569, upload-time = "2026-08-20T07:33:08.598Z" }, + { url = "https://files.pythonhosted.org/packages/88/07/c26b76debf0998ee08fbe947ab2058ac5de37d4b9d46b06c17abaa6c4ce9/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:6376d4b3aca039375ca8bf92f770da0ec424a1ce3a37077a8d3c557411aa56ca", size = 27279, upload-time = "2026-08-20T07:33:09.518Z" }, + { url = "https://files.pythonhosted.org/packages/ee/0d/ead6ddc029f91bc9b9390686dad3c808ab08100d348f6266b5f93f8970ee/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:9bacedc04b0402837586a17f0919e3dfdd95291f441f1f56bd80ec274c2840a1", size = 27774, upload-time = "2026-08-20T07:33:10.728Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/c108530d9eb86036b78d3af4de28b83b4a2d9a70512bd10ff8e59966aab4/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:76ae29acace5d33355344612844d588e19deaaba4639d8bb01601e4b1418ef36", size = 26933, upload-time = "2026-08-20T07:33:11.661Z" }, + { url = "https://files.pythonhosted.org/packages/a9/02/0bfc59e781c89acf64c31c388aade9d9d1c1ea38aa1ba1292fe07f607fe9/argon2_cffi_bindings-26.1.0-cp315-cp315t-win32.whl", hash = "sha256:df612391feca41c44d20118f3b88d1b86419465cd1f5496859f715ca60ec2210", size = 24875, upload-time = "2026-08-20T07:33:12.616Z" }, + { url = "https://files.pythonhosted.org/packages/61/c7/c3e46068cddffccecb8ad94d71135e9bf62bbc789589e7dfadc7c6f59214/argon2_cffi_bindings-26.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:1a0a29ed86960e44eaace7e081bdfab4f08b012fd96ec8edba71e2ad020939e4", size = 26655, upload-time = "2026-08-20T07:33:13.521Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ca/18b9c8c45fecf34b9100ec6d7946057f14a158f2eaa20ea123a3e82351cb/argon2_cffi_bindings-26.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d157ddfab1e8b21f2f1dedda9c09645d98b5ed0b667b0626be600a345d426440", size = 25376, upload-time = "2026-08-20T07:33:14.491Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b9/97f0370f99611b14efd384918613dd5cbda75f28d9bb1b677aacfeaa17df/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:19b562b1de4b9052ef1214a2821c44b6e6f22945daa102c32ae4eff929d8b6d8", size = 23055, upload-time = "2026-08-20T07:33:19.716Z" }, + { url = "https://files.pythonhosted.org/packages/ae/70/7eb3fe7bf00103cbbb569c51aef150661f22b734a782673a600ff0f52309/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49d525938467d52c923a890153c99087c9d5a937d1f6b585dbdba34ec82e397a", size = 24869, upload-time = "2026-08-20T07:33:20.671Z" }, + { url = "https://files.pythonhosted.org/packages/5b/4b/9d5919c6cb1f15df7406af0f99b048bd93936f112e3e8f4c8077bc2a9110/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1b0bcac4d490a237e18cf91f57352920c29f77f2fa39efd0813fb81298bf17ba", size = 24216, upload-time = "2026-08-20T07:33:21.653Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/32109943bace7729233cc4ee78530baa306d8cc3c6501a64ba8cb3b58129/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:0cc40f7b4050bb93eb67de95d2d759322fc7ce4930b9d645581ecf4913ec651e", size = 23584, upload-time = "2026-08-20T07:33:22.613Z" }, ] [[package]] name = "arrow" -version = "1.3.0" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, - { name = "types-python-dateutil" }, + { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960, upload-time = "2023-09-30T22:11:18.25Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931, upload-time = "2025-10-18T17:46:46.761Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419, upload-time = "2023-09-30T22:11:16.072Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797, upload-time = "2025-10-18T17:46:45.663Z" }, ] [[package]] @@ -104,56 +140,57 @@ wheels = [ [[package]] name = "asttokens" -version = "3.0.0" +version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, ] [[package]] name = "async-lru" -version = "2.0.5" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380, upload-time = "2025-03-16T17:25:36.919Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/43/9d22679e8dd0ed965182cca990d32c68b150730cce8046ad61b3179b5b7a/async_lru-2.4.0.tar.gz", hash = "sha256:b0b0077d9b7596615b3c12d0aad4f6aeccaaa0ac75ceae472608ede89e764c08", size = 22927, upload-time = "2026-10-12T18:12:54.276Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069, upload-time = "2025-03-16T17:25:35.422Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0b/6a817103fb78faca4970c686a61065047da7226aba0d7cae6d4299b20c59/async_lru-2.4.0-py3-none-any.whl", hash = "sha256:1b46a96419ef91fe11431d58db98d792c9b4250001427191a40faf1031934212", size = 10045, upload-time = "2026-10-12T18:12:53.091Z" }, ] [[package]] name = "attrs" -version = "25.3.0" +version = "26.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] [[package]] name = "babel" -version = "2.17.0" +version = "2.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] [[package]] name = "beautifulsoup4" -version = "4.13.4" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "soupsieve" }, + { name = "soupsieve", version = "2.10", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11.5'" }, + { name = "soupsieve", version = "3.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11.5'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, + { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, ] [[package]] name = "black" -version = "25.1.0" +version = "25.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -161,34 +198,43 @@ dependencies = [ { name = "packaging" }, { name = "pathspec" }, { name = "platformdirs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449, upload-time = "2025-01-29T04:15:40.373Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/4f/87f596aca05c3ce5b94b8663dbfe242a12843caaa82dd3f85f1ffdc3f177/black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0", size = 1614372, upload-time = "2025-01-29T05:37:11.71Z" }, - { url = "https://files.pythonhosted.org/packages/e7/d0/2c34c36190b741c59c901e56ab7f6e54dad8df05a6272a9747ecef7c6036/black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299", size = 1442865, upload-time = "2025-01-29T05:37:14.309Z" }, - { url = "https://files.pythonhosted.org/packages/21/d4/7518c72262468430ead45cf22bd86c883a6448b9eb43672765d69a8f1248/black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096", size = 1749699, upload-time = "2025-01-29T04:18:17.688Z" }, - { url = "https://files.pythonhosted.org/packages/58/db/4f5beb989b547f79096e035c4981ceb36ac2b552d0ac5f2620e941501c99/black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2", size = 1428028, upload-time = "2025-01-29T04:18:51.711Z" }, - { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988, upload-time = "2025-01-29T05:37:16.707Z" }, - { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985, upload-time = "2025-01-29T05:37:18.273Z" }, - { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816, upload-time = "2025-01-29T04:18:33.823Z" }, - { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860, upload-time = "2025-01-29T04:19:12.944Z" }, - { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673, upload-time = "2025-01-29T05:37:20.574Z" }, - { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190, upload-time = "2025-01-29T05:37:22.106Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926, upload-time = "2025-01-29T04:18:58.564Z" }, - { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613, upload-time = "2025-01-29T04:19:27.63Z" }, - { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" }, + { name = "pytokens" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/d9/07b458a3f1c525ac392b5edc6b191ff140b596f9d77092429417a54e249d/black-25.12.0.tar.gz", hash = "sha256:8d3dd9cea14bff7ddc0eb243c811cdb1a011ebb4800a5f0335a01a68654796a7", size = 659264, upload-time = "2025-12-08T01:40:52.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/ad/7ac0d0e1e0612788dbc48e62aef8a8e8feffac7eb3d787db4e43b8462fa8/black-25.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0cfa263e85caea2cff57d8f917f9f51adae8e20b610e2b23de35b5b11ce691a", size = 1877003, upload-time = "2025-12-08T01:43:29.967Z" }, + { url = "https://files.pythonhosted.org/packages/e8/dd/a237e9f565f3617a88b49284b59cbca2a4f56ebe68676c1aad0ce36a54a7/black-25.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a2f578ae20c19c50a382286ba78bfbeafdf788579b053d8e4980afb079ab9be", size = 1712639, upload-time = "2025-12-08T01:52:46.756Z" }, + { url = "https://files.pythonhosted.org/packages/12/80/e187079df1ea4c12a0c63282ddd8b81d5107db6d642f7d7b75a6bcd6fc21/black-25.12.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e1b65634b0e471d07ff86ec338819e2ef860689859ef4501ab7ac290431f9b", size = 1758143, upload-time = "2025-12-08T01:45:29.137Z" }, + { url = "https://files.pythonhosted.org/packages/93/b5/3096ccee4f29dc2c3aac57274326c4d2d929a77e629f695f544e159bfae4/black-25.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a3fa71e3b8dd9f7c6ac4d818345237dfb4175ed3bf37cd5a581dbc4c034f1ec5", size = 1420698, upload-time = "2025-12-08T01:45:53.379Z" }, + { url = "https://files.pythonhosted.org/packages/7e/39/f81c0ffbc25ffbe61c7d0385bf277e62ffc3e52f5ee668d7369d9854fadf/black-25.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:51e267458f7e650afed8445dc7edb3187143003d52a1b710c7321aef22aa9655", size = 1229317, upload-time = "2025-12-08T01:46:35.606Z" }, + { url = "https://files.pythonhosted.org/packages/d1/bd/26083f805115db17fda9877b3c7321d08c647df39d0df4c4ca8f8450593e/black-25.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:31f96b7c98c1ddaeb07dc0f56c652e25bdedaac76d5b68a059d998b57c55594a", size = 1924178, upload-time = "2025-12-08T01:49:51.048Z" }, + { url = "https://files.pythonhosted.org/packages/89/6b/ea00d6651561e2bdd9231c4177f4f2ae19cc13a0b0574f47602a7519b6ca/black-25.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05dd459a19e218078a1f98178c13f861fe6a9a5f88fc969ca4d9b49eb1809783", size = 1742643, upload-time = "2025-12-08T01:49:59.09Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f3/360fa4182e36e9875fabcf3a9717db9d27a8d11870f21cff97725c54f35b/black-25.12.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1f68c5eff61f226934be6b5b80296cf6939e5d2f0c2f7d543ea08b204bfaf59", size = 1800158, upload-time = "2025-12-08T01:44:27.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/08/2c64830cb6616278067e040acca21d4f79727b23077633953081c9445d61/black-25.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:274f940c147ddab4442d316b27f9e332ca586d39c85ecf59ebdea82cc9ee8892", size = 1426197, upload-time = "2025-12-08T01:45:51.198Z" }, + { url = "https://files.pythonhosted.org/packages/d4/60/a93f55fd9b9816b7432cf6842f0e3000fdd5b7869492a04b9011a133ee37/black-25.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:169506ba91ef21e2e0591563deda7f00030cb466e747c4b09cb0a9dae5db2f43", size = 1237266, upload-time = "2025-12-08T01:45:10.556Z" }, + { url = "https://files.pythonhosted.org/packages/c8/52/c551e36bc95495d2aa1a37d50566267aa47608c81a53f91daa809e03293f/black-25.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a05ddeb656534c3e27a05a29196c962877c83fa5503db89e68857d1161ad08a5", size = 1923809, upload-time = "2025-12-08T01:46:55.126Z" }, + { url = "https://files.pythonhosted.org/packages/a0/f7/aac9b014140ee56d247e707af8db0aae2e9efc28d4a8aba92d0abd7ae9d1/black-25.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9ec77439ef3e34896995503865a85732c94396edcc739f302c5673a2315e1e7f", size = 1742384, upload-time = "2025-12-08T01:49:37.022Z" }, + { url = "https://files.pythonhosted.org/packages/74/98/38aaa018b2ab06a863974c12b14a6266badc192b20603a81b738c47e902e/black-25.12.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e509c858adf63aa61d908061b52e580c40eae0dfa72415fa47ac01b12e29baf", size = 1798761, upload-time = "2025-12-08T01:46:05.386Z" }, + { url = "https://files.pythonhosted.org/packages/16/3a/a8ac542125f61574a3f015b521ca83b47321ed19bb63fe6d7560f348bfe1/black-25.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:252678f07f5bac4ff0d0e9b261fbb029fa530cfa206d0a636a34ab445ef8ca9d", size = 1429180, upload-time = "2025-12-08T01:45:34.903Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2d/bdc466a3db9145e946762d52cd55b1385509d9f9004fec1c97bdc8debbfb/black-25.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bc5b1c09fe3c931ddd20ee548511c64ebf964ada7e6f0763d443947fd1c603ce", size = 1239350, upload-time = "2025-12-08T01:46:09.458Z" }, + { url = "https://files.pythonhosted.org/packages/35/46/1d8f2542210c502e2ae1060b2e09e47af6a5e5963cb78e22ec1a11170b28/black-25.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:0a0953b134f9335c2434864a643c842c44fba562155c738a2a37a4d61f00cad5", size = 1917015, upload-time = "2025-12-08T01:53:27.987Z" }, + { url = "https://files.pythonhosted.org/packages/41/37/68accadf977672beb8e2c64e080f568c74159c1aaa6414b4cd2aef2d7906/black-25.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2355bbb6c3b76062870942d8cc450d4f8ac71f9c93c40122762c8784df49543f", size = 1741830, upload-time = "2025-12-08T01:54:36.861Z" }, + { url = "https://files.pythonhosted.org/packages/ac/76/03608a9d8f0faad47a3af3a3c8c53af3367f6c0dd2d23a84710456c7ac56/black-25.12.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9678bd991cc793e81d19aeeae57966ee02909877cb65838ccffef24c3ebac08f", size = 1791450, upload-time = "2025-12-08T01:44:52.581Z" }, + { url = "https://files.pythonhosted.org/packages/06/99/b2a4bd7dfaea7964974f947e1c76d6886d65fe5d24f687df2d85406b2609/black-25.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:97596189949a8aad13ad12fcbb4ae89330039b96ad6742e6f6b45e75ad5cfd83", size = 1452042, upload-time = "2025-12-08T01:46:13.188Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/d9825de75ae5dd7795d007681b752275ea85a1c5d83269b4b9c754c2aaab/black-25.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:778285d9ea197f34704e3791ea9404cd6d07595745907dd2ce3da7a13627b29b", size = 1267446, upload-time = "2025-12-08T01:46:14.497Z" }, + { url = "https://files.pythonhosted.org/packages/68/11/21331aed19145a952ad28fca2756a1433ee9308079bd03bd898e903a2e53/black-25.12.0-py3-none-any.whl", hash = "sha256:48ceb36c16dbc84062740049eef990bb2ce07598272e673c17d1a7720c71c828", size = 206191, upload-time = "2025-12-08T01:40:50.963Z" }, ] [[package]] name = "bleach" -version = "6.2.0" +version = "6.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/3c/e12ac860709702bd5ebeb9b56a4fe334f1001246ee1b8f2b7ee28912df7d/bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452", size = 204857, upload-time = "2026-06-05T13:01:13.734Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, + { url = "https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081", size = 165109, upload-time = "2026-06-05T13:01:12.504Z" }, ] [package.optional-dependencies] @@ -198,104 +244,256 @@ css = [ [[package]] name = "certifi" -version = "2025.7.14" +version = "2026.10.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, ] [[package]] name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, + { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, + { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, + { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, ] [[package]] name = "charset-normalizer" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, - { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, - { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, - { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, - { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, - { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, - { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, - { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, - { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, - { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, +version = "3.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/1c/f41d4e74c28ab327ff3acd36053f7ea506c55872d7a90b0fa71aa3ab0c89/charset_normalizer-3.5.2.tar.gz", hash = "sha256:39de2a259fc954455c57274dc94c79d5842774e1247a016aff30bc0efed0f4ef", size = 172659, upload-time = "2026-09-30T04:39:23.398Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/67/6a0b94a7960d5e1b5eacd2fb529f3fccc47db4644f7f0a7cfdcfc3be578a/charset_normalizer-3.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d21b8b13c7592db2ac5e544a6d83187b995257472b0c9e8351b6d507ae37ed6", size = 370642, upload-time = "2026-09-30T04:35:06.91Z" }, + { url = "https://files.pythonhosted.org/packages/fb/94/01009e13b94041599004edf32e56e382c24e570f60f79bab8efe45cfe1eb/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d760fe2a4d7c3b226cb9026d6a842868d52a7901bd98420e1baf14e80da85cf5", size = 259280, upload-time = "2026-09-30T04:35:08.448Z" }, + { url = "https://files.pythonhosted.org/packages/66/85/3b5358f60a13210f0b67d3755c168ef758701b021e655d88d4da28554467/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9790464842f85f437dbbb54417eda1e0e6bfc52dd8d22d6fd1c994b73b2dc74", size = 245335, upload-time = "2026-09-30T04:35:10.104Z" }, + { url = "https://files.pythonhosted.org/packages/74/75/77c1c479b09ecd751d1e767b251ea5c14d4d50ff757bf404afab2692f600/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4685902cf26edf013ed7a3da0f426ebba7a00ebb9541386d835afbf002c11cab", size = 291707, upload-time = "2026-09-30T04:35:11.575Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0d/363f78cacb70f58f15f4b083961bbd9d292f335d3f5c66fc4f1cfe69cb90/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4495c5002a7b28557e7e222e77e0b661183e432b7d6d2e788101e3f240e05b8c", size = 286747, upload-time = "2026-09-30T04:35:13.022Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ed/cf505d3011ffceb12c2067a7a5d3cfe92b875d4d44bb0ff0d69375e2c184/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:211d5a3eb6af8f513b8d4ca19a8c1b7accab1b5f0d3175f9826b03c1a920dc1f", size = 269972, upload-time = "2026-09-30T04:35:14.606Z" }, + { url = "https://files.pythonhosted.org/packages/15/d8/f0a93a431d170e7ca681d4f6650fee3de934d18560e474e7267eb4b0f987/charset_normalizer-3.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef4fcbf3327382cd4c9f540babd61248208af7b93eec4de397b4d5f58a09e288", size = 269339, upload-time = "2026-09-30T04:35:16.087Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/9b2bd1c5b7af02462c9752d33994834ff972a96b4c483eefde9e594488e2/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd16aabe4a02a297c23417aa17ac6299dbd8c49f673bcd645b4929b11f5a4400", size = 261683, upload-time = "2026-09-30T04:35:17.488Z" }, + { url = "https://files.pythonhosted.org/packages/76/a5/cac540ab0fd61f3fec88ad3dbb64509e71424593d73cfdfff5ab3e4db279/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fb9e68df06293761f9fe66ade60a9bc6d0f5e42b8acf2939a9158af86ab0e5bd", size = 248143, upload-time = "2026-09-30T04:35:18.849Z" }, + { url = "https://files.pythonhosted.org/packages/71/7a/ff467301deef2089fad87f72df9e000a26a78fec7acbb18e1999371b8369/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:59f63901b0031c3136cf64704dcb21de0bbae62ce2c9529bc39d27665463de37", size = 292358, upload-time = "2026-09-30T04:35:20.326Z" }, + { url = "https://files.pythonhosted.org/packages/ad/77/22d7e785d1e210afc2e2f58600dd1799d17a35665faf84383f002826c5f8/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:304d5463e65a35d7bb0850550e0780395395f6fcf452f04db7d5ca7cecc425ac", size = 268766, upload-time = "2026-09-30T04:35:21.72Z" }, + { url = "https://files.pythonhosted.org/packages/ae/91/e8e946267f1c2d9e2bd651726e2fbd2addf02c4d36cea5069e32ca9d7bb5/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9cf9b1a857e25c4baceeb3624e92a56df3668f398c4acba74e174d81fb4d1d3a", size = 287432, upload-time = "2026-09-30T04:35:23.273Z" }, + { url = "https://files.pythonhosted.org/packages/4e/88/7561d8a88d555e7df6623abe7c0070b4baf47549b9408783a2ae0a1a6cf7/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:114e4d0c92d618409ed82a99e22b5c5e768fe995f2973f78265f4524f49d4640", size = 272470, upload-time = "2026-09-30T04:35:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/35/7e/578c702301ec036f01455f30744a08d2b42f6ab35b9b2d4bf8cae0ef2a80/charset_normalizer-3.5.2-cp311-cp311-win32.whl", hash = "sha256:2625388c6c754520c37abaf3b41eb34d1cc4a373f457898f08606c8e362b891d", size = 186688, upload-time = "2026-09-30T04:35:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/e8/fc/fdf8cf52ff21cd5bf158f20978991cf985325842f74283eb6df26c8a39d8/charset_normalizer-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:87e50a3e7cb90af586b6c5faf23e302a970415ac73bd7bd90a515a04b427ef96", size = 214932, upload-time = "2026-09-30T04:35:27.796Z" }, + { url = "https://files.pythonhosted.org/packages/97/66/3e45a506d8110b632541faf9a9470185aa9878f1ed44020f31346c1c5e5b/charset_normalizer-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:254eb48b9fa5ee9898a3c445825a1f340fe53712a098904b39b0bddba8ea3cb1", size = 202828, upload-time = "2026-09-30T04:35:29.259Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c8/693809898870237d82785a03f3b2b58fe4c9f14669f84a7d4e623c92a59e/charset_normalizer-3.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed2a239c0ea213acc1908150a3037257083c7c083128f1a4cec2ec4b97dca491", size = 367780, upload-time = "2026-09-30T04:35:30.888Z" }, + { url = "https://files.pythonhosted.org/packages/c9/87/2fea8c13dc24b3ca9c6f803a5b2dfdeae73eb4f9e12c7885ed908ff0433c/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b91363207bd9dc966a691e959bb47f64b30f7ac4b072be9968b366982f7db77c", size = 246730, upload-time = "2026-09-30T04:35:32.286Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9e/09efac30b937722f46d3110ba30b875b24b2e3a266ed746cc4e376a94d80/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:38a873987f3be698494da8b2e3085e29da02da7b633dce73e79c699a113d7bf0", size = 237707, upload-time = "2026-09-30T04:35:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/9e/18/70d76670b13686237863a379928d60bd10e021f17d243ab3d7014c4a5f4e/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:355ad8011081dec5412240c087a9a0c9d4d5039f3ed11a3f13e18c2b29b56c51", size = 273050, upload-time = "2026-09-30T04:35:35.138Z" }, + { url = "https://files.pythonhosted.org/packages/54/e2/77a8b09d5adc013ed07b95b01b8b8fa5441c4e810e83ee7e4aae2fa4d91a/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ee21e28f0430bd6dc9086c6e525d5e818a44a5ad19720c8a0ef766792f3eb5e5", size = 270345, upload-time = "2026-09-30T04:35:36.502Z" }, + { url = "https://files.pythonhosted.org/packages/7f/c5/38806a25ab5e65fc178f39affeda20858efafede2fce1ffc2556cfc9fe73/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d31298449090ab8d47b7b1b2a555ff73cac7ed438a08b7ac160980c7ebed649", size = 257601, upload-time = "2026-09-30T04:35:37.919Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8d/213565184708fdb263ae55e2c04ee1ff748129dd65d48ed0e3502da9c85a/charset_normalizer-3.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5cde776b7cc66e4f6c99612cea4aa7269aa65863f7a15841b2c264f103822f4e", size = 252222, upload-time = "2026-09-30T04:35:39.544Z" }, + { url = "https://files.pythonhosted.org/packages/7e/24/76d2cefc25472531e4c5c7dfff68865eb1c39b78482f0fdc15b46f047830/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae4f5fea5b8b8ccff88238cc8569303e5ee95efae67fa62922a311397a71f346", size = 248482, upload-time = "2026-09-30T04:35:41.088Z" }, + { url = "https://files.pythonhosted.org/packages/7d/dc/65a801b66ab4c197e22c433ab25e7ac24324ac6f45a2269aca42cce309bf/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f7d486c83842422badd511868fd8a9a20e9407ace71564b6af47ce7e60a336c1", size = 241206, upload-time = "2026-09-30T04:35:42.59Z" }, + { url = "https://files.pythonhosted.org/packages/a7/95/ca9b5eabde673002c6f1e7ada1b223916fe18f6d661da7aabd4d643718f1/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:11a4d68a6ecda3292cb1e50239e111543ba5d709bb62a6b4ea1afcfa729d8875", size = 273190, upload-time = "2026-09-30T04:35:44.347Z" }, + { url = "https://files.pythonhosted.org/packages/2d/8b/803b4d2a3f6e1740f63f1e87b04d14b42f3d4fdfe6ed7d4db2d34102b14f/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d6734d2ef8a50fbf8445c139477da401f50d62a0606bf00e20ec6d87773fefb1", size = 253527, upload-time = "2026-09-30T04:35:45.915Z" }, + { url = "https://files.pythonhosted.org/packages/a9/55/93c0e5dbd085ae0471346026abbe7e0db9ea2d6fea74e51f0b5a46f233a7/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a815775b6c38d4e0ff7bcffbeba67feded90202bb6a226b8dd35f1c855217413", size = 271285, upload-time = "2026-09-30T04:35:47.49Z" }, + { url = "https://files.pythonhosted.org/packages/95/69/0dbd0e0b9b16cfa816cdfcb3e2e3854a1f680dc07fb1245ea125e7448060/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:23851fb4e1b85ed3f6c2a27b777cdfe2e19fb5b38429a8faf38c7542b7665869", size = 260010, upload-time = "2026-09-30T04:35:48.996Z" }, + { url = "https://files.pythonhosted.org/packages/58/9d/e7b88e7b1bf403590c3b573277b5e1e488c68c7a6fbacca310a2c324e90c/charset_normalizer-3.5.2-cp312-cp312-win32.whl", hash = "sha256:db19d07e2e0129e974a0e65d0064fc222a446cd5122c2fd4184d2af9fc734a9e", size = 184125, upload-time = "2026-09-30T04:35:50.777Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e6/e6e083884cbcfd49c64865af05027fe7011be7b2d9179524f099a1b611f3/charset_normalizer-3.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:780fbe7cab297b81dad9fb8dc5eb003c0468ffb0d9e5f65068c53a34661a96bc", size = 207486, upload-time = "2026-09-30T04:35:52.194Z" }, + { url = "https://files.pythonhosted.org/packages/c4/e3/017aea0911ada7405a825c7d937eb3a13009664e2f5b38e8c4bbf2abf894/charset_normalizer-3.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:e2af3aad578aa6bd1384bcf4750fc285e5a9de53f40b7d41e5a0bf748edeb2b3", size = 196734, upload-time = "2026-09-30T04:35:53.636Z" }, + { url = "https://files.pythonhosted.org/packages/c5/34/68292d68512768591aaff07c59bb53ee31341c87759433a859c4641a50c2/charset_normalizer-3.5.2-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:ed905975ab14056a2e5eb1c376cb2e1ebc5396baf84163939c518556fccde9f5", size = 225946, upload-time = "2026-09-30T04:35:55.313Z" }, + { url = "https://files.pythonhosted.org/packages/e3/80/bee0b01b90ccd5322ae1d0abb33fab1bd95b7c2eadaf02aeccf22e04ee83/charset_normalizer-3.5.2-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a66c3bc5ab1f0ff2164fc9965ddd611ff0802173f4b9d24554c563f6ab7e1d6e", size = 238619, upload-time = "2026-09-30T04:35:56.863Z" }, + { url = "https://files.pythonhosted.org/packages/78/6e/60ce52a85a7fd631ae8482ae6d74521014ca2f255892679484dc04d7ef56/charset_normalizer-3.5.2-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2374b62878abb00cd8309b32af6c0b715cd02dec0ca74ef12e5069bdc64144a", size = 206701, upload-time = "2026-09-30T04:35:58.639Z" }, + { url = "https://files.pythonhosted.org/packages/36/8c/71aafad23f971afc84c2b295bc0c560739ce1dac558aad9fec22e39f3639/charset_normalizer-3.5.2-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d376bbd28b3a8999db1a103b3b388aee6f1ddeb3e51bc2172993efdcd86e064d", size = 210506, upload-time = "2026-09-30T04:36:00.147Z" }, + { url = "https://files.pythonhosted.org/packages/91/da/3c5a7798c046df7d2d68ad653cf5b6c5a8bfee225055a843c6f2f42aac1a/charset_normalizer-3.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6045373d5a89a5ec71afde535db987ca28e76dfa276c2d4c818265b375d4b055", size = 366626, upload-time = "2026-09-30T04:36:01.77Z" }, + { url = "https://files.pythonhosted.org/packages/e1/16/710ac3de2ee354e2bd1a9c94efe45a2d27b5c6ad39b2d6a905be2c094b6c/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:849df64e889b2e17230d58410a03dba311a65b163508fd33679b2b737d4b7858", size = 244624, upload-time = "2026-09-30T04:36:03.389Z" }, + { url = "https://files.pythonhosted.org/packages/d6/39/45c7439f5b63d24f7d5b2a1d760f34af7628782d7144b4cc8ded45c2d4bc/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:15c44f7edfd477b06f517a5cc317fc1707edb9de2c865f43d4b6513907473234", size = 235731, upload-time = "2026-09-30T04:36:04.987Z" }, + { url = "https://files.pythonhosted.org/packages/4d/34/38f3154785ce92e9f56eb226f4d35bdfae6b008480dd055f58837a89c810/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a89012d6d5476ee112d20d998570ed58df2260a852afb1758809cd6900411d21", size = 270352, upload-time = "2026-09-30T04:36:06.412Z" }, + { url = "https://files.pythonhosted.org/packages/04/f3/859f74e7babc977705026b30593b3be04049632a522fb7000f83c033d747/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0c951d5e6dd9c2ff60609476752bee49da4206adde960ebc247766937f72e718", size = 267393, upload-time = "2026-09-30T04:36:07.865Z" }, + { url = "https://files.pythonhosted.org/packages/4b/85/41d27f234b82e47c167a5f6c0f62501dc0c640585ff4aba79e08a390336a/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7218e8f32b0956cfcd048fd42d9d5779809745ca1d86113ca56f66e7ae1549c4", size = 254660, upload-time = "2026-09-30T04:36:09.248Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/5d1a997587febe5b26d8daffe363b5c1a091cece19828eec6502fd09c5ef/charset_normalizer-3.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19a731138fc27d5682277d3b9df22855cea1239bce7fcec5f78f42ef2d1f3c3", size = 249996, upload-time = "2026-09-30T04:36:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1f/d1e78246f7ed60c8c8d606b4ac27f66ce49cc3e95f24893ccbeba9f77302/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62603db9a7caa0802eaa28c1c46fecd7b3a263a774069c24c3c28c302448721c", size = 247028, upload-time = "2026-09-30T04:36:12.294Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/eba316edd4f0c4d3a5d945924c4eeeae59abac4056aa815d8a4268f863a2/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b6856554c4f44d79fc2307d5768854310a8f0096e501c75637542c82292b0429", size = 240562, upload-time = "2026-09-30T04:36:13.887Z" }, + { url = "https://files.pythonhosted.org/packages/c8/8e/aaa037d40ca9ef045977f1a661048b1aa33f223adfce3452fe9be9f79d14/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1bc0baf5ef96b6ede57d47f4b8fe4d9d84019c3bfcbeb20a41edc6a6ee341f1f", size = 271699, upload-time = "2026-09-30T04:36:15.41Z" }, + { url = "https://files.pythonhosted.org/packages/26/19/1c1c9f75974adf523b87f34b8a2adc5a435cd65916812bcbd0dfa45f9a29/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:56bc200a365efb37383b7852e4cc5898d3b2da5987289b543956cf8cad71018a", size = 252030, upload-time = "2026-09-30T04:36:16.839Z" }, + { url = "https://files.pythonhosted.org/packages/bc/90/0660ef18e18df0a4d2a1a0edff7dfbba42d4e50ef2425557a5bb7051f77b/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2c9ad19a6cfcd5ea5c0d41161d22f9df1dcc277e9bef2751391334546a314c00", size = 268565, upload-time = "2026-09-30T04:36:18.468Z" }, + { url = "https://files.pythonhosted.org/packages/79/ba/57adc269824e8658f1a0f97a9e514c247445a9632b3419b97e0ba37f16dc/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e243bd13217235fc7290c621941c3f5cc8b66e4872495be821d7436ba2fb838d", size = 257627, upload-time = "2026-09-30T04:36:19.938Z" }, + { url = "https://files.pythonhosted.org/packages/9a/85/33abd4315c052d3d4f54c92b1ee49bfbc0dc7115a981e462a793b6d2ab87/charset_normalizer-3.5.2-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:a090bb2c68df85450502e3e20d665e3a5af9c65a84d6508ed477badd49166fd3", size = 143407, upload-time = "2026-09-30T04:36:21.376Z" }, + { url = "https://files.pythonhosted.org/packages/4f/de/6435e18d1aaa5d910b896d551411c96af1f42a0c56c29afc2016c61ccc2e/charset_normalizer-3.5.2-cp313-cp313-win32.whl", hash = "sha256:2b7b3bbfb4fe8ef40600792d762fbaa9057559f9d3fad209525b7a22b99e91fd", size = 183207, upload-time = "2026-09-30T04:36:22.776Z" }, + { url = "https://files.pythonhosted.org/packages/9c/76/b8ec57f4e9ee3253541abf95e4a462c0175fe8032dcd070f1f2421240942/charset_normalizer-3.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:78456a747de8dc58360ffa581f30a002baf5aa28cb262536545e91f113ed7639", size = 206489, upload-time = "2026-09-30T04:36:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/3e/60/c647c6ae47480221e875ea5d743ff94946f7416e3c69415ab772928e8d32/charset_normalizer-3.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:11912e4bb14baae7c5d8791aa55ba0a3a03ec6729073307b0f57270abaa713d3", size = 195501, upload-time = "2026-09-30T04:36:25.846Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/7aa91362a2f77ac8e9e28a9b902a74f7d0e11a851ef0d27a74308da8cd90/charset_normalizer-3.5.2-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:1afb975bd5d68d5ce9f6b6d44fdf2f7e34b895a35e95708a7a91b20a3b51d187", size = 226010, upload-time = "2026-09-30T04:36:27.669Z" }, + { url = "https://files.pythonhosted.org/packages/a8/cf/ac8878d0322cf88a1aad4c7b147db32ca0bd806eb0060957b2e31486dbe6/charset_normalizer-3.5.2-cp314-cp314-android_24_x86_64.whl", hash = "sha256:bbbfc8e28816f19d7c0f1816664980c0a9875d01b27cdf8eedddb639d9e108ad", size = 239266, upload-time = "2026-09-30T04:36:29.434Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6d/9a08d7e0b29b7208e2c6c01dc56c8e0520e7c7beadbbfb024b58fd69c8a5/charset_normalizer-3.5.2-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7967d08cf06dee78443b874f98c98036f624f3a4e73e11f9f64f5be4d25393cf", size = 206783, upload-time = "2026-09-30T04:36:30.872Z" }, + { url = "https://files.pythonhosted.org/packages/82/44/b0aa350280e6ff5a5492d17cf10460dd39d5ee848f872f7ba2df10607f60/charset_normalizer-3.5.2-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c2b5031f63e331e3839b40aed2dd6f191e9c07edbde303e7876846ea1946995", size = 210449, upload-time = "2026-09-30T04:36:32.625Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fcff63213e8e6e47770541a4607175404f47cbb3ebea7b6058cc82d524a0e424", size = 367815, upload-time = "2026-09-30T04:36:34.197Z" }, + { url = "https://files.pythonhosted.org/packages/7f/72/9c5e7707b57c8ddfa9ddf7b0b1d009d7fbab9e9e887d5b721060f37e307d/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d86d6fc60743dc916eb79e2eb1ec4818e21e427731543af40a3021851174a13", size = 247095, upload-time = "2026-09-30T04:36:35.803Z" }, + { url = "https://files.pythonhosted.org/packages/83/09/71e453691e927de4ddf792770cfaab3f49d494e222f66ea5e404bbd5e39c/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a881931aa470808df94a8c380eed2bbbc76cd9dc622310f99665658c821eb6d", size = 233942, upload-time = "2026-09-30T04:36:37.407Z" }, + { url = "https://files.pythonhosted.org/packages/9f/86/85c84e4da8b27dd409577d9437926ff581c5f9d3c66038dc68c1a526de51/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8024d00c3faf3fc0c16e07a69f4405e8eac7cc0ab15f65fe6cf43827c4cf72b4", size = 273762, upload-time = "2026-09-30T04:36:38.904Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/564955a4b5f2ccb410ab480bbe8c6a18063ff27f2d35458731c4a5335df9/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4d48f2d08b9de5864e2c8744d4461b862fb149a18274abc8b698c45975573438", size = 269514, upload-time = "2026-09-30T04:36:40.469Z" }, + { url = "https://files.pythonhosted.org/packages/18/24/bad3ac4271589df29cf5ce2f5ae490518a5739358052bd0d61209e6fea54/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34276fd796040bf0993ab33a369aa572e6979c7aab225a88893667ad8eac8f7a", size = 255056, upload-time = "2026-09-30T04:36:42.02Z" }, + { url = "https://files.pythonhosted.org/packages/d6/3e/350d89ad49916b86554d6f5f2d03ec1152148f87e5ff735106c6a03b1a36/charset_normalizer-3.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0521c5665880b33d603717defa76c094048900010897909952397feb3039da56", size = 251311, upload-time = "2026-09-30T04:36:43.577Z" }, + { url = "https://files.pythonhosted.org/packages/56/5b/4970a2d154df502e133402906dd04e3ae7cada7b3011283c88d0479a2585/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:eff0ac9dbe711a4aee69bf04a83896aa9b85f19641264053a9f6d48573abb7dd", size = 250190, upload-time = "2026-09-30T04:36:45.185Z" }, + { url = "https://files.pythonhosted.org/packages/88/8c/f1a91bddc8fb47c2889e29ea7ea49a194eb0d9868675d786806519c00d76/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:1503bccbeb36d5527790c3930327704c39af22de3112f1b1666a9f3ce15ee204", size = 237098, upload-time = "2026-09-30T04:36:46.689Z" }, + { url = "https://files.pythonhosted.org/packages/24/0e/bb5dace3cc7e79068425386a6589c19b5a2ab5fefc2a46abea6919683332/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:52aa6992700996af31f375de0c6bacd402b0097fe40b53c426b9f51a90ebabc7", size = 274228, upload-time = "2026-09-30T04:36:48.31Z" }, + { url = "https://files.pythonhosted.org/packages/9d/79/b849ad523017ea9f5a45581bbebed91439e0cf42fd2860a6f64e358eb5a6/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e09a3942ecbdee5cce73ea9d42da82b81b72ac1bf031ce069b93b5adf4eac8cd", size = 252401, upload-time = "2026-09-30T04:36:50.091Z" }, + { url = "https://files.pythonhosted.org/packages/89/8c/75469d690cf47200bce8f6cad7655724fc23148e147abfc5ce78b5f65863/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c7c9ab723cde841fefb34efbad91e87f00a674b1fe1cd0784fde742bf2c154dc", size = 271846, upload-time = "2026-09-30T04:36:51.719Z" }, + { url = "https://files.pythonhosted.org/packages/26/cd/6d52d3c7437cdcf2e310ce9f28f282e733d4ef60ed19105d1819c356255f/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ddc7dacc8ece3a182e7f15cb862d1fd616b46d076cb1ae9dd232b2c38b655874", size = 258151, upload-time = "2026-09-30T04:36:53.234Z" }, + { url = "https://files.pythonhosted.org/packages/f7/4c/070b38bdb5f49a70199fce923ec0726a49536a63ab262abbfcaaf351110b/charset_normalizer-3.5.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:ee43c17b173d46a3212baa6ead3ae258eeabdae48c263a01ccf0218c366dd655", size = 143570, upload-time = "2026-09-30T04:36:54.816Z" }, + { url = "https://files.pythonhosted.org/packages/81/84/9ebfc8ed6c8c4fcd8e726ff6bf220cc8deb3966e31dce9be8dd8aa017e64/charset_normalizer-3.5.2-cp314-cp314-win32.whl", hash = "sha256:4f87960d57feabfb618e4e0af6e7371645fa26a277860739d6e5d6e0012c92f0", size = 186412, upload-time = "2026-09-30T04:36:56.643Z" }, + { url = "https://files.pythonhosted.org/packages/d1/78/5ed86f743d4bc350db307e7636419a0a5ee1d91806d30c7f667bd5c80dae/charset_normalizer-3.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:e4e81e09c1578b8df602e3db08b0b3ea0a6947ad612f52bf8dc5ea8d47691f0c", size = 210965, upload-time = "2026-09-30T04:36:58.205Z" }, + { url = "https://files.pythonhosted.org/packages/53/94/a3a7698e9b1a395e1eb99ccd9a324be9347973bff4e72db2a06496d7cd27/charset_normalizer-3.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:80d02b6f04e92601a081dd97b23d3128033098bff5d35d392ddcc0476ea11253", size = 200406, upload-time = "2026-09-30T04:36:59.764Z" }, + { url = "https://files.pythonhosted.org/packages/c1/48/c5dd00d5ef7791f02666de250a5bb6071e29b7e133cf4b835800b6d3bc27/charset_normalizer-3.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:dca9ab98072a5a54ebacebdc45f53e645336b320c667410b061be1ca588ae709", size = 396871, upload-time = "2026-09-30T04:37:01.543Z" }, + { url = "https://files.pythonhosted.org/packages/12/c8/8379554b42e8368161d898476686947a0fdbd3e8865170d7909dcabfdee8/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0aa869112ef88429ae17820d99c3dd9504c9e9c671d3c246f3d7442cb051084", size = 249711, upload-time = "2026-09-30T04:37:03.111Z" }, + { url = "https://files.pythonhosted.org/packages/4a/eb/2ddb1035d17320caa9f41682935123a9a250277b261c3efc86b2d2a21343/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c0afc6800ba57ccc350374c5bd6150419915d95ce93cdbab2d783d75eaf30ecb", size = 231146, upload-time = "2026-09-30T04:37:04.721Z" }, + { url = "https://files.pythonhosted.org/packages/4a/24/2ecb4bde104322cd7859d6594fcfa74649f8d90b3221c9feecbef149875b/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7dcd882da75ef9adf94903b1e3b9419e8aa8fb4c7396822b834b9ef7fb96954f", size = 271552, upload-time = "2026-09-30T04:37:06.295Z" }, + { url = "https://files.pythonhosted.org/packages/3f/98/9d5f6ebc3aee9fef5d30b4aff11fb2ab7a1222b4064f8ef2c7c87cde217a/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2e06a3a98f916dd41d27f3105e02e7a40181c98c94b9158733d03a6f80506c09", size = 269810, upload-time = "2026-09-30T04:37:07.905Z" }, + { url = "https://files.pythonhosted.org/packages/09/e1/a3b06a10461b1b7628853c934c644e03bc28e42767116afb52f19a56519b/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6bd128f206a7752ae1f2ab6c61bf8a24ba28913a10df8b14c2637b973ff97a80", size = 259845, upload-time = "2026-09-30T04:37:09.554Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d3/6f561f74a296cf27d61775a1dc665ad13f3bff6a798810ca05907f37a7c4/charset_normalizer-3.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c8f3d67aeaf55f017982b73683f0e7342ba2f6635a78f69ce89ebb26aa411e5c", size = 252825, upload-time = "2026-09-30T04:37:11.274Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/69e13ca3b18f43e0eafcd34c04a45b732ae22a43b54a5fc9e119103356eb/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fe9753dfee015c570d73df76f899f18444d41388bffcde097deba51c4fadbb9f", size = 252659, upload-time = "2026-09-30T04:37:12.941Z" }, + { url = "https://files.pythonhosted.org/packages/73/a9/ace29806a0dae18939919c76ba526472d83214afa101105fabff2cf30625/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:92888bb3187c5ba50500b00b3b310c9f2c651709d28036077680cb5255450a03", size = 238819, upload-time = "2026-09-30T04:37:14.659Z" }, + { url = "https://files.pythonhosted.org/packages/f8/c1/6116d52a2e3311ec80f21f5fb5e17b27405f10b9608af8f6e69516841a1b/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d008d90a7f2471519aef0c90dfbe73b3e6e4d5e66ac48e19154c17e89e98b604", size = 272973, upload-time = "2026-09-30T04:37:16.346Z" }, + { url = "https://files.pythonhosted.org/packages/19/aa/9955c7e93bba10a9c7e8f7a5031b7ced66f3a1883a55c00712b8d5850ff3/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31f3930700408d211f13378ccbe1c40845d8da54bd0681fac3a9b5aae81c7aa8", size = 253692, upload-time = "2026-09-30T04:37:18.212Z" }, + { url = "https://files.pythonhosted.org/packages/bb/33/2a6ae7fdc1b10cb581cef91addd8cdfc5f40d50abb5702309369d5834579/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:2a925889534b3748302dae5dead07cc13480de1dac3aea80a941b729b471ef93", size = 268757, upload-time = "2026-09-30T04:37:19.877Z" }, + { url = "https://files.pythonhosted.org/packages/a2/22/80992720a0282cd39bba1db35868e6b9c22f41281160143a836544bc1d8a/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f5ec61164adcec446f8969a3358ec3f9b26bbda3b9213e5586d219afa8df2915", size = 262220, upload-time = "2026-09-30T04:37:21.583Z" }, + { url = "https://files.pythonhosted.org/packages/92/9f/181fd07e1bffea1d95cd80c84ac537354f50699c22cfc4d3c02b6fc16208/charset_normalizer-3.5.2-cp314-cp314t-win32.whl", hash = "sha256:598a11a2c7ebaa5334bf698bf29568c9c390abac6a154d8170fedecd1cea38c5", size = 197797, upload-time = "2026-09-30T04:37:23.235Z" }, + { url = "https://files.pythonhosted.org/packages/49/1c/25d8415ec1c4f2f41f1680435e4c87cfb378ff2f677d950946f2a45d0632/charset_normalizer-3.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:7fdde2c9fd9e3eca40631e024664cf2584272cc8f96308cbe5fdfc930f51d8bc", size = 222765, upload-time = "2026-09-30T04:37:24.891Z" }, + { url = "https://files.pythonhosted.org/packages/3e/b4/46b48f013dadfc0d0d33b375438e31bdf5a989dc68389c6bf627054d4df9/charset_normalizer-3.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d1befeed746d247c81127bb14de9dc3d30edb6e5976d34f83f86ed262b1d9105", size = 210985, upload-time = "2026-09-30T04:37:26.634Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e9/34e597dee616d0b8ee4b34d29399e85c2204ade174157a48505d42baa4ff/charset_normalizer-3.5.2-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:87475fabc8d9996fd9c27debb395e642e8c838d78a00b6e932227a0e06b81e26", size = 367676, upload-time = "2026-09-30T04:37:28.329Z" }, + { url = "https://files.pythonhosted.org/packages/60/9f/a5d1c91c0263745e2cd344c5a4415d787c575501ab1d449f1148ac6b495d/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9409a8bf35cf78353942504b24a57de3d75b708997a1e4bd8db71ac8633ce364", size = 248414, upload-time = "2026-09-30T04:37:30.167Z" }, + { url = "https://files.pythonhosted.org/packages/26/79/e697f77464748a3ee3cf490c83d592459400d4898380d66c38366b03080c/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:498dc3188ca05a68231ac3fdbfc7f57eb67e1343c30e0fea17f8218c1599b253", size = 244775, upload-time = "2026-09-30T04:37:31.964Z" }, + { url = "https://files.pythonhosted.org/packages/ca/87/3d42a42e18ea066e2513936fd678a00696e77878b5ae04528976abdbcb83/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e242bb1c5e76e97dfa9e7f209a71e93a01d7f19ffdd5cfbb2e2d55b4f08f8ab0", size = 273877, upload-time = "2026-09-30T04:37:33.661Z" }, + { url = "https://files.pythonhosted.org/packages/c3/76/8a28136f3938ba9836f84280ce0c4d61ed1cf15a036b2034900c62634162/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def79fa35ef0cef8d2accec024f4fdc7ead3012ff02f5215c783f39f03ef8cfc", size = 269455, upload-time = "2026-09-30T04:37:35.573Z" }, + { url = "https://files.pythonhosted.org/packages/a0/a1/4fbf5d0f0f1b2a080474c1cf9a2f12c4c6531bb0e8ba591055e846d2b4e9/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df041de8887954562c9b261cba85ca0e9ded74048daf125f45edcfaa4832229", size = 257336, upload-time = "2026-09-30T04:37:37.397Z" }, + { url = "https://files.pythonhosted.org/packages/ba/a2/8b50aa320adb880ad579518e6f718f24944804b42a88b83d267d5d444125/charset_normalizer-3.5.2-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04851f73ae72b8413dddadb16a49dfee95263553741fd42d546f7d66907e6be5", size = 257584, upload-time = "2026-09-30T04:37:39.522Z" }, + { url = "https://files.pythonhosted.org/packages/a5/57/50e3fed84e175f40349bd0da7a4fce94c87f0378f52d74f511d89e0bdc20/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:183b88127acdb4fabe59d951ab424faf1af7b63cdbb5f776186c1ea2ffcaed98", size = 251854, upload-time = "2026-09-30T04:37:41.23Z" }, + { url = "https://files.pythonhosted.org/packages/d6/54/f7fbb3493c9f49091213b9c2d6dd65800696f1ce1a3f196a4205f50417b1/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:16fa0eccf81304b79c5cd87f9271c3b85dd9dd99245e4422ae9c0dd45e0f99d3", size = 248767, upload-time = "2026-09-30T04:37:42.883Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/b3a6385acc5a1e45b39ae9c90bfb9cf838a09b9dd37ef2740ab4c6b4a2eb/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:7441d755b7ab94f8d4eb3e43ec05482d760842fd263d003a99102d742cd835e2", size = 274479, upload-time = "2026-09-30T04:37:44.658Z" }, + { url = "https://files.pythonhosted.org/packages/89/44/809913e2cfd279e635a9294fdbbfb1b1dc62a8189d473d561f649fce98d8/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:ca403d7e4798f525fdfc78e258820419cbbd0f0ecbab9de7840e3c017cf6b8cf", size = 258310, upload-time = "2026-09-30T04:37:46.529Z" }, + { url = "https://files.pythonhosted.org/packages/af/a2/f28400ab13359d91bd39179df8e149376b9bf36588e739a3a4f9de2b84b2/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:df29a0a7107f7011e77f4eebdddec4c7331e24d787a0b21a46d63bdf7445da95", size = 271100, upload-time = "2026-09-30T04:37:48.399Z" }, + { url = "https://files.pythonhosted.org/packages/e9/89/9bab37955edf0adb3b66f8a3a6617d9f2f487e0d56f295a6a286cb640aa6/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f3c96f633825733f735c5a9cf21d21a257d8e1edf0b1cee0a064b9c424ca0f7d", size = 259936, upload-time = "2026-09-30T04:37:50.023Z" }, + { url = "https://files.pythonhosted.org/packages/23/b5/4459e08d45a679f903d50fea08bc52cfa728cca4d7bd02c757b5e5abda2e/charset_normalizer-3.5.2-cp315-cp315-win32.whl", hash = "sha256:281cb91036248400f4cc957495cccd44c275c2e0c5854f7e45ac5cf7dc193847", size = 186301, upload-time = "2026-09-30T04:37:51.722Z" }, + { url = "https://files.pythonhosted.org/packages/98/e8/55d5fd3935b4bce6da4fe0df61898e8c82653e317e677bd58aceb9c60f13/charset_normalizer-3.5.2-cp315-cp315-win_amd64.whl", hash = "sha256:89b53f3cda69831909888e0494f4fa0bcd3537e3e138dabeb620bd6ad946bae8", size = 210858, upload-time = "2026-09-30T04:37:53.427Z" }, + { url = "https://files.pythonhosted.org/packages/a9/5b/974423c2fd8e524c7a7f64318c1e02240ef954912fa2b4d70344107b9c68/charset_normalizer-3.5.2-cp315-cp315-win_arm64.whl", hash = "sha256:6be488a102b8cf28d0391d8c4ba7748938ae28b78ad901f8585520fca33ead1a", size = 200309, upload-time = "2026-09-30T04:37:55.015Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f9/00ee0195db1013d8f7c416fd770fbeb560bb46eb2e36b054d05cb56f6cfa/charset_normalizer-3.5.2-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:915563965d418f986e7e145accc592eae9e1a1be3566ff98a05d7a9ec42a76e1", size = 395343, upload-time = "2026-09-30T04:37:56.743Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/c00b50e94c964cf934c7899cd47c97952fc11dad71cc5884b3c61795b09b/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:65cd72beeeca9d3aaea1201e5923859f308f952f9c71de93f06063c79f0f7a3b", size = 250114, upload-time = "2026-09-30T04:37:58.607Z" }, + { url = "https://files.pythonhosted.org/packages/50/27/d102dc880bbcffd0479ab64dfc1fb96777a854355a55e2bda72a71efadcb/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b7fd005a73d9e657273b7a10dc71a9e03c8fb9ee6999798d6918ce095b81ac7f", size = 239997, upload-time = "2026-09-30T04:38:00.511Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4a/bf7ef45794dd293fab5f98a9309817977fbb845b9998f171b8cc5d8437a3/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e54da4baf05720032d527874d40b65fa4d7e5c6c6a43d0c3adbeffcaf275a2b3", size = 272313, upload-time = "2026-09-30T04:38:02.509Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ee/008a2837737991474c5754bb3191010007663860979701990982a502cbaf/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:124fbf1a8ff966d87ae05bb8bd45a71f966055ed8bba320d0c7cf450bc5f4d0e", size = 269986, upload-time = "2026-09-30T04:38:04.435Z" }, + { url = "https://files.pythonhosted.org/packages/93/ad/bd74a283940dc910c5b14f8e4f80a248082bc9c0fcbe1f54530cb6d9cc5e/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28b4f0d66fb834ff90f28209ac7bce77868c45d8c93e26f906709d9b7c2e1af9", size = 260202, upload-time = "2026-09-30T04:38:06.549Z" }, + { url = "https://files.pythonhosted.org/packages/8a/7b/ed341c66f69f688723501fac752be3d63c7159ca0d0d4174fc611e5710bb/charset_normalizer-3.5.2-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:58ca3755ee7ff7f59b57789ec9833c9de9ea275405cdd240eda1f193112e398a", size = 259083, upload-time = "2026-09-30T04:38:08.311Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9d/e41588b777965e5031a43128a1e96173ebb35ac75fc53ec3b517e7c21cd4/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:443eae2bf318abeaf6f15d785138f71fd6de770e99a92158b8b814265e079115", size = 253081, upload-time = "2026-09-30T04:38:10.402Z" }, + { url = "https://files.pythonhosted.org/packages/81/35/b761eb6d8c1eb218b9b42b9b4d5ac902afdc399fb6dac6f9a9aac7bda589/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:58f361dcbab699cf8f42db3f47c8e7fd1036f138c23a5d08de9fde5f425a730c", size = 248712, upload-time = "2026-09-30T04:38:12.317Z" }, + { url = "https://files.pythonhosted.org/packages/4d/2c/147169a041b747759f37405c0a97157e8e92de967968373101ff14915cba/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:1b4cbc7c3491ccb4aa17fcd8165649d01cf39f76de1696da8631b5f71b85401d", size = 274176, upload-time = "2026-09-30T04:38:14.138Z" }, + { url = "https://files.pythonhosted.org/packages/f0/2d/0ff8db0d373ba8538db686db11cd7e8912031490b9e4f383b41912e8d594/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:ba0b1d2620edf869789c3879223f52bf2afc5d31b3cb47cc57b3a12c05e2aa9d", size = 259413, upload-time = "2026-09-30T04:38:15.841Z" }, + { url = "https://files.pythonhosted.org/packages/8a/8e/b4a085fb47c9d3a7e43576a4784fdd8fe23f907514a972de8086edaf7a48/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:5e2b6b57e9733d39f0c9fd3185efa6b8e29652c4cd8fe94180272cf6ed9a78c4", size = 269434, upload-time = "2026-09-30T04:38:17.626Z" }, + { url = "https://files.pythonhosted.org/packages/83/1c/d8d8d7322a7c3eecdf3237a4a419cf41d2eaad8e006ce7dfdd9d4c8fa2eb/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:51cf45226a9b588d0d2b4880c62d686934b63ab0bd79ca23ab0e9762eb27441b", size = 262716, upload-time = "2026-09-30T04:38:19.214Z" }, + { url = "https://files.pythonhosted.org/packages/a0/16/0e4c6ba9b44e97a2da150e52d331e8f9c968b21b358fbffa6c856cebcd89/charset_normalizer-3.5.2-cp315-cp315t-win32.whl", hash = "sha256:5fb29fb8cd1a46c27a1bf9613ad5ec2599310d46b4025d9556404a6b6a292800", size = 197159, upload-time = "2026-09-30T04:38:21.037Z" }, + { url = "https://files.pythonhosted.org/packages/be/33/e90bc2b1374f7f36ef106f56620de5a783907e19ca857efe2277e31cac3e/charset_normalizer-3.5.2-cp315-cp315t-win_amd64.whl", hash = "sha256:a192e2c40070d92c3ccf777e3a5c4ff515573cd2bb7ed0c537fdadbbec5bbf21", size = 221322, upload-time = "2026-09-30T04:38:22.886Z" }, + { url = "https://files.pythonhosted.org/packages/66/89/dfa6dcb08c200b7830ab56439e8c1890f2971d51aafbb3937894a2e7fcfc/charset_normalizer-3.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:749e97e1b32313717a565abbe321bc2190bc8b35f1a67e4cdbc7c56c8d8ffe58", size = 209192, upload-time = "2026-09-30T04:38:24.648Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ab/176fbfd5b64939c55d652366aa5b9ef1d767af207a3aa6ebeb0d226c484d/charset_normalizer-3.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:4275811936e2f06feff5e598fb42a1b7ae852da8e39605211892b56b81a34efd", size = 331815, upload-time = "2026-09-30T04:38:26.216Z" }, + { url = "https://files.pythonhosted.org/packages/7e/84/371eac6b30bdbcbf2d632a1a01809103459216fcaae61b8b8d922c1bfb8a/charset_normalizer-3.5.2-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1c50fe28bbc2ced33386f298650d91218076c05420e6cbd790b913adc41659e7", size = 253276, upload-time = "2026-09-30T04:38:28.032Z" }, + { url = "https://files.pythonhosted.org/packages/43/6f/c4fbae58febff71709c51bc7e18fdfa55341dc382704740f9f0cbf03817b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19fbd981a488e22cd04883659ca6b08f50b5974f9fd7c95655ef6a043e5893f", size = 241239, upload-time = "2026-09-30T04:38:29.732Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/458c3f42164a07d0c5210798e9e704b39e540a6793b05aba67f3a35243a9/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0fed1d06615f022ee3b13caf5e8b180cfea32bb2c5aded8a9d44277afc040f93", size = 231121, upload-time = "2026-09-30T04:38:31.462Z" }, + { url = "https://files.pythonhosted.org/packages/09/54/ab9e89367076f6331bb6c65c4bf14a5361fa5191cb6561bf534f18504e1b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:838dcc90063569a0448120554591a1d6c4a4ffe11babf048908793154ab86ade", size = 260350, upload-time = "2026-09-30T04:38:33.239Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/061431ecc688d9d76602502cb57cc01e691e682c18f1beb45f9673b5bbd2/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ce45c6627b22c47e390bc91a41c3d13032192e699fa0bea96e9671b373d69b0", size = 255430, upload-time = "2026-09-30T04:38:34.865Z" }, + { url = "https://files.pythonhosted.org/packages/8d/1f/20c8949f0676f7ab811abdeb7f4d7f1cbc6e61ff20bef08b44edeb092bc8/charset_normalizer-3.5.2-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0774bf9bf620249fee3e0b8b9fd3065de213be30f3aa94ce2494b3b638949e26", size = 250612, upload-time = "2026-09-30T04:38:36.649Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9e/46f2fa4c431fc98c4ae76a8cb5bdca54e0341e3cfc3fcfd8e82740250818/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1db38f4c5496827c1a501846d64d14c3b80c7e6714e406cd7dc36a9899fa1011", size = 242083, upload-time = "2026-09-30T04:38:38.26Z" }, + { url = "https://files.pythonhosted.org/packages/bd/39/559be29a0c0f086e0bba6922babd38916cc5e0b58ced4de13ee01ea05508/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:304d8e4d493af723536393eee0c689eb7813f4a474c8b479dee63f1fdd98f621", size = 232738, upload-time = "2026-09-30T04:38:39.81Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6c/387b0e4f756a282831c1d9fc6aeb6c51ca4507ca202767c8de15ce9b12e2/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:9b7f416ff0978e2f2249330527f0ad6fa02f4932e6199692d3b52da2048c19e4", size = 260703, upload-time = "2026-09-30T04:38:41.346Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/1fdf015f09ef449f50d3ac4b67c90887c9c318b727daa95cc4f866e6521d/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:01077390b03f7988f11d700a2194e69b119741a86b1a638b1db88891e3eced8e", size = 247622, upload-time = "2026-09-30T04:38:42.937Z" }, + { url = "https://files.pythonhosted.org/packages/dc/3c/8e7b8a5671ad5d433669fb2a76f1a0164df2d9b1718b0206bc2a16d840cc/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:7e841fb9010836c992c9f12fcbd43a831de93a5f726fc1ccd8ca1d0268c5014c", size = 257500, upload-time = "2026-09-30T04:38:44.604Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f0/45b579df5cabc1d5d53ea1cc35e8437d3ca768c0acccc7041517cb6fbb32/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9cae88599c7219005d879f98e5ed53341e9a122af585e1091200358a3003d2a0", size = 255100, upload-time = "2026-09-30T04:38:46.289Z" }, + { url = "https://files.pythonhosted.org/packages/31/68/fdec18a343f5fb3f310588dd478b09ac4799e0b187dbade3a8cd776f03ef/charset_normalizer-3.5.2-cp37-abi3-win32.whl", hash = "sha256:01b0c0d2262a9e28e8484a278c7e1b5d650e3ac8cf2683d2967e25899f208bdf", size = 174499, upload-time = "2026-09-30T04:38:47.999Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8a/b618149cc5207943a0242068d7a27897f56a62947b5a039085f2a22029f8/charset_normalizer-3.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:9f56f72050826f63dcee7a7f55b0a77168cb3bfc553fd405e7f8f9ece75a4036", size = 200092, upload-time = "2026-09-30T04:38:49.707Z" }, + { url = "https://files.pythonhosted.org/packages/03/cf/4c66866fa9e2b1c78e3c911516d1de497a677b7ac60f1eceda74ce777ca3/charset_normalizer-3.5.2-cp37-abi3-win_arm64.whl", hash = "sha256:40ab6bffa02ae10a0581e6c198be7d2d8ca5c2a0c64e4ed3465d766df457573e", size = 294363, upload-time = "2026-09-30T04:38:51.312Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ad/d07d7862a62ffa6d79d68074d14823243dd235a77c45262acbf6adeb28bf/charset_normalizer-3.5.2-py3-none-any.whl", hash = "sha256:b6b751274acb69d77b3323d6b7dbaa3c7fdfc1eb829b7eb61d262f32e1af9685", size = 68872, upload-time = "2026-09-30T04:39:21.828Z" }, ] [[package]] @@ -303,9 +501,11 @@ name = "cldk" version = "2.0.0" source = { editable = "." } dependencies = [ + { name = "codeanalyzer-go" }, { name = "codeanalyzer-python" }, { name = "codeanalyzer-typescript" }, - { name = "networkx" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "networkx", version = "3.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pydantic" }, { name = "requests" }, { name = "rich" }, @@ -350,6 +550,7 @@ test = [ requires-dist = [ { name = "cldk", extras = ["java"], marker = "extra == 'all'" }, { name = "cldk", extras = ["neo4j"], marker = "extra == 'all'" }, + { name = "codeanalyzer-go", specifier = "==0.1.0rc1" }, { name = "codeanalyzer-java", marker = "extra == 'java'", specifier = "==3.3.3" }, { name = "codeanalyzer-python", specifier = "==1.5.3" }, { name = "codeanalyzer-typescript", specifier = "==1.6.0" }, @@ -386,14 +587,23 @@ test = [ [[package]] name = "click" -version = "8.2.1" +version = "8.5.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } + +[[package]] +name = "codeanalyzer-go" +version = "0.1.0rc1" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, + { url = "https://files.pythonhosted.org/packages/32/65/0af9fd9e48ffab66493d2c3d62f5d00109cf3212d8a64071bf2d1481f551/codeanalyzer_go-0.1.0rc1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7ab13b1cf86814e4f3035966f714b05a020992e71f199ad798ff5e87c2273b34", size = 4145429, upload-time = "2026-10-11T22:44:23.35Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5f/065bc30b54e4b2f4b57b9a5c06563018ee38ccb60dda3dde3378dc700557/codeanalyzer_go-0.1.0rc1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a4a03c3474b62f06bfa4dac0fd059ccb1738dec24550fdd148729fd9637ad8eb", size = 3797856, upload-time = "2026-10-11T22:44:25.54Z" }, + { url = "https://files.pythonhosted.org/packages/0d/a4/576ff56a8c37ff69d783142b574db07a34da74a32fa17fd6ab14d8e72a01/codeanalyzer_go-0.1.0rc1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:afaf08ba252f098ed9a80f7e6f3dfa06bb4da911c57e5ebeccae99fd708857ec", size = 3666158, upload-time = "2026-10-11T22:44:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/f9/77/c8f970bc71aa7fa74b1531c4819fe7e3ff902793dfb3d7593c175c15a13f/codeanalyzer_go-0.1.0rc1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:680d97d2aa18c320dbf530b166d9a377a79a43fc250ee1490926a8b2d7a85de6", size = 4090421, upload-time = "2026-10-11T22:44:29.665Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/7f5d00ff849f520f1956719ec03f8d809d05e4c8dffd9b8442fb09bc893f/codeanalyzer_go-0.1.0rc1-py3-none-win_amd64.whl", hash = "sha256:1150232c252f1eb179b1fb1dee1d08f9bb44d92423b169b0e4420e3c0b10828c", size = 4201789, upload-time = "2026-10-11T22:44:31.688Z" }, ] [[package]] @@ -414,7 +624,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astor" }, { name = "jedi" }, - { name = "networkx" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "networkx", version = "3.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "packaging" }, { name = "parso" }, { name = "pydantic" }, @@ -454,103 +665,175 @@ wheels = [ [[package]] name = "comm" -version = "0.2.2" +version = "0.2.3" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload-time = "2024-03-12T16:53:41.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" }, + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, ] [[package]] name = "coverage" -version = "7.9.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/b7/c0465ca253df10a9e8dae0692a4ae6e9726d245390aaef92360e1d6d3832/coverage-7.9.2.tar.gz", hash = "sha256:997024fa51e3290264ffd7492ec97d0690293ccd2b45a6cd7d82d945a4a80c8b", size = 813556, upload-time = "2025-07-03T10:54:15.101Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/40/916786453bcfafa4c788abee4ccd6f592b5b5eca0cd61a32a4e5a7ef6e02/coverage-7.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7a56a2964a9687b6aba5b5ced6971af308ef6f79a91043c05dd4ee3ebc3e9ba", size = 212152, upload-time = "2025-07-03T10:52:53.562Z" }, - { url = "https://files.pythonhosted.org/packages/9f/66/cc13bae303284b546a030762957322bbbff1ee6b6cb8dc70a40f8a78512f/coverage-7.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123d589f32c11d9be7fe2e66d823a236fe759b0096f5db3fb1b75b2fa414a4fa", size = 212540, upload-time = "2025-07-03T10:52:55.196Z" }, - { url = "https://files.pythonhosted.org/packages/0f/3c/d56a764b2e5a3d43257c36af4a62c379df44636817bb5f89265de4bf8bd7/coverage-7.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:333b2e0ca576a7dbd66e85ab402e35c03b0b22f525eed82681c4b866e2e2653a", size = 245097, upload-time = "2025-07-03T10:52:56.509Z" }, - { url = "https://files.pythonhosted.org/packages/b1/46/bd064ea8b3c94eb4ca5d90e34d15b806cba091ffb2b8e89a0d7066c45791/coverage-7.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:326802760da234baf9f2f85a39e4a4b5861b94f6c8d95251f699e4f73b1835dc", size = 242812, upload-time = "2025-07-03T10:52:57.842Z" }, - { url = "https://files.pythonhosted.org/packages/43/02/d91992c2b29bc7afb729463bc918ebe5f361be7f1daae93375a5759d1e28/coverage-7.9.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e7be4cfec248df38ce40968c95d3952fbffd57b400d4b9bb580f28179556d2", size = 244617, upload-time = "2025-07-03T10:52:59.239Z" }, - { url = "https://files.pythonhosted.org/packages/b7/4f/8fadff6bf56595a16d2d6e33415841b0163ac660873ed9a4e9046194f779/coverage-7.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0b4a4cb73b9f2b891c1788711408ef9707666501ba23684387277ededab1097c", size = 244263, upload-time = "2025-07-03T10:53:00.601Z" }, - { url = "https://files.pythonhosted.org/packages/9b/d2/e0be7446a2bba11739edb9f9ba4eff30b30d8257370e237418eb44a14d11/coverage-7.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2c8937fa16c8c9fbbd9f118588756e7bcdc7e16a470766a9aef912dd3f117dbd", size = 242314, upload-time = "2025-07-03T10:53:01.932Z" }, - { url = "https://files.pythonhosted.org/packages/9d/7d/dcbac9345000121b8b57a3094c2dfcf1ccc52d8a14a40c1d4bc89f936f80/coverage-7.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42da2280c4d30c57a9b578bafd1d4494fa6c056d4c419d9689e66d775539be74", size = 242904, upload-time = "2025-07-03T10:53:03.478Z" }, - { url = "https://files.pythonhosted.org/packages/41/58/11e8db0a0c0510cf31bbbdc8caf5d74a358b696302a45948d7c768dfd1cf/coverage-7.9.2-cp311-cp311-win32.whl", hash = "sha256:14fa8d3da147f5fdf9d298cacc18791818f3f1a9f542c8958b80c228320e90c6", size = 214553, upload-time = "2025-07-03T10:53:05.174Z" }, - { url = "https://files.pythonhosted.org/packages/3a/7d/751794ec8907a15e257136e48dc1021b1f671220ecccfd6c4eaf30802714/coverage-7.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:549cab4892fc82004f9739963163fd3aac7a7b0df430669b75b86d293d2df2a7", size = 215441, upload-time = "2025-07-03T10:53:06.472Z" }, - { url = "https://files.pythonhosted.org/packages/62/5b/34abcedf7b946c1c9e15b44f326cb5b0da852885312b30e916f674913428/coverage-7.9.2-cp311-cp311-win_arm64.whl", hash = "sha256:c2667a2b913e307f06aa4e5677f01a9746cd08e4b35e14ebcde6420a9ebb4c62", size = 213873, upload-time = "2025-07-03T10:53:07.699Z" }, - { url = "https://files.pythonhosted.org/packages/53/d7/7deefc6fd4f0f1d4c58051f4004e366afc9e7ab60217ac393f247a1de70a/coverage-7.9.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae9eb07f1cfacd9cfe8eaee6f4ff4b8a289a668c39c165cd0c8548484920ffc0", size = 212344, upload-time = "2025-07-03T10:53:09.3Z" }, - { url = "https://files.pythonhosted.org/packages/95/0c/ee03c95d32be4d519e6a02e601267769ce2e9a91fc8faa1b540e3626c680/coverage-7.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ce85551f9a1119f02adc46d3014b5ee3f765deac166acf20dbb851ceb79b6f3", size = 212580, upload-time = "2025-07-03T10:53:11.52Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9f/826fa4b544b27620086211b87a52ca67592622e1f3af9e0a62c87aea153a/coverage-7.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8f6389ac977c5fb322e0e38885fbbf901743f79d47f50db706e7644dcdcb6e1", size = 246383, upload-time = "2025-07-03T10:53:13.134Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b3/4477aafe2a546427b58b9c540665feff874f4db651f4d3cb21b308b3a6d2/coverage-7.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d9eae8cdfcd58fe7893b88993723583a6ce4dfbfd9f29e001922544f95615", size = 243400, upload-time = "2025-07-03T10:53:14.614Z" }, - { url = "https://files.pythonhosted.org/packages/f8/c2/efffa43778490c226d9d434827702f2dfbc8041d79101a795f11cbb2cf1e/coverage-7.9.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fae939811e14e53ed8a9818dad51d434a41ee09df9305663735f2e2d2d7d959b", size = 245591, upload-time = "2025-07-03T10:53:15.872Z" }, - { url = "https://files.pythonhosted.org/packages/c6/e7/a59888e882c9a5f0192d8627a30ae57910d5d449c80229b55e7643c078c4/coverage-7.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:31991156251ec202c798501e0a42bbdf2169dcb0f137b1f5c0f4267f3fc68ef9", size = 245402, upload-time = "2025-07-03T10:53:17.124Z" }, - { url = "https://files.pythonhosted.org/packages/92/a5/72fcd653ae3d214927edc100ce67440ed8a0a1e3576b8d5e6d066ed239db/coverage-7.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d0d67963f9cbfc7c7f96d4ac74ed60ecbebd2ea6eeb51887af0f8dce205e545f", size = 243583, upload-time = "2025-07-03T10:53:18.781Z" }, - { url = "https://files.pythonhosted.org/packages/5c/f5/84e70e4df28f4a131d580d7d510aa1ffd95037293da66fd20d446090a13b/coverage-7.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:49b752a2858b10580969ec6af6f090a9a440a64a301ac1528d7ca5f7ed497f4d", size = 244815, upload-time = "2025-07-03T10:53:20.168Z" }, - { url = "https://files.pythonhosted.org/packages/39/e7/d73d7cbdbd09fdcf4642655ae843ad403d9cbda55d725721965f3580a314/coverage-7.9.2-cp312-cp312-win32.whl", hash = "sha256:88d7598b8ee130f32f8a43198ee02edd16d7f77692fa056cb779616bbea1b355", size = 214719, upload-time = "2025-07-03T10:53:21.521Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d6/7486dcc3474e2e6ad26a2af2db7e7c162ccd889c4c68fa14ea8ec189c9e9/coverage-7.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:9dfb070f830739ee49d7c83e4941cc767e503e4394fdecb3b54bfdac1d7662c0", size = 215509, upload-time = "2025-07-03T10:53:22.853Z" }, - { url = "https://files.pythonhosted.org/packages/b7/34/0439f1ae2593b0346164d907cdf96a529b40b7721a45fdcf8b03c95fcd90/coverage-7.9.2-cp312-cp312-win_arm64.whl", hash = "sha256:4e2c058aef613e79df00e86b6d42a641c877211384ce5bd07585ed7ba71ab31b", size = 213910, upload-time = "2025-07-03T10:53:24.472Z" }, - { url = "https://files.pythonhosted.org/packages/94/9d/7a8edf7acbcaa5e5c489a646226bed9591ee1c5e6a84733c0140e9ce1ae1/coverage-7.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:985abe7f242e0d7bba228ab01070fde1d6c8fa12f142e43debe9ed1dde686038", size = 212367, upload-time = "2025-07-03T10:53:25.811Z" }, - { url = "https://files.pythonhosted.org/packages/e8/9e/5cd6f130150712301f7e40fb5865c1bc27b97689ec57297e568d972eec3c/coverage-7.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c3939264a76d44fde7f213924021ed31f55ef28111a19649fec90c0f109e6d", size = 212632, upload-time = "2025-07-03T10:53:27.075Z" }, - { url = "https://files.pythonhosted.org/packages/a8/de/6287a2c2036f9fd991c61cefa8c64e57390e30c894ad3aa52fac4c1e14a8/coverage-7.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae5d563e970dbe04382f736ec214ef48103d1b875967c89d83c6e3f21706d5b3", size = 245793, upload-time = "2025-07-03T10:53:28.408Z" }, - { url = "https://files.pythonhosted.org/packages/06/cc/9b5a9961d8160e3cb0b558c71f8051fe08aa2dd4b502ee937225da564ed1/coverage-7.9.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdd612e59baed2a93c8843c9a7cb902260f181370f1d772f4842987535071d14", size = 243006, upload-time = "2025-07-03T10:53:29.754Z" }, - { url = "https://files.pythonhosted.org/packages/49/d9/4616b787d9f597d6443f5588619c1c9f659e1f5fc9eebf63699eb6d34b78/coverage-7.9.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:256ea87cb2a1ed992bcdfc349d8042dcea1b80436f4ddf6e246d6bee4b5d73b6", size = 244990, upload-time = "2025-07-03T10:53:31.098Z" }, - { url = "https://files.pythonhosted.org/packages/48/83/801cdc10f137b2d02b005a761661649ffa60eb173dcdaeb77f571e4dc192/coverage-7.9.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f44ae036b63c8ea432f610534a2668b0c3aee810e7037ab9d8ff6883de480f5b", size = 245157, upload-time = "2025-07-03T10:53:32.717Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a4/41911ed7e9d3ceb0ffb019e7635468df7499f5cc3edca5f7dfc078e9c5ec/coverage-7.9.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82d76ad87c932935417a19b10cfe7abb15fd3f923cfe47dbdaa74ef4e503752d", size = 243128, upload-time = "2025-07-03T10:53:34.009Z" }, - { url = "https://files.pythonhosted.org/packages/10/41/344543b71d31ac9cb00a664d5d0c9ef134a0fe87cb7d8430003b20fa0b7d/coverage-7.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:619317bb86de4193debc712b9e59d5cffd91dc1d178627ab2a77b9870deb2868", size = 244511, upload-time = "2025-07-03T10:53:35.434Z" }, - { url = "https://files.pythonhosted.org/packages/d5/81/3b68c77e4812105e2a060f6946ba9e6f898ddcdc0d2bfc8b4b152a9ae522/coverage-7.9.2-cp313-cp313-win32.whl", hash = "sha256:0a07757de9feb1dfafd16ab651e0f628fd7ce551604d1bf23e47e1ddca93f08a", size = 214765, upload-time = "2025-07-03T10:53:36.787Z" }, - { url = "https://files.pythonhosted.org/packages/06/a2/7fac400f6a346bb1a4004eb2a76fbff0e242cd48926a2ce37a22a6a1d917/coverage-7.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:115db3d1f4d3f35f5bb021e270edd85011934ff97c8797216b62f461dd69374b", size = 215536, upload-time = "2025-07-03T10:53:38.188Z" }, - { url = "https://files.pythonhosted.org/packages/08/47/2c6c215452b4f90d87017e61ea0fd9e0486bb734cb515e3de56e2c32075f/coverage-7.9.2-cp313-cp313-win_arm64.whl", hash = "sha256:48f82f889c80af8b2a7bb6e158d95a3fbec6a3453a1004d04e4f3b5945a02694", size = 213943, upload-time = "2025-07-03T10:53:39.492Z" }, - { url = "https://files.pythonhosted.org/packages/a3/46/e211e942b22d6af5e0f323faa8a9bc7c447a1cf1923b64c47523f36ed488/coverage-7.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:55a28954545f9d2f96870b40f6c3386a59ba8ed50caf2d949676dac3ecab99f5", size = 213088, upload-time = "2025-07-03T10:53:40.874Z" }, - { url = "https://files.pythonhosted.org/packages/d2/2f/762551f97e124442eccd907bf8b0de54348635b8866a73567eb4e6417acf/coverage-7.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cdef6504637731a63c133bb2e6f0f0214e2748495ec15fe42d1e219d1b133f0b", size = 213298, upload-time = "2025-07-03T10:53:42.218Z" }, - { url = "https://files.pythonhosted.org/packages/7a/b7/76d2d132b7baf7360ed69be0bcab968f151fa31abe6d067f0384439d9edb/coverage-7.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd5ebe66c7a97273d5d2ddd4ad0ed2e706b39630ed4b53e713d360626c3dbb3", size = 256541, upload-time = "2025-07-03T10:53:43.823Z" }, - { url = "https://files.pythonhosted.org/packages/a0/17/392b219837d7ad47d8e5974ce5f8dc3deb9f99a53b3bd4d123602f960c81/coverage-7.9.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9303aed20872d7a3c9cb39c5d2b9bdbe44e3a9a1aecb52920f7e7495410dfab8", size = 252761, upload-time = "2025-07-03T10:53:45.19Z" }, - { url = "https://files.pythonhosted.org/packages/d5/77/4256d3577fe1b0daa8d3836a1ebe68eaa07dd2cbaf20cf5ab1115d6949d4/coverage-7.9.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc18ea9e417a04d1920a9a76fe9ebd2f43ca505b81994598482f938d5c315f46", size = 254917, upload-time = "2025-07-03T10:53:46.931Z" }, - { url = "https://files.pythonhosted.org/packages/53/99/fc1a008eef1805e1ddb123cf17af864743354479ea5129a8f838c433cc2c/coverage-7.9.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6406cff19880aaaadc932152242523e892faff224da29e241ce2fca329866584", size = 256147, upload-time = "2025-07-03T10:53:48.289Z" }, - { url = "https://files.pythonhosted.org/packages/92/c0/f63bf667e18b7f88c2bdb3160870e277c4874ced87e21426128d70aa741f/coverage-7.9.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d0d4f6ecdf37fcc19c88fec3e2277d5dee740fb51ffdd69b9579b8c31e4232e", size = 254261, upload-time = "2025-07-03T10:53:49.99Z" }, - { url = "https://files.pythonhosted.org/packages/8c/32/37dd1c42ce3016ff8ec9e4b607650d2e34845c0585d3518b2a93b4830c1a/coverage-7.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c33624f50cf8de418ab2b4d6ca9eda96dc45b2c4231336bac91454520e8d1fac", size = 255099, upload-time = "2025-07-03T10:53:51.354Z" }, - { url = "https://files.pythonhosted.org/packages/da/2e/af6b86f7c95441ce82f035b3affe1cd147f727bbd92f563be35e2d585683/coverage-7.9.2-cp313-cp313t-win32.whl", hash = "sha256:1df6b76e737c6a92210eebcb2390af59a141f9e9430210595251fbaf02d46926", size = 215440, upload-time = "2025-07-03T10:53:52.808Z" }, - { url = "https://files.pythonhosted.org/packages/4d/bb/8a785d91b308867f6b2e36e41c569b367c00b70c17f54b13ac29bcd2d8c8/coverage-7.9.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f5fd54310b92741ebe00d9c0d1d7b2b27463952c022da6d47c175d246a98d1bd", size = 216537, upload-time = "2025-07-03T10:53:54.273Z" }, - { url = "https://files.pythonhosted.org/packages/1d/a0/a6bffb5e0f41a47279fd45a8f3155bf193f77990ae1c30f9c224b61cacb0/coverage-7.9.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c48c2375287108c887ee87d13b4070a381c6537d30e8487b24ec721bf2a781cb", size = 214398, upload-time = "2025-07-03T10:53:56.715Z" }, - { url = "https://files.pythonhosted.org/packages/d7/85/f8bbefac27d286386961c25515431482a425967e23d3698b75a250872924/coverage-7.9.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:8a1166db2fb62473285bcb092f586e081e92656c7dfa8e9f62b4d39d7e6b5050", size = 204013, upload-time = "2025-07-03T10:54:12.084Z" }, - { url = "https://files.pythonhosted.org/packages/3c/38/bbe2e63902847cf79036ecc75550d0698af31c91c7575352eb25190d0fb3/coverage-7.9.2-py3-none-any.whl", hash = "sha256:e425cd5b00f6fc0ed7cdbd766c70be8baab4b7839e4d4fe5fac48581dd968ea4", size = 204005, upload-time = "2025-07-03T10:54:13.491Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version <= '3.11'" }, +version = "7.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/79/e78bd8f75a9b8e32233ce92d4607f0a21ce88a9156cace2884e7175a82f5/coverage-7.17.0.tar.gz", hash = "sha256:cc010a0a7fbdd9bb8bdfd0d3f04a5151275860213cbd7e2b876b29778489c712", size = 991021, upload-time = "2026-10-22T16:06:50.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/25/79a66272edd250031aeee6db87d500a0bf76390d0d5f8c2f431fe354715f/coverage-7.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:99a7b390cbccc6bf029ca4da3f0f607c218bb4085e9cd6b58a90d14ca12993c3", size = 225837, upload-time = "2026-10-22T16:03:55.622Z" }, + { url = "https://files.pythonhosted.org/packages/52/a6/f5f6fefb2fc1305363927edad1d0a60ce6ef80d6c1a74a79e825f0f670eb/coverage-7.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f72640e02a470b57b15cd655820133f6892760209283a363a60e2df932d5f0fe", size = 226257, upload-time = "2026-10-22T16:03:57.164Z" }, + { url = "https://files.pythonhosted.org/packages/28/61/72889bac8eb44c51f8043edb227df551dfdca1fc4819a6c6d67b3f69427b/coverage-7.17.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2dc9233f39149b5a4f4aba17a4b6bc5cca22e52cfc4b06fdb07d014439b8b2ea", size = 258282, upload-time = "2026-10-22T16:03:58.521Z" }, + { url = "https://files.pythonhosted.org/packages/f4/e4/03e4a5644df9b73de0d44d1b82acd18b06c42b5abc3f1433be8363fa983d/coverage-7.17.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e8113d3852e9377421a61de1917df27b3abb25404a4ecf69f9e64612c4345b5", size = 260506, upload-time = "2026-10-22T16:04:00.116Z" }, + { url = "https://files.pythonhosted.org/packages/6f/4e/949022286df7e59e8633a3a7e6635e0e6b53af7d57074cb0bf8f500373fb/coverage-7.17.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86a39539d10d666bb819c16c94d7edfc1aa2e0531b937f7c549b83d15177c6e", size = 262600, upload-time = "2026-10-22T16:04:01.49Z" }, + { url = "https://files.pythonhosted.org/packages/27/cf/7d67f60df081006315699b7edb9402c1b47142caf1383f4e56ae8ff1a501/coverage-7.17.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:559f748446ee799803686b5784e3deb54c70d655ac386a860e06b11672504ba7", size = 264609, upload-time = "2026-10-22T16:04:03.286Z" }, + { url = "https://files.pythonhosted.org/packages/e1/e0/9293d94afbc099990a085e88229a51c79b00828aba0f2adda32dc4cc16d1/coverage-7.17.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34d65c9e8e257f48a654908005046fbf1bc48d9540ae3776ad08c0acd010e10c", size = 258382, upload-time = "2026-10-22T16:04:04.804Z" }, + { url = "https://files.pythonhosted.org/packages/24/c8/bcd28efedf262c074dae76f61098739eb02b15f3f716f80cc86f9885b8a9/coverage-7.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b7fa0997b8eba7378ac66f31ec7f70164490353ab79b9667d37c0d365e50177", size = 260299, upload-time = "2026-10-22T16:04:06.291Z" }, + { url = "https://files.pythonhosted.org/packages/b8/dc/503f55e5e2200933403c90d619d9f779b5060ddd338b1bdc63cd235592cb/coverage-7.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6ae0453a3390e67f7bfbe34417bbdf5b4ebfc21db23fb446a0a41115eeeca6ca", size = 258314, upload-time = "2026-10-22T16:04:07.729Z" }, + { url = "https://files.pythonhosted.org/packages/bb/b1/f1a57c36077cc516240636f7eff0d1427939ed795f096dd2c7769213a56c/coverage-7.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:96151262832f3c230ebae23b2d6911ad549e1738465946c97004913ff06112ba", size = 262239, upload-time = "2026-10-22T16:04:09.116Z" }, + { url = "https://files.pythonhosted.org/packages/a8/4f/c2e59d4a132936c7c207b9b69ab99c0f27b14c3c93266e9922aa3b562b37/coverage-7.17.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:cd7397de6cc782f00fe5ac1d75e9b306bcfa49c8b6b8dd6ed1f7709393ad40b3", size = 257841, upload-time = "2026-10-22T16:04:10.509Z" }, + { url = "https://files.pythonhosted.org/packages/05/04/50742c0ee8b6c85826ff11737c93ed957fea4c9acf4b4b99804bdac1dd84/coverage-7.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9d1fdf82c6fea57b5e9dada509f9ce9638c8334664e2c98c7f6f1ccf3d143ad2", size = 259039, upload-time = "2026-10-22T16:04:11.916Z" }, + { url = "https://files.pythonhosted.org/packages/8e/cd/83ad4bbbfcb6d045a33c14cdca313f6c9275737c67f3b7300222e3239a37/coverage-7.17.0-cp311-cp311-win32.whl", hash = "sha256:38c86e5d74bbfd88a393fa3f91257c1225c63aa6db6d5918de3e49ab04f91c6e", size = 227687, upload-time = "2026-10-22T16:04:13.537Z" }, + { url = "https://files.pythonhosted.org/packages/ca/c8/dcc5a7effa79707eb8a61e699b141cff7c9b46036771274cfb48ea7b765f/coverage-7.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:2ed3097c6817bc1a7fc8ae0a6131db74aa1150d863cccc308237ff362d3226b2", size = 228290, upload-time = "2026-10-22T16:04:14.899Z" }, + { url = "https://files.pythonhosted.org/packages/d1/58/a8553e0dcd38d8136df63964638d2b588e0a4a916bff1bca996244fda693/coverage-7.17.0-cp311-cp311-win_arm64.whl", hash = "sha256:6052e878b628abcd38fa5f2b64abebc686eed4e2267da42434017a9c6d24f241", size = 228199, upload-time = "2026-10-22T16:04:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/0a/25/989fd3b495c4274ac0cf54cb6664326415e60183a7f8a73dd9bbb0b11e34/coverage-7.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0cfdc938ca3319d873d1f1252e60620a39aee4ebf9dbd7cc58238109ebda9c51", size = 225938, upload-time = "2026-10-22T16:04:18.113Z" }, + { url = "https://files.pythonhosted.org/packages/db/cb/14726426bf3241657facbf0f7df7babd8f7d3fcf8e4609b7929f9dceecbc/coverage-7.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d523da3c2e4bca49417768bcdb1a443c5b359dc44b8b93a3102e118fce912c40", size = 226166, upload-time = "2026-10-22T16:04:19.524Z" }, + { url = "https://files.pythonhosted.org/packages/8e/97/f95ed32cd3cfbe261a3598e694cb770cefc7b2d13ff013418d6f70a44dde/coverage-7.17.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:adbf3450c0f3f2b2854e282a8758f2b3eddf787eeff24ec9c9bc2cbc38328cc1", size = 258462, upload-time = "2026-10-22T16:04:21.079Z" }, + { url = "https://files.pythonhosted.org/packages/91/ac/eb4c31f741509a9ef48cf6f28385e98e9de0785599282252eee252ff8af7/coverage-7.17.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:85932227e9dd38e62cd29c17fefdfecfb919eead6af1e3259522d03cf85de983", size = 261789, upload-time = "2026-10-22T16:04:23.037Z" }, + { url = "https://files.pythonhosted.org/packages/e8/3e/d9cd006d1a3cc5deab07beb29b86cb4a10dd84d66b330820363fb8d310d6/coverage-7.17.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30f5477aac9c9e4a0a641c55f8f8fddd7f3bd91176c912c50f40ffced96b4034", size = 262322, upload-time = "2026-10-22T16:04:24.94Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3a/4c872c6ae0762b09cdb8e856891bb3f584848cb60b6dda2bacb85fe2f3f0/coverage-7.17.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0b8bb651a4406fb6a983a905309fec1783443c65e1771b41e92740a0f4a1176b", size = 264600, upload-time = "2026-10-22T16:04:26.444Z" }, + { url = "https://files.pythonhosted.org/packages/df/98/1d41a2373fa98b423bcd70adb91d75e38eafb417955426dbb920b10016f3/coverage-7.17.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0edeb6594f080c8de1263cccb239cb316ef77aeb959e2e0f38f2953fcc72a49e", size = 258678, upload-time = "2026-10-22T16:04:27.832Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/fe04b5e63e76506daa63d90bdfb00a53767fe5df18546b437d6226918d6b/coverage-7.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da94ec0484e84fce5c7bf8d0f54b97767a90d992653a129b35634699d516e0a5", size = 260210, upload-time = "2026-10-22T16:04:29.275Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/5c5a78dc19dd4799be9c6ec022316fb25ababaeacfaf0f52f24c56a57b43/coverage-7.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a25cc5e8c23a590815c6a7aa43624234d25cb23b21b484adb8a0daed59860db5", size = 258375, upload-time = "2026-10-22T16:04:30.647Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e7/4c1d8eaff4d756fefd15d58c4953a78ab656782fd0e32c5a3465dba61aa0/coverage-7.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:db645c81cf4d6bcb392ea1894aad65d55d1588a8472c834b25ca575da3029a56", size = 262422, upload-time = "2026-10-22T16:04:32.053Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2a/0b17c3e2e7b6ff1a5d92eb58915c0d1026668928f961d14dac73cf1b6096/coverage-7.17.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:6a80a11b90c4a03df1502304cf24ff953255b6b5d076ef79066ecf88baaff31f", size = 257875, upload-time = "2026-10-22T16:04:33.824Z" }, + { url = "https://files.pythonhosted.org/packages/d3/2d/eb0cbde0535342df0d17a667163030a3afb67e5eb9e3ad94af9540041584/coverage-7.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e4eaf11d6b0f2147f46cfbf06fe7edcca6f095d0120da00ddc2458995ee869fc", size = 260361, upload-time = "2026-10-22T16:04:35.661Z" }, + { url = "https://files.pythonhosted.org/packages/2e/47/1be2a6db7eb655d0a1d899217c3f2469f9121cbbeddac35c1c8173b1482e/coverage-7.17.0-cp312-cp312-win32.whl", hash = "sha256:912a29f338798541d795e2e25903c6fe7a99dee70a40fe4706a9a124649b523e", size = 227747, upload-time = "2026-10-22T16:04:37.102Z" }, + { url = "https://files.pythonhosted.org/packages/11/c5/201c894c57de81875d8b8cc527ba222aa350e8cfb183eb3f6df45d06ad8e/coverage-7.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:88a1a9fb0075b83389dd9b403bb3fce976031b3c2aa0e05e3e57143cf639de69", size = 228325, upload-time = "2026-10-22T16:04:38.989Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/196095339b19758cf83f507fb598bc42820ae124745feb3084662729e17a/coverage-7.17.0-cp312-cp312-win_arm64.whl", hash = "sha256:2c680e838ff9e68d491158625ca2c1ddb17d78d791bba96a31f8b839b4990438", size = 228131, upload-time = "2026-10-22T16:04:40.654Z" }, + { url = "https://files.pythonhosted.org/packages/54/e6/1f01afbc9f4fa8ca5e1fa6fdf537a5c58b5765d1b4167ee284cddb9acc72/coverage-7.17.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:84538c040f4e6214f663459d89372ce4e6b2bbdd9d397ef0dca7b3ecd56b8eb2", size = 227080, upload-time = "2026-10-22T16:04:42.325Z" }, + { url = "https://files.pythonhosted.org/packages/92/7a/bdb7e6260c4a211389aeac9b89dc31662ebe122153ad0ecfd156897912df/coverage-7.17.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:6abfb6a4cf1cb1b67bc8fccdde177e2d2b781d0d34449e7078156547025140e5", size = 227152, upload-time = "2026-10-22T16:04:43.737Z" }, + { url = "https://files.pythonhosted.org/packages/37/4e/276e7d5b3cfb124871bdb544c27b004a8b4e270e6bf8e7414149c54b5e5b/coverage-7.17.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ef65e96f0fc1a7c8b7644c7011d47a8228555e7888ac4d6246f715a7f3d7c398", size = 225397, upload-time = "2026-10-22T16:04:45.292Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7d/dac073db12f3c131598a6693253aded581e4d7d622a89864f11bfb0ca2f5/coverage-7.17.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:55939ea4c097fda2edabf80fac5e49bef15597b950a9f29fc56292a895245feb", size = 225705, upload-time = "2026-10-22T16:04:46.603Z" }, + { url = "https://files.pythonhosted.org/packages/00/45/877b0a9248e921080ae91d115c13192d17e308f5aee86bcc7f7bc2a54ed1/coverage-7.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bfb6f868af552c0ceb2d19220b8cbcc2be096ca26163ac30e682a13041433429", size = 225828, upload-time = "2026-10-22T16:04:48.065Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f5/2c48d47abec0e4590b302920334be5ee3854f96bbd22524feabb8d92b220/coverage-7.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8d823d66afd59566030539c49c7a6acaf3083996682be2dda760c63555842094", size = 226088, upload-time = "2026-10-22T16:04:49.513Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a0/ec0442f3f372c7fd742f49b3022edd392f79e37a0048e1fa333f56d01ec3/coverage-7.17.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:50678474e714c684b82c108e63fbb8f1bcf1266d8293a49980f1d08526f093b5", size = 257257, upload-time = "2026-10-22T16:04:50.982Z" }, + { url = "https://files.pythonhosted.org/packages/92/e2/eb0927ba93809f76eee69fa1e47999825fc7dbbabc3e0e1a2744f2677acb/coverage-7.17.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:045c1eeb19fb4eae949850a761102fffb3a5f638b97f977912f95843e54f6669", size = 260165, upload-time = "2026-10-22T16:04:52.409Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a2/8d4c6055efb32099b15c9cc33d007b8aabebc4832f372a3274de5ba0afc5/coverage-7.17.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfb12891a773cbc2132349c77c690a045a882fe3f98b4bda50dfabb01893f9bd", size = 261098, upload-time = "2026-10-22T16:04:53.763Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/93412288688a7b03f152a734c8ef086e395108a0a6a746985d3967e220f2/coverage-7.17.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3067608b4429629f640c1b23d2f69b05d2fd45e00ebb6ee9e8fad220a6c11722", size = 263164, upload-time = "2026-10-22T16:04:55.386Z" }, + { url = "https://files.pythonhosted.org/packages/3c/20/7eb8d805c4f1a212245cef20181dfbf39535357985073d49730ee9cf08d4/coverage-7.17.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1762e85cbbe3b5ff9c6dcbcc1b89d5c72320094292b7b9572bf882c85e428b7", size = 257287, upload-time = "2026-10-22T16:04:56.976Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c1/1df29630b4ed17e135c76390afcc6bd273c3dc5ba2a21a76813a600fe98c/coverage-7.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62bb77987d3f72a0aaa77c567ee7f9806bc2e748c8f46fafbe1fdb90dd148398", size = 259256, upload-time = "2026-10-22T16:04:58.545Z" }, + { url = "https://files.pythonhosted.org/packages/a1/79/2365d1008d28aafe468a450a24c6c63363de794b5140223d67685cd0e205/coverage-7.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6cc31f27240d4e080437e3b8229d92f1d809c9a4f233607385373b73974e183e", size = 257178, upload-time = "2026-10-22T16:05:00.103Z" }, + { url = "https://files.pythonhosted.org/packages/c0/9f/f002952d295d772688dffce0d991e3822795b1e3aad158073712a5a5e86e/coverage-7.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61cde5222f1933d476647c5a25ed1a8678b7703098cb5a15f4a0aa39967d8c28", size = 261275, upload-time = "2026-10-22T16:05:01.462Z" }, + { url = "https://files.pythonhosted.org/packages/40/fe/f9e15fbb426be97cd679ee5d359151e046f103bcd76b5092c318c26ed596/coverage-7.17.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:11f5f7fb2d97a0fe865f5e7bad4eb0619b957637f676bc088d13844adf26ba95", size = 257029, upload-time = "2026-10-22T16:05:02.8Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4a/3c398f38694387334ff4c9f71afc8e15b4fa7db7bc0bea4d5b6032eb0df0/coverage-7.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e09612b1b82c9df1d2b6c85dee88d5aad3e73d77a8ec0b16ac6a7322cbdf5d9", size = 259109, upload-time = "2026-10-22T16:05:04.241Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a9/908a3cf1a2335aec1c788682a06c2f742a62a4f987033f080de1c5fd1997/coverage-7.17.0-cp313-cp313-win32.whl", hash = "sha256:bd3e9eb493631ff1ca34bf5efac25b5c66724f837bf6182c4fc771c55946423d", size = 227691, upload-time = "2026-10-22T16:05:05.636Z" }, + { url = "https://files.pythonhosted.org/packages/13/f7/8cdd7bfd8a63b3e6b133fc395ecfc7b1cb6f561926e7e2ad050de85b83e7/coverage-7.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1fc9a7cea899c51d8a53e66c2f082a3d9e461ece32418d3ef0a0b90c32bfd3d", size = 228418, upload-time = "2026-10-22T16:05:07.057Z" }, + { url = "https://files.pythonhosted.org/packages/09/cf/0b3fc57f735cd3831ca13d0be5312a5477d5934066683c5d34018cab7541/coverage-7.17.0-cp313-cp313-win_arm64.whl", hash = "sha256:e65a1e61a68493fbfbe44d8bec71b3231d81b9917f62d3dafe0e105072147e83", size = 228142, upload-time = "2026-10-22T16:05:08.435Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e1/722462fe79912ebebc101497bd16c42413cde2dbae771017f1ec0acb84c2/coverage-7.17.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:dc5936491e306f2f6f095bd5fba593de11eb0375cee787ca1f245c3a333a523a", size = 227197, upload-time = "2026-10-22T16:05:09.846Z" }, + { url = "https://files.pythonhosted.org/packages/b7/74/826b9c09f2ebfea803bccb391d935688a25309bff8e819fc446bc629c108/coverage-7.17.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:968c5fb6e0c83cab752d79a70209648ce4d90cae815c60fa229b59e264601062", size = 227314, upload-time = "2026-10-22T16:05:11.422Z" }, + { url = "https://files.pythonhosted.org/packages/6d/19/c8514d7f5e0659a96ff2bc7377119dca6d420e2761c5fc69ae37618734f8/coverage-7.17.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:12cb8a20ad904a5811e6660d829a586b216e5254b9b34b76dde8a4d65d827dc6", size = 225477, upload-time = "2026-10-22T16:05:12.761Z" }, + { url = "https://files.pythonhosted.org/packages/81/74/ef9433ce599f07d8633b4ce6e6d6921505c4ef3f7f9006f8eb66e2c278cf/coverage-7.17.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:bb5ca66937c55bc85d1a5e9c5900a3e4693a8edf2280a9b3672b7b2661a84b95", size = 225787, upload-time = "2026-10-22T16:05:14.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/26e58981940e8b3944c6a9941bec5c7f50840e7009a046712e3f3bcd9e6a/coverage-7.17.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5cc15faaf318ee5040d835a62c75bc6f122d837274f3b5efd47bf9fbd4ac5b85", size = 226019, upload-time = "2026-10-22T16:05:15.798Z" }, + { url = "https://files.pythonhosted.org/packages/e9/63/fe175310815cc8357b83b773c9b4c20943c269f217dd825a37c4b4bfe324/coverage-7.17.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7d6d9d396c8b7bcaf76d774a10140b218111484e54c73a5f2a1b75655381748e", size = 226169, upload-time = "2026-10-22T16:05:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b0/ac84761f5b4bd226696b0ec4606903d2ef7208abda0aec06c14a4218def4/coverage-7.17.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:42e6f170d1ac04b7eb3363310a6c41cdfd82c1fe6bf9ffbc4a86f380bdf091c7", size = 258092, upload-time = "2026-10-22T16:05:18.691Z" }, + { url = "https://files.pythonhosted.org/packages/e9/58/d8bdd65a661913bc12eaaa3e59742b2cb8b94f2e7f78e62184f0a58ca493/coverage-7.17.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:acdb5f3c96046efff9dc6c572a6acb2b8d0da09372d7b9a9ed7249cf7d17434f", size = 261096, upload-time = "2026-10-22T16:05:20.089Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/5d82e2f0a75ea149e0a6412e137e1d610538772fdfd7199737db7fe234da/coverage-7.17.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3393209f6894713161ee82a9b0e673e58237e0f9733c6638e7a6c0c620ef0b33", size = 262080, upload-time = "2026-10-22T16:05:21.568Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cc/e3ebfd295d1dd47c7bc84a17d73f150465a37ab388dd68fe82b495dc79a0/coverage-7.17.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9494d9e99389d39e6a96227749af898d8924ff591cb63944f8a98e68582bf0e", size = 264558, upload-time = "2026-10-22T16:05:22.906Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9d/e2adff76d6544bbc6df7366d74967923c2de37ba889a006bfb875bf5857b/coverage-7.17.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:032d4c2db4c677eb71d43f2f8b80bf64e9346f7a3f7b6ebb13f1782f3cc6c274", size = 257855, upload-time = "2026-10-22T16:05:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/d9/fd/ecd1e9cddf1c36b5d03c438568b1f53e63db84bb3656539d71b454484c7d/coverage-7.17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4343a9378b964eb3cb80fa90406385de91c7e982a769ca9314d848f93bc0d3f2", size = 259933, upload-time = "2026-10-22T16:05:25.79Z" }, + { url = "https://files.pythonhosted.org/packages/40/b6/e17a19dccdbcad494c64691f71c1dba3e55c30625bc29ffbb88ac5a0aa8b/coverage-7.17.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:b609df3d6d900464207532c5170a65c6ede8d2e0b91f151f90008a866395cd76", size = 257972, upload-time = "2026-10-22T16:05:27.185Z" }, + { url = "https://files.pythonhosted.org/packages/6a/0d/37dac534709a3fa43a937c8b0604839bb44b8670b83d143a4b78fec20d1e/coverage-7.17.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a01ef92caeedfa4f2ad171a3a8e6fece4565de871d8bca428151bf9929f41048", size = 262271, upload-time = "2026-10-22T16:05:28.619Z" }, + { url = "https://files.pythonhosted.org/packages/cb/17/7c05186925b4d64a46c271dfd944e3f0c1ad89db9095c31a6df157a75df2/coverage-7.17.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a3914e2c98c34b94c26d2add3d2a61ccfd3534fc4eaa879ee290bdbb5184ba6c", size = 257604, upload-time = "2026-10-22T16:05:30.07Z" }, + { url = "https://files.pythonhosted.org/packages/95/65/c241cdee66a0ff86c68f6d37328e735d10e3d30cd6ff66f356039eb688d2/coverage-7.17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8a72b26dc5c9a9422e45472b1d67ba5caf273c524c8668cc04b23062663755e", size = 259714, upload-time = "2026-10-22T16:05:31.402Z" }, + { url = "https://files.pythonhosted.org/packages/db/09/e93233fe2405574ce0a31ed201c0cba3a860e085db5d2828bf12b7dc0790/coverage-7.17.0-cp314-cp314-win32.whl", hash = "sha256:03baf0688e14a5a44ffd1eefa8928dfc92b14565e521174e072b31b971aa1657", size = 227914, upload-time = "2026-10-22T16:05:32.78Z" }, + { url = "https://files.pythonhosted.org/packages/d7/77/04979eb217edb94b94afabb4bcc179f60c746f68d3fd0b12688ba9195730/coverage-7.17.0-cp314-cp314-win_amd64.whl", hash = "sha256:3a4459b0f389dd1e51aac3dbfc4ca35b30cae7dc99caa3c0a086d1997a985709", size = 228543, upload-time = "2026-10-22T16:05:34.118Z" }, + { url = "https://files.pythonhosted.org/packages/a0/38/155f2f2c6769f8c43eca8a5e581443faa0908828650090b97103b4a41376/coverage-7.17.0-cp314-cp314-win_arm64.whl", hash = "sha256:a32ee5831b15ba239bef5d272ae586ca8acea4a661b5f2941f5a0d380e518b23", size = 228396, upload-time = "2026-10-22T16:05:35.951Z" }, + { url = "https://files.pythonhosted.org/packages/52/55/d6751572d9445485c4c5a51ec6ae11caa5c11b7ef2448cdccc884f7f54d9/coverage-7.17.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9c083e253e96fdeeaf48133fe836cac86ace2db215d235700e7f7532420a200c", size = 226486, upload-time = "2026-10-22T16:05:37.363Z" }, + { url = "https://files.pythonhosted.org/packages/2f/a8/82d37760e537bfdb9fdee285fa1e1b45bc153293d23e2331c7befedd1990/coverage-7.17.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b88fb4d4d7608cbcebdc7ff7dbffc2115e3b81d6c33a79147cd79d54fcb080f4", size = 226861, upload-time = "2026-10-22T16:05:38.777Z" }, + { url = "https://files.pythonhosted.org/packages/24/96/70ec00a9db6d7bdd3f914eba12057360769f5cb78a98456e71fe1937deb5/coverage-7.17.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2bf3ee38a40c0570c316b9e7507c472469586906a20f289705898528c31aaea8", size = 266849, upload-time = "2026-10-22T16:05:40.285Z" }, + { url = "https://files.pythonhosted.org/packages/77/d8/d99be3bfbb208512f039c80b31e404138a86678fc929a17acd5b7135a6ae/coverage-7.17.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7c570293f001ea91598b90e90cb9b98fddee833e90bbede432cbd218331ccd8e", size = 269402, upload-time = "2026-10-22T16:05:41.585Z" }, + { url = "https://files.pythonhosted.org/packages/82/50/6cbe8b5a5060edbd21ce8109c4e900f8b7656e8b72ede6dc4d82dc0b8bfb/coverage-7.17.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:791f9ee09814dd30d9562b4f4eb037a371485ec1c830b53999d2320d20c4e764", size = 272025, upload-time = "2026-10-22T16:05:42.921Z" }, + { url = "https://files.pythonhosted.org/packages/bd/05/d3633add01e5518dfdacfdbd1be41cb5c581412dd8bccd663edf6ef7fec8/coverage-7.17.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c7c5672ecf1b497de7a0b37743bef40e3b58e3207e9fe2ed6682cb0420836a88", size = 273515, upload-time = "2026-10-22T16:05:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/57/d9/b83387780271bf9ea9f96a3aeb01c1c302c4494a927923c4fa70cd170a3f/coverage-7.17.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:337f87e62e1c5f43c8198d879f677c342d152f84d3f157add12558853cbb8eaf", size = 266725, upload-time = "2026-10-22T16:05:45.713Z" }, + { url = "https://files.pythonhosted.org/packages/e4/be/8e80b29764ae3f4d70d44952eee3f3927eb36897490fe799e400adb7f5da/coverage-7.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c8a58baa8eb6154c6645eadcc19b6c089deab78c24a612a83206f2a8a5992a7c", size = 269312, upload-time = "2026-10-22T16:05:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c9/e702f588fe8d83ca844f133270ad0a49bf650c8cf260551ff6f11a6b6bbf/coverage-7.17.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fb5745048ee20f796b0e3ab61831049e749acff188563e2af32f58ede957ac1b", size = 266740, upload-time = "2026-10-22T16:05:48.343Z" }, + { url = "https://files.pythonhosted.org/packages/8a/11/ee13ad14b714d75ef07c490b6e43969574a8b8b8c6d67bc741fcbacbf9c3/coverage-7.17.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:7b5abcae74750302ac4bc77351eaee87c450e4abd3b6225eacde3858e260f8b2", size = 271036, upload-time = "2026-10-22T16:05:49.727Z" }, + { url = "https://files.pythonhosted.org/packages/e2/bc/854e8912c11c54aaf416e74602000589c6efbbe1f251dc90202fdabddcb6/coverage-7.17.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4e153f0bd6509dbf837fd585f489b3328bfd98f2a718a0b15ae63032148b285c", size = 266158, upload-time = "2026-10-22T16:05:51.141Z" }, + { url = "https://files.pythonhosted.org/packages/a8/dd/96432830ddf63bc42654de54eee77a0cd6949cc65769bda06f353323f23a/coverage-7.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e42a835271922fe7bf98c7a05c78d4032f4e52bf5b07fafa1eadfdfc2f0ad22f", size = 268088, upload-time = "2026-10-22T16:05:52.92Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ee/230c6ec065a6629d41cc89323ceb54d37e2650c104f70fc108f4ee7c5051/coverage-7.17.0-cp314-cp314t-win32.whl", hash = "sha256:5900055351ec89fdffb34b27898815106529ded29a9496464c1ebd6313fd40fa", size = 228229, upload-time = "2026-10-22T16:05:54.255Z" }, + { url = "https://files.pythonhosted.org/packages/f0/1d/23eb6aadcb3c00764ff2961c0ff55f5dfa2543856d932b949bbc04fa68e9/coverage-7.17.0-cp314-cp314t-win_amd64.whl", hash = "sha256:5ee9c8bd13a59e301dc2aefe7aa8384633406808de051b1982775667094eb673", size = 229154, upload-time = "2026-10-22T16:05:55.682Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f1/7df117e8e016b7a3ee459e833b3456f3610505afefd071f8727702d98439/coverage-7.17.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a9cb9a0fb58e6fff5442969af36094ecd6976f4907f179e33b27e15355d8f74", size = 228726, upload-time = "2026-10-22T16:05:57.179Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a1/f9c24911755f91e6f451ca2e2c1804fbcbe9fecbc3310e341bbbbfa1d85b/coverage-7.17.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:adabc1079ba844b096799ba8638d8df434aca1613f95bb7d5791af320cf05559", size = 227196, upload-time = "2026-10-22T16:05:58.543Z" }, + { url = "https://files.pythonhosted.org/packages/b0/a5/2b665b40c626e6bb40e5e8e23d91170b48b5f2f57186f46b07f2fac42386/coverage-7.17.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:6b4593d2871c4c801656dd5861e759f8f5156febd6b6061b02f6a72d64618b7b", size = 227315, upload-time = "2026-10-22T16:06:00.409Z" }, + { url = "https://files.pythonhosted.org/packages/3d/8c/22b518d61b930b8a4d62905d046c76a03675ef19b466462011dfb16439a3/coverage-7.17.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:c2c48a36bb970b7265b196032bfd4237c0b373f2b25ef7012d7e905b5b35c19c", size = 225490, upload-time = "2026-10-22T16:06:01.743Z" }, + { url = "https://files.pythonhosted.org/packages/08/5b/d3b141455944e030cd4987f055f8c84a44a1a0b28d81ae93389f44051691/coverage-7.17.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f8bc2cd4c6aa58be1ca243fb8cddb6c3c42031fe4403991ad9cf2b3baed03d9f", size = 225797, upload-time = "2026-10-22T16:06:03.423Z" }, + { url = "https://files.pythonhosted.org/packages/03/24/aab2156983f7022361352640c583d08f0238e4cd7463eb921172001b4cfe/coverage-7.17.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:cbf0b83ce927de6053279ba61342d9f8892afde1385fcba9144cd05d4023d109", size = 226025, upload-time = "2026-10-22T16:06:04.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/db/94697b9ccf4ec94cdad07bf94e2a21b9702247cb212d2d5f18d2b9c3d0de/coverage-7.17.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:66efc0fb99cee34626fc17d3adac9c3cd816bfdad563bb1e983c3ef432f566d4", size = 226193, upload-time = "2026-10-22T16:06:06.167Z" }, + { url = "https://files.pythonhosted.org/packages/a0/fd/db1c4ade4219831d590fff5aa5b7d9ceaf84586e8e60da6fff71b6182251/coverage-7.17.0-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:58a304efdf2253fb2ea03d45d0a04cc174a92a0cd5279c28c5bb893ce7410968", size = 258046, upload-time = "2026-10-22T16:06:07.51Z" }, + { url = "https://files.pythonhosted.org/packages/95/ee/84ed138990ed752abd73db4adffc1842d6152017d8e21809cc109a413fda/coverage-7.17.0-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aed06129a9f530a948928260d7d2d81c47261355b0127e3c782251b38958463c", size = 261735, upload-time = "2026-10-22T16:06:08.861Z" }, + { url = "https://files.pythonhosted.org/packages/64/ad/c1e4367bbd1e7d562d6bc979c82b542f2040544e95a8cd995b694caf0e1a/coverage-7.17.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6cdb47a9be2d3313829bed1d296086287682a3ee901ff987b3432b45705b771", size = 262819, upload-time = "2026-10-22T16:06:10.49Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3a/e8e8509b0940403eab15d86f70022790a01fce3e971a161919c544953f7a/coverage-7.17.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:804fbaf81d09b34e2f8b1159d01e211a50713d743d32fd9b2ca6cf0ae507a66f", size = 265194, upload-time = "2026-10-22T16:06:11.847Z" }, + { url = "https://files.pythonhosted.org/packages/1f/77/d64bbdbb734b1059ebcde2b5df567f142a9948079e51af9b0abf8c9ec17b/coverage-7.17.0-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b2afebb96da9a1bbca142f8cc12320c14e5c215e0a49cded4f191f5a31506a28", size = 258410, upload-time = "2026-10-22T16:06:13.234Z" }, + { url = "https://files.pythonhosted.org/packages/e2/29/7cf81f08a254532c074eb52cfe6b12bb753d08f2997269c9fac8de359541/coverage-7.17.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:bd04fd23206be9ad3de13b0b39313094fafa66a1f6baf70f5471c004a9fac47d", size = 260697, upload-time = "2026-10-22T16:06:14.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/56/bacea6dee2d5ccb31ab0cfffcee87ca7efa80ff048840209c8013aeaf02e/coverage-7.17.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:5ebfbc87836529a31d25c2dec1262c38eea852ec1c46c0f690a515a7339d9c5b", size = 258649, upload-time = "2026-10-22T16:06:16.265Z" }, + { url = "https://files.pythonhosted.org/packages/a4/97/fd8a6a63740f9ee177c53b59e2f4d0752369bb0fd154086a1e69aa1fb255/coverage-7.17.0-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:a59c3b470ac3b2432af3598a996affbeb10236cd899a005c1c4e517fcff8b592", size = 262989, upload-time = "2026-10-22T16:06:17.85Z" }, + { url = "https://files.pythonhosted.org/packages/c1/37/7cd3d3520d45db3788456452b65446182c08f2a7c276f40c9dd11966be02/coverage-7.17.0-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:7fef12cec4b96f59e09761cbd4fc9bdf4788062d1ae435b920241fc16c8a9549", size = 257955, upload-time = "2026-10-22T16:06:19.563Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b9/80343a55e07d854927a915cc21a52e350ae1db9ead33f0248507b960785f/coverage-7.17.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:a14e8d69464da9cbe1dc29e7116dbd37296d1d51a695327c478e250349085089", size = 260512, upload-time = "2026-10-22T16:06:21.055Z" }, + { url = "https://files.pythonhosted.org/packages/f3/32/e4c816f0cb3efdc6392bb276ff88359729f9dec605bdd3c1c7a44776f759/coverage-7.17.0-cp315-cp315-win32.whl", hash = "sha256:9a66074231799d8884d267234d49f60c90b43a945dfe069646b72f3058cd4e67", size = 227913, upload-time = "2026-10-22T16:06:22.407Z" }, + { url = "https://files.pythonhosted.org/packages/43/14/283120142ac281834808584249b89957de997c28573ddd65ae106b622121/coverage-7.17.0-cp315-cp315-win_amd64.whl", hash = "sha256:79cf71e5f9a48877ccfed5baa2c72f45af4feeaa596249e23eb15b473134830e", size = 228532, upload-time = "2026-10-22T16:06:23.756Z" }, + { url = "https://files.pythonhosted.org/packages/b9/bc/83dbc6c3bd58042afaefcb0cfd7d7a2e3076989a2f3d9bc6e6edac819784/coverage-7.17.0-cp315-cp315-win_arm64.whl", hash = "sha256:09e563b49c81cd0a33734e926d7a4a6ef1778d74304cde2dcc3aff8b30ea1036", size = 228393, upload-time = "2026-10-22T16:06:25.163Z" }, + { url = "https://files.pythonhosted.org/packages/00/ed/9463d1cb1766a2570343a372c2871c7fb4d561e5051f029399f4d57ce947/coverage-7.17.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:a5e2e0625dfc789af0b2e10acfc106b352f314fffbd19e6392a7961c8cbe5d9a", size = 226481, upload-time = "2026-10-22T16:06:26.563Z" }, + { url = "https://files.pythonhosted.org/packages/ae/59/6536c7fa87be13236b4184fc395f14d18f622a5b8ef7448a6bfdf5f24ec0/coverage-7.17.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:194562ab1eff0d85aee8a17ce4c5c0bc1ebf70a629a7145257123156ad100fd6", size = 226876, upload-time = "2026-10-22T16:06:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/b0/bc/4ffae6038f78382c9ab6a4969cb5fc01d50b083d119851085807629abe88/coverage-7.17.0-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:85682ca89bc4601125dcdff23fa70e6274e13c9ad502fba845e6c274ab2c6569", size = 267241, upload-time = "2026-10-22T16:06:29.356Z" }, + { url = "https://files.pythonhosted.org/packages/c0/60/cae4b708b4217d33ebf66b9c57f8910a257346b3eaf054a78d73605ddc4c/coverage-7.17.0-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0d0fac604a962ff546beb038cba9a5a09d88e6e3f01612fb46f7bd4fe5dc8dca", size = 270079, upload-time = "2026-10-22T16:06:30.736Z" }, + { url = "https://files.pythonhosted.org/packages/a9/84/1225ab04e55a6a2e483e903a5eb0f8f081cb5325df833594534aa288d91c/coverage-7.17.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72edd4f9483ae30cd1ba4f230687840ef7b58a16afb1c9e81131fd6d64655f36", size = 272775, upload-time = "2026-10-22T16:06:32.247Z" }, + { url = "https://files.pythonhosted.org/packages/94/ad/567f8dd9246a553aa8753732c41f0e0654e98e9a617d6282e64eae0e6aa8/coverage-7.17.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:91e487ad07c511da77b574820141a7c2da09bc2a4b4090b5be2424295d100697", size = 274110, upload-time = "2026-10-22T16:06:33.859Z" }, + { url = "https://files.pythonhosted.org/packages/66/5f/e0ee76895df40601e4aedffb6b8e71ea48e276a629fb4488b92cffffca14/coverage-7.17.0-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1cabb31531002fef5197de5df3c84730aef01e750e25154b9813a2583435aba2", size = 267775, upload-time = "2026-10-22T16:06:35.193Z" }, + { url = "https://files.pythonhosted.org/packages/19/6d/d19c6e45e940e5b9ba697b7be9a8e63cef73d90bdea45b670a59df466717/coverage-7.17.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c9ac886242bbd50fb35a2242ba79555a99891e657da33f98b7ca968e3488a350", size = 270268, upload-time = "2026-10-22T16:06:36.597Z" }, + { url = "https://files.pythonhosted.org/packages/27/a3/b2731bb7aef2db800b330603675c3fa58a6497a05d5b5f8625f3b6285f68/coverage-7.17.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:d45cdc495671fc99268ff3653e0da4244972e9fc0e1fc3ea9de18781ad28963a", size = 267298, upload-time = "2026-10-22T16:06:37.973Z" }, + { url = "https://files.pythonhosted.org/packages/50/75/d0c90a81b6b6607933109914dc8b0ef0a5f4cacf9482ca868ae773ee5d0b/coverage-7.17.0-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:12961f738d717a046d4bf3f8d1727eb3ebe2ed5478ff96cd6233d4dfc39323d3", size = 271899, upload-time = "2026-10-22T16:06:39.389Z" }, + { url = "https://files.pythonhosted.org/packages/64/1e/f038f3a2614e9ef839a40a184713aca40b8ed79e626ab5cdc388771045df/coverage-7.17.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:1ee0a982b0e1230b3edf768a7dd022bd2377303763895327ac62deb5efacee03", size = 267380, upload-time = "2026-10-22T16:06:40.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/30/8d636e639b2d8b1934128573402a7caf66c8cfbc794fa02061d84f115c34/coverage-7.17.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:460679f53893081edb94eeed011d26be37228ba649b853fd2aed7e4394fb1f35", size = 268993, upload-time = "2026-10-22T16:06:42.361Z" }, + { url = "https://files.pythonhosted.org/packages/73/7a/219f6b391cb0636242d06c390a8add5af91afa3e92afd0380dbedd34f487/coverage-7.17.0-cp315-cp315t-win32.whl", hash = "sha256:600e121e412cd6bdb52ec105b95c6a04da0c9710d1534f6e64a42db667907802", size = 228216, upload-time = "2026-10-22T16:06:43.714Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3f/514d294319c5eac11494394545de209079f33993e14526c220eab29b2a96/coverage-7.17.0-cp315-cp315t-win_amd64.whl", hash = "sha256:c3e11b81faafb1f063248735c3e2c5c4183fc1db2c7f46782170dd7760dffcbc", size = 229146, upload-time = "2026-10-22T16:06:45.262Z" }, + { url = "https://files.pythonhosted.org/packages/f6/82/c0d8bb0a67df838fc7bc6f4060ffc404fd1154fd18e624d83e6abc41aeef/coverage-7.17.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d472ee1c64868a917a47f02ffb4ac8c22b477f7589d57a3eb0c58b1ad4f0137c", size = 228716, upload-time = "2026-10-22T16:06:47.097Z" }, + { url = "https://files.pythonhosted.org/packages/c9/17/48032919343afa2906112d458aceda2043afdb24a2ee8eb4c60904d8ddf1/coverage-7.17.0-py3-none-any.whl", hash = "sha256:bac487dce0d2aff28ddf1a533a916f771416eee0e493960f611e49037b878e9d", size = 217383, upload-time = "2026-10-22T16:06:48.471Z" }, ] [[package]] name = "debugpy" -version = "1.8.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/3a9a28ddb750a76eaec445c7f4d3147ea2c579a97dbd9e25d39001b92b21/debugpy-1.8.15.tar.gz", hash = "sha256:58d7a20b7773ab5ee6bdfb2e6cf622fdf1e40c9d5aef2857d85391526719ac00", size = 1643279, upload-time = "2025-07-15T16:43:29.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/b3/1c44a2ed311199ab11c2299c9474a6c7cd80d19278defd333aeb7c287995/debugpy-1.8.15-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:babc4fb1962dd6a37e94d611280e3d0d11a1f5e6c72ac9b3d87a08212c4b6dd3", size = 2183442, upload-time = "2025-07-15T16:43:36.733Z" }, - { url = "https://files.pythonhosted.org/packages/f6/69/e2dcb721491e1c294d348681227c9b44fb95218f379aa88e12a19d85528d/debugpy-1.8.15-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f778e68f2986a58479d0ac4f643e0b8c82fdd97c2e200d4d61e7c2d13838eb53", size = 3134215, upload-time = "2025-07-15T16:43:38.116Z" }, - { url = "https://files.pythonhosted.org/packages/17/76/4ce63b95d8294dcf2fd1820860b300a420d077df4e93afcaa25a984c2ca7/debugpy-1.8.15-cp311-cp311-win32.whl", hash = "sha256:f9d1b5abd75cd965e2deabb1a06b0e93a1546f31f9f621d2705e78104377c702", size = 5154037, upload-time = "2025-07-15T16:43:39.471Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a7/e5a7c784465eb9c976d84408873d597dc7ce74a0fc69ed009548a1a94813/debugpy-1.8.15-cp311-cp311-win_amd64.whl", hash = "sha256:62954fb904bec463e2b5a415777f6d1926c97febb08ef1694da0e5d1463c5c3b", size = 5178133, upload-time = "2025-07-15T16:43:40.969Z" }, - { url = "https://files.pythonhosted.org/packages/ab/4a/4508d256e52897f5cdfee6a6d7580974811e911c6d01321df3264508a5ac/debugpy-1.8.15-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:3dcc7225cb317469721ab5136cda9ff9c8b6e6fb43e87c9e15d5b108b99d01ba", size = 2511197, upload-time = "2025-07-15T16:43:42.343Z" }, - { url = "https://files.pythonhosted.org/packages/99/8d/7f6ef1097e7fecf26b4ef72338d08e41644a41b7ee958a19f494ffcffc29/debugpy-1.8.15-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:047a493ca93c85ccede1dbbaf4e66816794bdc214213dde41a9a61e42d27f8fc", size = 4229517, upload-time = "2025-07-15T16:43:44.14Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e8/e8c6a9aa33a9c9c6dacbf31747384f6ed2adde4de2e9693c766bdf323aa3/debugpy-1.8.15-cp312-cp312-win32.whl", hash = "sha256:b08e9b0bc260cf324c890626961dad4ffd973f7568fbf57feb3c3a65ab6b6327", size = 5276132, upload-time = "2025-07-15T16:43:45.529Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ad/231050c6177b3476b85fcea01e565dac83607b5233d003ff067e2ee44d8f/debugpy-1.8.15-cp312-cp312-win_amd64.whl", hash = "sha256:e2a4fe357c92334272eb2845fcfcdbec3ef9f22c16cf613c388ac0887aed15fa", size = 5317645, upload-time = "2025-07-15T16:43:46.968Z" }, - { url = "https://files.pythonhosted.org/packages/28/70/2928aad2310726d5920b18ed9f54b9f06df5aa4c10cf9b45fa18ff0ab7e8/debugpy-1.8.15-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:f5e01291ad7d6649aed5773256c5bba7a1a556196300232de1474c3c372592bf", size = 2495538, upload-time = "2025-07-15T16:43:48.927Z" }, - { url = "https://files.pythonhosted.org/packages/9e/c6/9b8ffb4ca91fac8b2877eef63c9cc0e87dd2570b1120054c272815ec4cd0/debugpy-1.8.15-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94dc0f0d00e528d915e0ce1c78e771475b2335b376c49afcc7382ee0b146bab6", size = 4221874, upload-time = "2025-07-15T16:43:50.282Z" }, - { url = "https://files.pythonhosted.org/packages/55/8a/9b8d59674b4bf489318c7c46a1aab58e606e583651438084b7e029bf3c43/debugpy-1.8.15-cp313-cp313-win32.whl", hash = "sha256:fcf0748d4f6e25f89dc5e013d1129ca6f26ad4da405e0723a4f704583896a709", size = 5275949, upload-time = "2025-07-15T16:43:52.079Z" }, - { url = "https://files.pythonhosted.org/packages/72/83/9e58e6fdfa8710a5e6ec06c2401241b9ad48b71c0a7eb99570a1f1edb1d3/debugpy-1.8.15-cp313-cp313-win_amd64.whl", hash = "sha256:73c943776cb83e36baf95e8f7f8da765896fd94b05991e7bc162456d25500683", size = 5317720, upload-time = "2025-07-15T16:43:53.703Z" }, - { url = "https://files.pythonhosted.org/packages/07/d5/98748d9860e767a1248b5e31ffa7ce8cb7006e97bf8abbf3d891d0a8ba4e/debugpy-1.8.15-py2.py3-none-any.whl", hash = "sha256:bce2e6c5ff4f2e00b98d45e7e01a49c7b489ff6df5f12d881c67d2f1ac635f3d", size = 5282697, upload-time = "2025-07-15T16:44:07.996Z" }, +version = "1.8.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/9d/3cb6693342acf96802dba89934a5b8da43c201d764ebd1f2c0514a3d42bd/debugpy-1.8.22.tar.gz", hash = "sha256:e489c7268e1c7b41e13b438d9c533d2a7af73fb59bf8cd30fead8286c1c39c4e", size = 1710877, upload-time = "2026-09-15T21:44:02.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/4a/8c24c588088c622df6dacdc0110e9cc81b44781fe7a408113441e76aa955/debugpy-1.8.22-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:66e4ac3d6e7026e83e7d93d7ee2f51dd4a4e8dff673578d424e60796893e5b2c", size = 2217799, upload-time = "2026-09-15T21:44:11.57Z" }, + { url = "https://files.pythonhosted.org/packages/c7/14/1c9ff33eba51da70a8dfe2277cc13153bb3ffec79282b9acfcdbe1641d30/debugpy-1.8.22-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:192b73e8d53bbd60225220c0943627bf249ac93d0ea3090e23c45f3e0ceb6a35", size = 3074375, upload-time = "2026-09-15T21:44:13.349Z" }, + { url = "https://files.pythonhosted.org/packages/10/e8/1fa16a94af7d8b86c3ca336d7d32b78cb2c475266d0bb889732d2bc50310/debugpy-1.8.22-cp311-cp311-win32.whl", hash = "sha256:745e1800ec2961e5660c1a317c0a20e28c0fef4de36c04f17a21c33f2b37a92a", size = 5258392, upload-time = "2026-09-15T21:44:15.182Z" }, + { url = "https://files.pythonhosted.org/packages/32/1a/c086b883a4561017bfdd83c1bc70bf2b05ab6540ff767dedf207cadab938/debugpy-1.8.22-cp311-cp311-win_amd64.whl", hash = "sha256:1e76339d5510bc17e9181dba9577508afcb21aad5728f1a55ef74d7d97d255f3", size = 5277955, upload-time = "2026-09-15T21:44:16.986Z" }, + { url = "https://files.pythonhosted.org/packages/73/21/5c7f5c66eaeee57c9dadb0bbff22efddc8d99cdbd3d036c806175f1828cc/debugpy-1.8.22-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ad076f4f66cb8acb79e4384d48b1ea60a0b1957aa0b1112d4887ea3a4df60e0", size = 2499375, upload-time = "2026-09-15T21:44:18.478Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ec/7389798843643ea5bc6a08480ba1b855377c70e2ed90189c0a03594e401e/debugpy-1.8.22-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:8a697acec45dbc70d17fb5d9f4f61989fc294d273c69de487fd10cb35fdd75eb", size = 4000941, upload-time = "2026-09-15T21:44:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/20/f4/64ce7a2499550929e08654360b270409eeda3e321b7c27027d9c919aa36b/debugpy-1.8.22-cp312-cp312-win32.whl", hash = "sha256:12bc7f368182b517cf26c76a2393fff65354e365fa1552b6241e66edff17997b", size = 5359040, upload-time = "2026-09-15T21:44:22.218Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fe/e7d3b72874cdd327bda295d1995a01e426857ae9cbaaba74fd997bc3afbc/debugpy-1.8.22-cp312-cp312-win_amd64.whl", hash = "sha256:371a4ba4a5975eb958393903f3254cf983da7b1c7c178b3f987ee427f42515e3", size = 5398304, upload-time = "2026-09-15T21:44:24.119Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f4/fee6d40f5865aa84e1100c9df1a0f2cf8991776b61f11f433ff277df4415/debugpy-1.8.22-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:c21dd7e1ec22556bb41dc3bf6b86c603e440ec889c4acb27d7206354b2106c54", size = 2493531, upload-time = "2026-09-15T21:44:25.835Z" }, + { url = "https://files.pythonhosted.org/packages/bc/4f/8df91270afbf61fc5ab202951f28451194a7eb093704b26da11cb0ecd308/debugpy-1.8.22-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:c1ffb9953708b648ecf6acd2e5ad2c002bf68785ed618197dd4463a2a7226f39", size = 3994351, upload-time = "2026-09-15T21:44:27.31Z" }, + { url = "https://files.pythonhosted.org/packages/4f/11/2e34a4f21d6155b0c58003fd6fca9819df7d6fe7d7acd83b146b648a57ee/debugpy-1.8.22-cp313-cp313-win32.whl", hash = "sha256:ba810a66b437e3c43ca0ce0892404f010338286263ca8e5108442d76a9485337", size = 5359071, upload-time = "2026-09-15T21:44:29.064Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f5/c2b3e8260388d7b76bc4e5a3a29648a0ca47dca6a2721d6549ff2d944eee/debugpy-1.8.22-cp313-cp313-win_amd64.whl", hash = "sha256:f49b1d6cecf326b63c06d7f517e4a6642777f758c58cb799e7bc5a6dd74721c2", size = 5400362, upload-time = "2026-09-15T21:44:30.857Z" }, + { url = "https://files.pythonhosted.org/packages/ea/95/d97240bb68b86db8d0a07602be068aae9e50f17063d696a4c6f619975311/debugpy-1.8.22-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:e6744ac1850c73c2ba7b29a126cf9ab74efd1831190720e8fee17ef5389c8f5d", size = 2493148, upload-time = "2026-09-15T21:44:32.518Z" }, + { url = "https://files.pythonhosted.org/packages/70/9e/994fe1fb23dd4a5a8d059a0dc95da4b0821907200a61c2d5a4fdc21b6cf8/debugpy-1.8.22-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:0c1104233340196e5cbf5514e7dfdbb98968e730cfd7fdd6f3d72a082be838a9", size = 3961025, upload-time = "2026-09-15T21:44:34.387Z" }, + { url = "https://files.pythonhosted.org/packages/37/e0/66319918883cf6dd6dea3805210c3cafd9e65dfaa6f8b852482cff10a026/debugpy-1.8.22-cp314-cp314-win32.whl", hash = "sha256:feea785c7bbeb8cfd5b01a63f9061c899dc468c8be81671141a29305774fa294", size = 5359408, upload-time = "2026-09-15T21:44:36.128Z" }, + { url = "https://files.pythonhosted.org/packages/94/53/5b4d91f7fffb9393ac907133201d1da0c070d57e463ee8e2ec1db3cb63b6/debugpy-1.8.22-cp314-cp314-win_amd64.whl", hash = "sha256:d593a330297332ec435f3965c448b6d500e03f33675cf2063178bc76377a788e", size = 5397429, upload-time = "2026-09-15T21:44:38.429Z" }, + { url = "https://files.pythonhosted.org/packages/24/71/580df4aed96c9b23c9cbb049907d8ac1347050afdb8f450df20649d51578/debugpy-1.8.22-cp315-cp315-macosx_15_0_universal2.whl", hash = "sha256:a9eca6ab09a61534e923064400081e016f7e1d8430cc6e8b7a9cecd2f59e2b07", size = 2493380, upload-time = "2026-09-15T21:44:40.074Z" }, + { url = "https://files.pythonhosted.org/packages/b0/10/a323945b0966e560c40fe48470d2847bfc7692a8f550d7086e9a28f5b623/debugpy-1.8.22-cp315-cp315-manylinux_2_34_x86_64.whl", hash = "sha256:b7dbde1fb822d100802d505b2aed6d0813b1a0a2015d495cb8798b2215d5d1e5", size = 3975456, upload-time = "2026-09-15T21:44:41.623Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f9/4383635281999c3eaa44bf327de523ba42240b35eb87c1130adac4a829c6/debugpy-1.8.22-cp315-cp315-win32.whl", hash = "sha256:225d063f81708c2546999e7edfac0198b2d5c2f144797dc64858f867948633e0", size = 5359469, upload-time = "2026-09-15T21:44:43.234Z" }, + { url = "https://files.pythonhosted.org/packages/7b/14/4fe9f46a9c825c8cbc6dc4aebc2a885b0bceb37ce2a37699c170482e7a40/debugpy-1.8.22-cp315-cp315-win_amd64.whl", hash = "sha256:b17a4896520f1c6da09ce76ec8215df0b85b0b6f3617526a4c65c2315340875a", size = 5397869, upload-time = "2026-09-15T21:44:44.783Z" }, + { url = "https://files.pythonhosted.org/packages/56/3d/c7dc9f35bc9e22cdb53679f844bee40fd5cff871862f60595869a433400d/debugpy-1.8.22-py2.py3-none-any.whl", hash = "sha256:a9e9d3550e15ca479c59333e90845029190531f0cacfedab3b815a57bd913947", size = 5374857, upload-time = "2026-09-15T21:44:54.454Z" }, ] [[package]] name = "decorator" -version = "5.2.1" +version = "5.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, ] [[package]] @@ -564,61 +847,61 @@ wheels = [ [[package]] name = "dill" -version = "0.4.0" +version = "0.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, ] [[package]] name = "executing" -version = "2.2.0" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/92/8a611141e42930c0f194f7504063ab87dfe970cf1a5af28e7703df448734/executing-2.3.0.tar.gz", hash = "sha256:15919cb5d667e5cb4e099511971d00d659573fff2dd5c4e6cd8b71636c7858d2", size = 1338003, upload-time = "2026-10-10T14:06:04.64Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dd/8bc67e7d5ffc1d88aa5af511189dfb76dc4e1e5b808fab186146ef2663e5/executing-2.3.0-py3-none-any.whl", hash = "sha256:736e859c9f8701f11fcf516856f26f562e04776387824b43a35a1dfe21c84122", size = 29393, upload-time = "2026-10-10T14:06:02.777Z" }, ] [[package]] name = "fastjsonschema" -version = "2.21.1" +version = "2.22.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939, upload-time = "2024-12-02T10:55:15.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/a4/9473c7c3b87009d9c1d74034e4a0f6a35ff0d42dd0f9866d0c3ec4e9217b/fastjsonschema-2.22.2.tar.gz", hash = "sha256:72064e12356a7d6ef02165be2946b9abadbdf238536e07eb587e3dbaa33099cf", size = 385171, upload-time = "2026-08-15T19:47:08.853Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924, upload-time = "2024-12-02T10:55:07.599Z" }, + { url = "https://files.pythonhosted.org/packages/49/82/2755c7c982086f00d4dab85bc120ec35045a9fc2191893a6ce79afe94443/fastjsonschema-2.22.2-py3-none-any.whl", hash = "sha256:0fb3915616adac85ccfdd737d26be1089845d2019819505b42d39888458f74d4", size = 27413, upload-time = "2026-08-15T19:47:04.406Z" }, ] [[package]] name = "filelock" -version = "3.18.0" +version = "4.2.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload-time = "2025-03-14T07:11:40.47Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/28/3893324bcadf8f89b1616637468d766af3f625008c0735bf704fdfa86617/filelock-4.2.4.tar.gz", hash = "sha256:c6d8663535e1650ee430507b4ffbac7b464dd64b7647ea0112a9f406499d163d", size = 652444, upload-time = "2026-10-19T01:57:51.001Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" }, + { url = "https://files.pythonhosted.org/packages/e0/1b/5e74289a1878e666bb4b65fe5805a04cafcac2aa5f519ef1ead67ef91c56/filelock-4.2.4-py3-none-any.whl", hash = "sha256:301241438c57936ef93f4243a94f2559022268bfcf9b375a9a72eb0f8db8358e", size = 162475, upload-time = "2026-10-19T01:57:49.419Z" }, ] [[package]] name = "flake8" -version = "7.3.0" +version = "7.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mccabe" }, { name = "pycodestyle" }, { name = "pyflakes" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9b/af/fbfe3c4b5a657d79e5c47a2827a362f9e1b763336a52f926126aa6dc7123/flake8-7.3.0.tar.gz", hash = "sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872", size = 48326, upload-time = "2025-06-20T19:31:35.838Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/94/85870fc02dfe4ab0885c440e7e41f6a986b10e43eca6717e90f8ce1215cc/flake8-7.4.1.tar.gz", hash = "sha256:84ea5afcaf344487b0ea5baaebb8100f4cfaebc01f755998f75876664029f587", size = 47897, upload-time = "2026-09-23T12:21:59.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e", size = 57922, upload-time = "2025-06-20T19:31:34.425Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d4/8e58a7221419bf8cb194f362ab26abf504c983135975e4c785fac0852886/flake8-7.4.1-py2.py3-none-any.whl", hash = "sha256:78480274a6d7289d9cb8eafeda241fac57d4ea687d26e32dfdca37b72cdeddad", size = 57449, upload-time = "2026-09-23T12:21:58.085Z" }, ] [[package]] name = "fqdn" -version = "1.5.1" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015, upload-time = "2021-03-11T07:16:29.08Z" } +sdist = { url = "https://files.pythonhosted.org/packages/02/01/248d44fbda9e78fa1a7b5a475194bef4c4a3e285db286419f3bb42f2efdf/fqdn-1.6.0.tar.gz", hash = "sha256:e39bf62e2a9481aa2cb780554fdfd944dd8ee5f230eb831684d539cbafed8de2", size = 130737, upload-time = "2026-09-28T05:43:35.482Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, + { url = "https://files.pythonhosted.org/packages/15/d5/a8f9149b97cced9e1f4bff92ff0b6206120e2c853ae774d7020d6ecd8fa8/fqdn-1.6.0-py3-none-any.whl", hash = "sha256:6c793c312ccfa29981e1135b3ef5e1277ebe639731a6b0f7350d90e96e63f0b4", size = 12569, upload-time = "2026-09-28T05:43:33.951Z" }, ] [[package]] @@ -660,20 +943,20 @@ wheels = [ [[package]] name = "idna" -version = "3.10" +version = "3.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, ] [[package]] name = "iniconfig" -version = "2.1.0" +version = "2.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/e1/2069291243c926a2ff1cd706c7f3eeb9b62144bf60f77c9fb9ff2fb26bd3/iniconfig-2.3.1.tar.gz", hash = "sha256:67f4b9c50da0dedf52af349e7749a80a9057a5031199791b906c3bb3ae878960", size = 21209, upload-time = "2026-10-06T22:48:38.076Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl", hash = "sha256:9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7", size = 7552, upload-time = "2026-10-06T22:48:36.959Z" }, ] [[package]] @@ -691,7 +974,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "6.30.0" +version = "7.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -701,21 +984,20 @@ dependencies = [ { name = "jupyter-client" }, { name = "jupyter-core" }, { name = "matplotlib-inline" }, - { name = "nest-asyncio" }, + { name = "nest-asyncio2" }, { name = "packaging" }, - { name = "psutil" }, { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/27/9e6e30ed92f2ac53d29f70b09da8b2dc456e256148e289678fa0e825f46a/ipykernel-6.30.0.tar.gz", hash = "sha256:b7b808ddb2d261aae2df3a26ff3ff810046e6de3dfbc6f7de8c98ea0a6cb632c", size = 165125, upload-time = "2025-07-21T10:36:09.259Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/05/e5499c8b762387d83926bf0389e8fff888c9bf6e7af30566a8527bc12f4a/ipykernel-7.4.0.tar.gz", hash = "sha256:4330114d22b9b33575b2c7c68753fc8faabbbcfbc60b0cdff9f14dd4ce63742f", size = 192731, upload-time = "2026-09-29T16:33:11.468Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/3d/00813c3d9b46e3dcd88bd4530e0a3c63c0509e5d8c9eff34723ea243ab04/ipykernel-6.30.0-py3-none-any.whl", hash = "sha256:fd2936e55c4a1c2ee8b1e5fa6a372b8eecc0ab1338750dee76f48fa5cca1301e", size = 117264, upload-time = "2025-07-21T10:36:06.854Z" }, + { url = "https://files.pythonhosted.org/packages/a5/f8/8b5c10c7f36ab5a3b5c4703669e5b14e44e98782b58e535dd30670e8799a/ipykernel-7.4.0-py3-none-any.whl", hash = "sha256:a6757f790ddc5a6006b813d82da1a9dbb65b3a00f2b6607df776418c6566ec1c", size = 123184, upload-time = "2026-09-29T16:33:09.612Z" }, ] [[package]] name = "ipython" -version = "8.37.0" +version = "8.39.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -729,14 +1011,14 @@ dependencies = [ { name = "traitlets" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/d0/274fbf7b0b12643cbbc001ce13e6a5b1607ac4929d1b11c72460152c9fc3/ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2", size = 831864, upload-time = "2025-05-31T16:39:06.38Z" }, + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849, upload-time = "2026-03-27T10:02:07.846Z" }, ] [[package]] name = "ipywidgets" -version = "8.1.7" +version = "8.1.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "comm" }, @@ -745,9 +1027,9 @@ dependencies = [ { name = "traitlets" }, { name = "widgetsnbextension" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721, upload-time = "2025-05-05T12:42:03.489Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/7c/6db60eddf38547353b06d57941f5eee22a990640ce30479fd71a810507f2/ipywidgets-8.1.9.tar.gz", hash = "sha256:bcccba38a6ec3253f7a39c943cea5b9ad01999ce071396171adbc51c6a6a8613", size = 117252, upload-time = "2026-08-18T08:54:24.123Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806, upload-time = "2025-05-05T12:41:56.833Z" }, + { url = "https://files.pythonhosted.org/packages/c3/55/298e9b3b864a198234997e87a1471c1b17d7f3546ace6d18fb5cf1ce24b2/ipywidgets-8.1.9-py3-none-any.whl", hash = "sha256:f2b8cbcaae10252b809fbe4d7470db75c09b769a32cbf816d20e5ca6d3c5a79d", size = 140101, upload-time = "2026-08-18T08:54:22.339Z" }, ] [[package]] @@ -764,11 +1046,11 @@ wheels = [ [[package]] name = "isort" -version = "6.0.1" +version = "6.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b8/21/1e2a441f74a653a144224d7d21afe8f4169e6c7c20bb13aec3a2dc3815e0/isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450", size = 821955, upload-time = "2025-02-26T21:13:16.955Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/82/fa43935523efdfcce6abbae9da7f372b627b27142c3419fcf13bf5b0c397/isort-6.1.0.tar.gz", hash = "sha256:9b8f96a14cfee0677e78e941ff62f03769a06d412aabb9e2a90487b3b7e8d481", size = 824325, upload-time = "2025-10-01T16:26:45.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/11/114d0a5f4dabbdcedc1125dee0888514c3c3b16d3e9facad87ed96fad97c/isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615", size = 94186, upload-time = "2025-02-26T21:13:14.911Z" }, + { url = "https://files.pythonhosted.org/packages/7f/cc/9b681a170efab4868a032631dea1e8446d8ec718a7f657b94d49d1a12643/isort-6.1.0-py3-none-any.whl", hash = "sha256:58d8927ecce74e5087aef019f778d4081a3b6c98f15a80ba35782ca8a2097784", size = 94329, upload-time = "2025-10-01T16:26:43.291Z" }, ] [[package]] @@ -809,25 +1091,25 @@ wheels = [ [[package]] name = "json5" -version = "0.12.0" +version = "0.17.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/be/c6c745ec4c4539b25a278b70e29793f10382947df0d9efba2fa09120895d/json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a", size = 51907, upload-time = "2025-04-03T16:33:13.201Z" } +sdist = { url = "https://files.pythonhosted.org/packages/16/1f/58a4d7ee466f81bc3c7337036380fc6d49de3afb7855d74f8121b1e89b32/json5-0.17.3.tar.gz", hash = "sha256:8d0278ad34ebaa9c3af76d9519274811830224a2d1cd5af156dbd067f461b8a4", size = 54234, upload-time = "2026-10-09T21:19:28.335Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/9f/3500910d5a98549e3098807493851eeef2b89cdd3032227558a104dfe926/json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db", size = 36079, upload-time = "2025-04-03T16:33:11.927Z" }, + { url = "https://files.pythonhosted.org/packages/ae/39/e689b616c4279a821d5842a8a85c1874540f8d58e35028df93f2182120c2/json5-0.17.3-py3-none-any.whl", hash = "sha256:2c8b22a893c35cd6a3c5ccbf1dd1c7d02c25dc1b5897fea658f9bf08c2e05f9a", size = 34809, upload-time = "2026-10-09T21:19:27.357Z" }, ] [[package]] name = "jsonpointer" -version = "3.0.0" +version = "3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/b8/fe0d28b5a2f14e501a9fd300c49273a05c78920a1925c36c487d539035bc/jsonpointer-3.5.tar.gz", hash = "sha256:81f28618a019cf1b011a6cf757439737972de1ccbeca2e1f86dfb4d661800792", size = 13562, upload-time = "2026-10-24T20:42:20.296Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, + { url = "https://files.pythonhosted.org/packages/a2/cc/8800c20eed936746b32ab438a0fbfc8f3bc18278e32f96caf4d5d6686d4c/jsonpointer-3.5-py3-none-any.whl", hash = "sha256:8728c42f6bc07b1436af31600267bdbb1495ac5a61f31d9583ff319ecf7da09c", size = 9121, upload-time = "2026-10-24T20:42:18.941Z" }, ] [[package]] name = "jsonschema" -version = "4.25.0" +version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -835,9 +1117,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d5/00/a297a868e9d0784450faa7365c2172a7d6110c763e30ba861867c32ae6a9/jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f", size = 356830, upload-time = "2025-07-18T15:39:45.11Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/54/c86cd8e011fe98803d7e382fd67c0df5ceab8d2b7ad8c5a81524f791551c/jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716", size = 89184, upload-time = "2025-07-18T15:39:42.956Z" }, + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, ] [package.optional-dependencies] @@ -855,14 +1137,14 @@ format-nongpl = [ [[package]] name = "jsonschema-specifications" -version = "2025.4.1" +version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] [[package]] @@ -882,9 +1164,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657, upload-time = "2024-08-30T07:15:47.045Z" }, ] +[[package]] +name = "jupyter-builder" +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/3e/56f593e6a664cd14d441724654ce8243f3cac7d3e45867cf084749c8bc75/jupyter_builder-1.2.3.tar.gz", hash = "sha256:01aba6794eb9b19e0e29ae21137ca60ba4135c70347d4b9f664a586822b8c809", size = 1024218, upload-time = "2026-09-04T18:54:09.411Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/aa/be79e87c50698673f196d0633fc1664607da2289f9688d1de7a1c9db9e71/jupyter_builder-1.2.3-py3-none-any.whl", hash = "sha256:c5ea5a7190c2a7b082494abade98eece1b2b5bd5dbd7d610606cbcd10a1d08b3", size = 947541, upload-time = "2026-09-04T18:54:07.644Z" }, +] + [[package]] name = "jupyter-client" -version = "8.6.3" +version = "8.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-core" }, @@ -892,10 +1187,11 @@ dependencies = [ { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/2a/906772148a06e48885039e0250c340b770a55bbf37b08d6ee0449df369c3/jupyter_client-8.10.0.tar.gz", hash = "sha256:9f7116294dca55f1785be880057d44544db9b1567718d92cb33c58886afb9497", size = 360653, upload-time = "2026-08-28T12:17:10.854Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/0f/88/7c548de1f6c2ade7c931a3282da73f9274fa6a1531091be682f89c85efb9/jupyter_client-8.10.0-py3-none-any.whl", hash = "sha256:5f73f24f22fa25192cfff6b23c051932a2473a797b05734aff495b392103e14e", size = 110184, upload-time = "2026-08-28T12:17:09.028Z" }, ] [[package]] @@ -919,21 +1215,20 @@ wheels = [ [[package]] name = "jupyter-core" -version = "5.8.1" +version = "5.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "platformdirs" }, - { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, ] [[package]] name = "jupyter-events" -version = "0.12.0" +version = "0.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema", extra = ["format-nongpl"] }, @@ -945,26 +1240,26 @@ dependencies = [ { name = "rfc3986-validator" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196, upload-time = "2025-02-03T17:23:41.485Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854, upload-time = "2026-04-20T23:17:50.66Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430, upload-time = "2025-02-03T17:23:38.643Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512, upload-time = "2026-04-20T23:17:48.927Z" }, ] [[package]] name = "jupyter-lsp" -version = "2.2.6" +version = "2.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/3d/40bdb41b665d3302390ed1356cebd5917c10769d1f190ee4ca595900840e/jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361", size = 48948, upload-time = "2025-07-18T21:35:19.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/ff/1e4a61f5170a9a1d978f3ac3872449de6c01fc71eaf89657824c878b1549/jupyter_lsp-2.3.1.tar.gz", hash = "sha256:fdf8a4aa7d85813976d6e29e95e6a2c8f752701f926f2715305249a3829805a6", size = 55677, upload-time = "2026-04-02T08:10:06.749Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/7c/12f68daf85b469b4896d5e4a629baa33c806d61de75ac5b39d8ef27ec4a2/jupyter_lsp-2.2.6-py3-none-any.whl", hash = "sha256:283783752bf0b459ee7fa88effa72104d87dd343b82d5c06cf113ef755b15b6d", size = 69371, upload-time = "2025-07-18T21:35:16.585Z" }, + { url = "https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl", hash = "sha256:71b954d834e85ff3096400554f2eefaf7fe37053036f9a782b0f7c5e42dadb81", size = 77513, upload-time = "2026-04-02T08:10:01.753Z" }, ] [[package]] name = "jupyter-server" -version = "2.16.0" +version = "2.21.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -976,7 +1271,7 @@ dependencies = [ { name = "jupyter-server-terminals" }, { name = "nbconvert" }, { name = "nbformat" }, - { name = "overrides" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, { name = "packaging" }, { name = "prometheus-client" }, { name = "pywinpty", marker = "os_name == 'nt'" }, @@ -987,46 +1282,47 @@ dependencies = [ { name = "traitlets" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/c8/ba2bbcd758c47f1124c4ca14061e8ce60d9c6fd537faee9534a95f83521a/jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6", size = 728177, upload-time = "2025-05-12T16:44:46.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/3d/3c9f8bce5d5448107bd285cd80185e76c9c871d076b580dfd90997e52904/jupyter_server-2.21.1.tar.gz", hash = "sha256:a8960aa29263f6041283e97d4756b099fb49b767baab6371891ecb1bd40a63df", size = 761651, upload-time = "2026-09-15T16:00:07.853Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/1f/5ebbced977171d09a7b0c08a285ff9a20aafb9c51bde07e52349ff1ddd71/jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", size = 386904, upload-time = "2025-05-12T16:44:43.335Z" }, + { url = "https://files.pythonhosted.org/packages/1d/39/91bc08650cc8e3efeb7a83c25e20ebddcc9b70d28b4eb6f51a4fb55da7a4/jupyter_server-2.21.1-py3-none-any.whl", hash = "sha256:2a6467606af7dbae2e7e31640030025969e15db6a649eae334af90415dc71dca", size = 394641, upload-time = "2026-09-15T16:00:05.526Z" }, ] [[package]] name = "jupyter-server-terminals" -version = "0.5.3" +version = "0.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pywinpty", marker = "os_name == 'nt'" }, { name = "terminado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430, upload-time = "2024-03-12T14:37:03.049Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770, upload-time = "2026-01-14T16:53:20.213Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656, upload-time = "2024-03-12T14:37:00.708Z" }, + { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704, upload-time = "2026-01-14T16:53:18.738Z" }, ] [[package]] name = "jupyterlab" -version = "4.4.5" +version = "4.6.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, { name = "httpx" }, { name = "ipykernel" }, { name = "jinja2" }, + { name = "jupyter-builder" }, { name = "jupyter-core" }, { name = "jupyter-lsp" }, { name = "jupyter-server" }, { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "packaging" }, - { name = "setuptools" }, { name = "tornado" }, { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/20/89/695805a6564bafe08ef2505f3c473ae7140b8ba431d381436f11bdc2c266/jupyterlab-4.4.5.tar.gz", hash = "sha256:0bd6c18e6a3c3d91388af6540afa3d0bb0b2e76287a7b88ddf20ab41b336e595", size = 23037079, upload-time = "2025-07-20T09:21:30.151Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/8d/995cc142f6083346b35e7d3eadc5a6717ee89ce64ea53577010ac493bc3c/jupyterlab-4.6.4.tar.gz", hash = "sha256:404f49b081819378524886c9db66dba57a5565981eff885830df1baba3a17df5", size = 28335647, upload-time = "2026-09-21T15:25:18.779Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/74/e144ce85b34414e44b14c1f6bf2e3bfe17964c8e5670ebdc7629f2e53672/jupyterlab-4.4.5-py3-none-any.whl", hash = "sha256:e76244cceb2d1fb4a99341f3edc866f2a13a9e14c50368d730d75d8017be0863", size = 12267763, upload-time = "2025-07-20T09:21:26.37Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e4/072bc0d3c6d45d414062a06af7ee81c02a2c12d769c358ec9919f9995ffd/jupyterlab-4.6.4-py3-none-any.whl", hash = "sha256:15b13f991d3985129c797eb84d9949eeb8b6615e14b444868e642411f2c418b2", size = 17171596, upload-time = "2026-09-21T15:25:14.123Z" }, ] [[package]] @@ -1040,7 +1336,7 @@ wheels = [ [[package]] name = "jupyterlab-server" -version = "2.27.3" +version = "2.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, @@ -1051,99 +1347,179 @@ dependencies = [ { name = "packaging" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173, upload-time = "2024-07-16T17:02:04.149Z" } +sdist = { url = "https://files.pythonhosted.org/packages/16/c5/08946a10b81bd64408d8b78cb352e17fe52d3ee11c2aef00a0f06e506938/jupyterlab_server-2.28.1.tar.gz", hash = "sha256:0c3c2418d51021ce280916e63dfe4cba8386b4e2787be5c25433c98f560ddb31", size = 78141, upload-time = "2026-09-15T19:22:09.935Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700, upload-time = "2024-07-16T17:02:01.115Z" }, + { url = "https://files.pythonhosted.org/packages/23/d3/996332fe24f3c2458b9c353b998570dfa2631763e9a8674ba3f94c0877d0/jupyterlab_server-2.28.1-py3-none-any.whl", hash = "sha256:4bd36c7c11d872e15cefa4951e12380a47e6901687165332dd50a007cb367ad9", size = 60197, upload-time = "2026-09-15T19:22:08.201Z" }, ] [[package]] name = "jupyterlab-widgets" -version = "3.0.15" +version = "3.0.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149, upload-time = "2025-05-05T12:32:31.004Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/8b/e739cf9066ad5037a2d4b0a403f06da374fdccb9748221661c8b492d3dbc/jupyterlab_widgets-3.0.17.tar.gz", hash = "sha256:6e61fe21ca8a66039180a5cc52a433e07279d2fee79c8be963e00d55193f17a8", size = 213919, upload-time = "2026-08-18T08:52:17.511Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571, upload-time = "2025-05-05T12:32:29.534Z" }, + { url = "https://files.pythonhosted.org/packages/33/ef/6d27fc118f58cb24886da413545a7efb0853d405fddbfd8b2d9ac09fbed4/jupyterlab_widgets-3.0.17-py3-none-any.whl", hash = "sha256:40ac1e9955acf116c4d995d9bfa082d86ad9ec6d91c4f134827cf5e0a5eb75e0", size = 217292, upload-time = "2026-08-18T08:52:15.47Z" }, ] [[package]] name = "lark" -version = "1.2.2" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, ] [[package]] name = "markdown-it-py" -version = "3.0.0" +version = "4.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, ] [[package]] name = "markupsafe" -version = "3.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/9b/e422a865e1d5d57d0e509b4e0bf1c1a70a7f6382c29a5aa428df994c8bc8/markupsafe-3.0.4.tar.gz", hash = "sha256:2e9ad7dd851bf45fab9f75cbff4cb493fee9979e8d8c7c9c3ee119022518edd6", size = 153777, upload-time = "2026-10-02T23:07:22.29Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/55/18dbb4778b30ada5ce071608503cc3edc9e14e13d868c17a6d178fc30f7a/markupsafe-3.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e25feb9e330b63edb0278a0acdf85e50d0cb0fbf49c3084abbe4e24ae195346", size = 11520, upload-time = "2026-10-02T23:04:36.299Z" }, + { url = "https://files.pythonhosted.org/packages/6c/14/0b05f79b4733e264a18d08fe08fa1df7347630ff32a6cb82180d9dccec55/markupsafe-3.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3391b2188d18737cb2fa147028b1096236eaa7e156446c650a489fa2cadc91", size = 12063, upload-time = "2026-10-02T23:04:37.291Z" }, + { url = "https://files.pythonhosted.org/packages/ca/3a/63ba10b6c1463216b3e4df669a9f0e5a3b0c3071557d2e8229e3968c79fb/markupsafe-3.0.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:849dd2bb0e5e4ab2b71c7191726a4a8d5aa8a610daa584728cbee0b710ddc4ef", size = 24321, upload-time = "2026-10-02T23:04:38.262Z" }, + { url = "https://files.pythonhosted.org/packages/1a/2e/5f015261b76ad633d187ef6f388b413aedd64a8773c4df59e530a0be5525/markupsafe-3.0.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:befb4158af32106b9a93db8d6d1d1cbbd418c0d5aca0cabb7b1780abf0c89169", size = 28845, upload-time = "2026-10-02T23:04:39.295Z" }, + { url = "https://files.pythonhosted.org/packages/33/cf/26e594b26be40c2f1fec63ccf8a8b99d0335a5b2cbe84835c7d82a994375/markupsafe-3.0.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:71f88e749ea29f67f21f3b36433c1dc54c7729ed2a6d9e2da2e0d9e0d7b224eb", size = 24701, upload-time = "2026-10-02T23:04:40.348Z" }, + { url = "https://files.pythonhosted.org/packages/81/a5/a513b76c139a3915b43404324e55c0b7979ae4f0d39eb6f075b0282e90a8/markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6da83a088f8ef93b2d483a8232a4dbf4d69d3d8496b568a03c56becac43e1808", size = 22961, upload-time = "2026-10-02T23:04:41.372Z" }, + { url = "https://files.pythonhosted.org/packages/46/cf/4c66192c100b4542bcbe392ae06696b670f66927be3ac38a213234778ff9/markupsafe-3.0.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8f0fac8b13d14bb06c68195f849371924ae53dd7b1c00fed24650f704383b692", size = 21920, upload-time = "2026-10-02T23:04:42.429Z" }, + { url = "https://files.pythonhosted.org/packages/cb/17/ac3662678bfbad649893117ada2ba44dc30bf56884e84f13154a792b10f1/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4a7cdc2a420ca01058182da4253329764d4bfa055564d1eced90e6ba1e8b1d3d", size = 23726, upload-time = "2026-10-02T23:04:43.531Z" }, + { url = "https://files.pythonhosted.org/packages/f7/af/fe47cee339180a69ebca3c57fb3483d0f5cbd1e8337d1871fb1d9c1aebee/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:83b3944fea42a8400edf92fd1770fb8d0d4f7de651353bd2d8525a92dba69a21", size = 22539, upload-time = "2026-10-02T23:04:44.618Z" }, + { url = "https://files.pythonhosted.org/packages/12/32/d55440ba140442800e02d799c9cb5ab597bf6ebdb1177b5ea39a11f797bd/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8138eb83940ec7299024d92d4dee45f601b9e6c5ffde9d25f4e35e326203c707", size = 23963, upload-time = "2026-10-02T23:04:45.656Z" }, + { url = "https://files.pythonhosted.org/packages/50/9d/9c86042cb364c2ad4c971e6d1247929effd25f714cd7ee11b05e6316445b/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:811d02d5122171c1941357efd8f9bf4ffe907b7f0a1a4e729a880e4be3f46e3e", size = 21506, upload-time = "2026-10-02T23:04:46.671Z" }, + { url = "https://files.pythonhosted.org/packages/75/ef/5b824f03ba40c3b3652b6272d083d2fc4fcdd440de519a3a39ba2c3e7262/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:50b5bedc9ed8a94fc8857a42ef4f84a81ea88f8d4f05dc8705fb23ee6d8dcca7", size = 22955, upload-time = "2026-10-02T23:04:47.698Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e8/44cfcb5ea40e5e43cec7793ef90704ed0c475280839076c4345757eb8e59/markupsafe-3.0.4-cp311-cp311-win32.whl", hash = "sha256:2e5a7cd7fdd14fcb1ae5d7d8bf23d24fbd1daefd1fbca2580132e1ea75f098b5", size = 14094, upload-time = "2026-10-02T23:04:48.788Z" }, + { url = "https://files.pythonhosted.org/packages/91/89/f2b509f7bf79352e40117824c1070dbeafd4df67031d3fa98165a3134228/markupsafe-3.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:fdb4ca07ab75ffadab4a8b135ad59cdbb3156b99310f3d565370da74a15d6bd3", size = 14328, upload-time = "2026-10-02T23:04:49.801Z" }, + { url = "https://files.pythonhosted.org/packages/2b/5a/ccf22672a0f64dc682306e288f0dabcb06c7a201f3bb6e6cbf86d9e8ad03/markupsafe-3.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:569d65055d367e3dcdf30c3f41119467b73d9ee9faf332bdf40402644f5ac08e", size = 14188, upload-time = "2026-10-02T23:04:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/81/09/4c59d56b8461ae8eb0d8ba34bb25b7e618547044679d58a82ef9b2479fc1/markupsafe-3.0.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:61631e08084be9e21a8967ec3139c7616ed7c5e9368e05c86d1b39562c8a57b6", size = 11658, upload-time = "2026-10-02T23:04:51.876Z" }, + { url = "https://files.pythonhosted.org/packages/a2/f0/d6613774d86fbf6d145751d43c59875e47a6f9f17daee0aef173bd36d90e/markupsafe-3.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0930db9bdc62d22944e10b066448bb65dc9abe9112880c7cab8da54db4284d5f", size = 12050, upload-time = "2026-10-02T23:04:52.931Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f2/8f18e0b806eb13c1f8d07d917a720831ead54253a6dec011fbc78098a6f8/markupsafe-3.0.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a45c3d514f2436064db00d7fc8778d888f0236ebfed649b53d13a59e69ad51b", size = 24363, upload-time = "2026-10-02T23:04:53.895Z" }, + { url = "https://files.pythonhosted.org/packages/60/ce/fa07dbe8a5675558fa36dea033e19995bc783de2dec5f540ccb9030b06aa/markupsafe-3.0.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1e1451fab512d1bcc3dc26988ec1edb0b82c2db909132872cd9356070a6b63df", size = 28525, upload-time = "2026-10-02T23:04:54.905Z" }, + { url = "https://files.pythonhosted.org/packages/85/40/be87c01f3868ec217f8a2015089d71c22c8c5a75324822e5ed1cdd87210d/markupsafe-3.0.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bd3ce56ae2cbae3ba82b683bc425cd7e48d2ed8b10f3e818186b6f5646d9271c", size = 24733, upload-time = "2026-10-02T23:04:56.229Z" }, + { url = "https://files.pythonhosted.org/packages/4f/a7/aeedb5140afa41fc74c225e9184ab96723a6e873b6ee1c9fede7283456d8/markupsafe-3.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e124f974786f831d6043728e38296969d3579db8896fe004682f5758e613581", size = 22985, upload-time = "2026-10-02T23:04:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/c3/fc/e91352bb08c6a59da3ef0909d457bf95a5f5908fbf151b30a06d9dbcfbb4/markupsafe-3.0.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c02e8f18bdedba082cef725942ac823b9b60656db07f7e265cb31618dfd00d77", size = 22001, upload-time = "2026-10-02T23:04:58.597Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f8/bffee5e7d2a3deb59748a797650a48af7e672025cf641a79344a771ad106/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9f098115c247e11d138ab83a28fa0323c77015007ea2df73ba5fd714dfefd67c", size = 23793, upload-time = "2026-10-02T23:04:59.686Z" }, + { url = "https://files.pythonhosted.org/packages/ed/59/b853d6628ecb4d658e1d637224846d5e9bb4adf4f8df97f3be9f29dce2ec/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d5f93ebbeb8032d47e349328ec8662d973d9b05a70b3c35df1f91fe419b84749", size = 22640, upload-time = "2026-10-02T23:05:00.768Z" }, + { url = "https://files.pythonhosted.org/packages/09/b2/1506df394f0f075797c418d0301498f49e43be194e3ffcb49e6fe6ccf022/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:64511c54db4e4987aef4c41923235927428729e8174c5dba488429be70a998ed", size = 24074, upload-time = "2026-10-02T23:05:01.813Z" }, + { url = "https://files.pythonhosted.org/packages/c7/81/5ed69cda630ac69ef60d06c09ba5a7f84ff66a2e28cf986fd5614ab3c6e6/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e1a622f13970d81f95d0c72f9dc090dce9085fccfa4c9f2174377ee32bd15786", size = 21563, upload-time = "2026-10-02T23:05:03.239Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fe/fb1e79be0fea60aa32602ebefc9c35a82bb42b4df157285ab7dfec12341a/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9a7f43c0b202b334cc9184af09bb8f21d3a209e038efaf106936fb69e6b026e", size = 23048, upload-time = "2026-10-02T23:05:04.479Z" }, + { url = "https://files.pythonhosted.org/packages/c8/52/7632a53360671a9b750cdbabaf9cdd89f18b42248b8e4cb42c0b0296e459/markupsafe-3.0.4-cp312-cp312-win32.whl", hash = "sha256:f0ec3b750b59375eab5b0fb2b9254810c00a3375be6d789899f1055a1d556237", size = 14108, upload-time = "2026-10-02T23:05:05.513Z" }, + { url = "https://files.pythonhosted.org/packages/3f/bf/62495e180b7000aaf30000fff849e933f74264638057176cf46852500adc/markupsafe-3.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:11935df9bf455ed0c04eb87bcd720f02b1fe5e02128a9430f23aed6f93336fc7", size = 14303, upload-time = "2026-10-02T23:05:06.538Z" }, + { url = "https://files.pythonhosted.org/packages/c5/8e/4c24208776a65878d656996945aacfbfe010d3720d1a98fc0eb8491fc03b/markupsafe-3.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:a4bbd2d87dd233b9fc5812160c3d0ffbe42edc22a26ce0469f58479ede633fe9", size = 14174, upload-time = "2026-10-02T23:05:07.617Z" }, + { url = "https://files.pythonhosted.org/packages/6d/18/4bc5ba32499e87bb2b0ef5b3a9bb9c00a131fa961ddf0be548cb550f548b/markupsafe-3.0.4-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:de8b364c423ef0a4bad9069657d617f9a5d2b2062457a89b1fa16ee199c399c1", size = 12786, upload-time = "2026-10-02T23:05:08.709Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6f/17f0c099bf25f3e31e63cc19244d9f6af861a9a4ab778c203997903cfdd0/markupsafe-3.0.4-cp313-cp313-android_24_x86_64.whl", hash = "sha256:34bdde374c5932765d7dc685c4a1d191a3207852d67e8e0a9eb6ea85156181f1", size = 12510, upload-time = "2026-10-02T23:05:09.93Z" }, + { url = "https://files.pythonhosted.org/packages/11/af/1a141081b905036ee904ec4bd945e1f70b4e1b32d33c4e59e8cf1d58b247/markupsafe-3.0.4-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:6bd9e1788e15bfcf6a9082de42e30387e7b85d211ab21e57a939bb8cfaaf8d96", size = 11583, upload-time = "2026-10-02T23:05:10.884Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0a/a89385ae590232622a03e091805cff12f24fabe6c11e0e8bae096cece81c/markupsafe-3.0.4-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:5066b244f576f91afc8ee3ba029a89f99d39c79b1853fe9d39bea9f0afbec148", size = 11801, upload-time = "2026-10-02T23:05:11.913Z" }, + { url = "https://files.pythonhosted.org/packages/ed/85/ea548dc013962eb73653124bc595635fbf9e0fa41d1f181a967ccb784dfb/markupsafe-3.0.4-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7a83aa6e4805df46fed18e989d3d16f86ef60cb50bbc8d9ce3a6be89165fbf6e", size = 11443, upload-time = "2026-10-02T23:05:12.887Z" }, + { url = "https://files.pythonhosted.org/packages/cc/72/15f2e5ec9cf2eb00d5cdfe968d94e4156a7bd7303832c3f3b2c403a36839/markupsafe-3.0.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2d1b7d9308288661f56672b1b157d75fc536714d3638487bbea17b6318a78248", size = 11665, upload-time = "2026-10-02T23:05:13.829Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e0/4030bea613677e333c8a2c901fd405055f657f9d06acba5b7357984b6ef7/markupsafe-3.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73e77980c7207854f00fc4e71fb1626868d5740ab4012623d55c7a99ad122a72", size = 12061, upload-time = "2026-10-02T23:05:14.807Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a5/28b76a7449eb702966b88bef599e2360b411fbb3afeee8fe560939be06ec/markupsafe-3.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7018d4af1cd272e847aa5917983ab5e83e4f6579f9dbfecd4a79c0ca80b144c2", size = 24395, upload-time = "2026-10-02T23:05:15.909Z" }, + { url = "https://files.pythonhosted.org/packages/07/6c/21232811afc3a063b5e934b1ae2efda52f46154ec382f585149c020e61fe/markupsafe-3.0.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c90d5b3d4e944e065a301d741b3c1d784f6bd1f503aa68b4967e32b2ba313d85", size = 27183, upload-time = "2026-10-02T23:05:16.976Z" }, + { url = "https://files.pythonhosted.org/packages/14/38/6ccdfa5b59049cb36fb80cbc80aee9cf1fc9bb77d1335ad435f2070b08cf/markupsafe-3.0.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:18a801868a884f216e784d7d14db2a4077143ce7610440aee2ce8f734e7cfcde", size = 24772, upload-time = "2026-10-02T23:05:18.209Z" }, + { url = "https://files.pythonhosted.org/packages/63/e0/cec6865dfe88cb48fedd4b20aed6af5158e41092adcbf3e028bcc6ec2108/markupsafe-3.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:434139499bb20b502ed3baa1f169e618f924a97e7a777fea1a49446d80106cf6", size = 23017, upload-time = "2026-10-02T23:05:19.286Z" }, + { url = "https://files.pythonhosted.org/packages/ee/76/6ed4940bb7648a9aac457c14f870cfdd5105f139a0fb1f29cd61fafa47d1/markupsafe-3.0.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9e227f3dbe6bde7491cf0a9965d00b88c6b1a4a95d11480ddf88bb96d397c19f", size = 22036, upload-time = "2026-10-02T23:05:20.352Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4f/ed476226d4fe46a09090a36025bf319296810028df55eb12f1253b540f3a/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b8cd1f918b26fd7b1832ece557cc18f2d8747309ff8b3f0ef9d4250c5ad67a39", size = 23786, upload-time = "2026-10-02T23:05:21.576Z" }, + { url = "https://files.pythonhosted.org/packages/9a/35/66ff30450e35ef5fba9ebc930c9411747e537fd9447b65e44f5007e2b84d/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a5fcffb37e602b0b3c1638a97746b9b96125caa9bcf6fa41d337a9261de231ee", size = 22672, upload-time = "2026-10-02T23:05:22.922Z" }, + { url = "https://files.pythonhosted.org/packages/32/0b/72f45ce4b4efcbca4b80cf1b06703eff0be8d37e82abb78f66c85a7ead1e/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5989cb26b2e1efc6a42216a9f6b5ee495ce5ace2e5b352a9af489976b32d1ee2", size = 24107, upload-time = "2026-10-02T23:05:24.175Z" }, + { url = "https://files.pythonhosted.org/packages/d2/03/71776e5fdcba04614b384cc102e8a4198208579d896fd1394cb7cb9aa900/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:add96447a86d205ab616665d53b2950ee81083757f56e6ea833c8b2917646b46", size = 21615, upload-time = "2026-10-02T23:05:25.215Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/801ce02a02e7aee0f784b1ec7843026178f6adeb9c93ac67eb1992a9a84d/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2628d3a8cb648ecebb3c5d6b0a1052d400e4d8b7ac0fb786be8d285b50040d17", size = 23076, upload-time = "2026-10-02T23:05:26.423Z" }, + { url = "https://files.pythonhosted.org/packages/4a/85/c43776625428f3bb4a61e8633940400e3efe6409e3c6f5bff26de5e45618/markupsafe-3.0.4-cp313-cp313-win32.whl", hash = "sha256:672d207103e6b16ca098611b0f9efad6bc00afd47c03d6ef62186495ca677dc0", size = 14118, upload-time = "2026-10-02T23:05:27.716Z" }, + { url = "https://files.pythonhosted.org/packages/6f/36/163da64de88a13db79214ef75fa041be7fa13bdb42261cf5b7484de14bfb/markupsafe-3.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:1f1f9477e174582b0a1b583d60b66e1f2cf5d3fe12cee985e4aedf44766600e5", size = 14313, upload-time = "2026-10-02T23:05:28.749Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a8/9b662783ffaa1149221432a923cee562f78b9cbbb8baa3df9b3753e63e1e/markupsafe-3.0.4-cp313-cp313-win_arm64.whl", hash = "sha256:06de8ef6331f6e822c28d577dc8bf43fe398800477c49498f38fc38b67ff33fc", size = 14189, upload-time = "2026-10-02T23:05:29.917Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c3/a944f3b0df22bd129e96915b9f4e98d2eeca6516687d7618304a966c3c74/markupsafe-3.0.4-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:4ed644d75aa94a2baf7ec3a96eaa160ea58c742eb9d27c6506053c5c40fc84ed", size = 12787, upload-time = "2026-10-02T23:05:30.971Z" }, + { url = "https://files.pythonhosted.org/packages/d4/d6/a44863f69d88b6c7e27889108f70d47aed259edf89d5df3c5fca1eac87d6/markupsafe-3.0.4-cp314-cp314-android_24_x86_64.whl", hash = "sha256:6d2a9efe686f9de00d0d1ea32a4a5a86d558a2277501bd78d964214eab625e59", size = 12525, upload-time = "2026-10-02T23:05:32.263Z" }, + { url = "https://files.pythonhosted.org/packages/17/8f/168ba80e532dd6a93f96f8f706f1ad41d7990b6e1aeedc1cc0d211a33497/markupsafe-3.0.4-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8781a792a070cf2bd1b86d3aa943894115faaba6e88122a7bf32d62072742453", size = 11589, upload-time = "2026-10-02T23:05:33.251Z" }, + { url = "https://files.pythonhosted.org/packages/32/b3/aa2c95a574d3af39403a469b295886eb9b6d448da568cbebb5a2cbfdc2e5/markupsafe-3.0.4-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:971a3bbb75d97ae4e2e8f7d4834236f86f85f0c85e04ab2e191db1123b04f80b", size = 11801, upload-time = "2026-10-02T23:05:34.315Z" }, + { url = "https://files.pythonhosted.org/packages/60/d0/34b810107d83840e768bf485de795893ebbae35b26ab061b487adfa0a692/markupsafe-3.0.4-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:8909c2f1c6dd65e054ac4b573a91c8384d1492281e55d82d159d653f7a13adf6", size = 11447, upload-time = "2026-10-02T23:05:35.302Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ab/2f8488f0f817a39fca068d2b17daf446bf5cdb3eae28c3720af534d873b4/markupsafe-3.0.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4cf3468d5ec187ffffcaca8e61929a37448f215dafc1386a12c750a72fe53634", size = 11722, upload-time = "2026-10-02T23:05:36.363Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/e2d117b048d47282ade906fbfd92814cbee5647afc13fda88a3406039372/markupsafe-3.0.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:52704c5d36eb6dda8866493decd61111fff86244c9b1ad225ca01b9e91e5970f", size = 12061, upload-time = "2026-10-02T23:05:37.397Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a8/73a81135e85ba66217f5af7facb03bbb386807e1a729ab64532e4c802652/markupsafe-3.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1caa2fa5a6184fb233153b35f654e6687bd555476f6170f29d8ee9be1a8b0af9", size = 24434, upload-time = "2026-10-02T23:05:38.407Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ca/fa9216dd01efee2dfdacafe7df32b4d0170fbac694b0c258a193d6e53999/markupsafe-3.0.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:387d8cd30e69b3f0a72877b9ae717033396404e19095b17fe89753a981fda44f", size = 27183, upload-time = "2026-10-02T23:05:39.581Z" }, + { url = "https://files.pythonhosted.org/packages/fa/4e/a469509e538d37af51103b17b073126973f2b1cbf197ff32c7ddf025cfe5/markupsafe-3.0.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:051417f74bcaaefa316276e0ff723f541616ca51043d070da00249d9bddd3e3c", size = 24813, upload-time = "2026-10-02T23:05:40.671Z" }, + { url = "https://files.pythonhosted.org/packages/8f/db/d7282caf7ab03af44d5d6fdbaa019b35c7d7f1c90588b839c07cba640d6a/markupsafe-3.0.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8e9f292fcda89b324f2f5c91d13f1424a153e40fc2756f38ee23b15835ff300", size = 23049, upload-time = "2026-10-02T23:05:41.864Z" }, + { url = "https://files.pythonhosted.org/packages/30/f3/b6a425206e6964efda6acee544d0eb01d1501784d0b8e2dcc74986f33b17/markupsafe-3.0.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:df1ae86ff54725a01fa1a0510b914ca53a161b7050be74f6204e24aded5971d0", size = 22088, upload-time = "2026-10-02T23:05:43.014Z" }, + { url = "https://files.pythonhosted.org/packages/ea/8a/84d3582fc1f0d5bd466cdf2eebf175e172158a6e70701aacec1de1b35430/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8965520ac587c94a4ac48b729be3d8b8de00af39699b17585dfb599babe77977", size = 23846, upload-time = "2026-10-02T23:05:44.098Z" }, + { url = "https://files.pythonhosted.org/packages/1c/65/db101cce51b7ba4864ac491a9859d297dd1adf0e55b103fee9db9c47c527/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:340cbb1957ba99929cbf19a75626d36ba1ae21d1730b287d1cf7f824a20c4fc7", size = 22674, upload-time = "2026-10-02T23:05:45.23Z" }, + { url = "https://files.pythonhosted.org/packages/e0/49/ddee9813d71db0c7a5c9d97c832125e6758a0c844777f1cf076569bb0e22/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:3a93d9616ddecfb393727a0041a562cf0b15a244e20f2bd25efc7949be4c4f17", size = 24104, upload-time = "2026-10-02T23:05:46.398Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0e/7d8518d726726870a2399d69fd30d0fa36c5e57a2132c336b58d7c491073/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d2e56fd3b00222722abfb3f5f0759ddbae4b90811b5ad4343c64030ad1bde70c", size = 21637, upload-time = "2026-10-02T23:05:47.48Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b0/b505e8a361ba557dbf3b3aa7331ea39b00d2022a26e925ff8463b9714bb3/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0d9c47709875fdb321452056622e930c52afbc07a7d780762fbb8b4d91ce6fa4", size = 23081, upload-time = "2026-10-02T23:05:48.611Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ea/9cc3cea873f980c75cbdb6f4277ce30ee955de38be0b3d02f14c108e0698/markupsafe-3.0.4-cp314-cp314-win32.whl", hash = "sha256:38fc55594dab834470b6733dead2ee9e3f657fb0608c769dcafa0ba5ab52f45c", size = 14272, upload-time = "2026-10-02T23:05:49.707Z" }, + { url = "https://files.pythonhosted.org/packages/80/f0/5792ff768a410f93ee3f84fc19345295ffc352d2c936b424cb37e514714c/markupsafe-3.0.4-cp314-cp314-win_amd64.whl", hash = "sha256:c1bc67752d5f21013cfe430df4062441714eab79f65a6a05e01505957e9c35fe", size = 14501, upload-time = "2026-10-02T23:05:50.788Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cf/3d074a8edffcc6899355232ff2543ae8d929733239596423b7db79698bc9/markupsafe-3.0.4-cp314-cp314-win_arm64.whl", hash = "sha256:7e1636da3d8dfc220b6dd10264db5f2b165e4888c4518594898fbe381049af8a", size = 14364, upload-time = "2026-10-02T23:05:51.857Z" }, + { url = "https://files.pythonhosted.org/packages/d9/31/87ce42159aae2163cf3bbbd0c44bc87780510eecab1ea3859099aed95dcb/markupsafe-3.0.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:805c8b84534fa10891890f0e4be39f3a99e94615d93e8836bf9fa1fdca2feeb2", size = 11759, upload-time = "2026-10-02T23:05:52.951Z" }, + { url = "https://files.pythonhosted.org/packages/5f/53/b047207eeb7752e960aca3eb1df5fb7eefa7dd4c62ac49bb156456c8a702/markupsafe-3.0.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fa95848c929b6a75f6848d3c9793e59db365ee436776e57db835cdbfa79ba977", size = 12096, upload-time = "2026-10-02T23:05:54.066Z" }, + { url = "https://files.pythonhosted.org/packages/ee/51/4326c88a13c7b755657d44b4bb986f8c3d9843ecba7e22d98661d87f9a57/markupsafe-3.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e916035e3e9930cbdfdd10abf48861340221857f45509565898e012263f7b289", size = 25699, upload-time = "2026-10-02T23:05:55.15Z" }, + { url = "https://files.pythonhosted.org/packages/f2/bb/990581b7474bfcf2cf34bed6ba5ea23bd87adb9d671213d68e88620e7a6b/markupsafe-3.0.4-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b4d12837e0203bbace818ff4a7461afdcd78bcd782351cea148139180d7bcffe", size = 27804, upload-time = "2026-10-02T23:05:56.29Z" }, + { url = "https://files.pythonhosted.org/packages/6b/89/89491878c28e8291f5aa2fffe2c2d57230d10ae366d55dd810b840513d78/markupsafe-3.0.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5086f9975abb1ab531ee6afca1761e4b59a19b446f3f6522ed776963228cfe5a", size = 25912, upload-time = "2026-10-02T23:05:57.416Z" }, + { url = "https://files.pythonhosted.org/packages/30/77/680998b54efdea06fc114565cd739b6d059f826a0279219b218dfa750d29/markupsafe-3.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b4a635a0487774f841cb1fb62e907e7195cc95bc761e053184b8acc3ceb20733", size = 23623, upload-time = "2026-10-02T23:05:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/ae/75/2709f5ac5de9467b40b10e2bb8f89cc63dfb74582e09aa734b1124a217de/markupsafe-3.0.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb96e6e088d6cf71c1ea977510948320234824cf226e32f6f6e044f7a9c82b34", size = 23301, upload-time = "2026-10-02T23:05:59.94Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c8/39eadc6c5b14c9c7679bfb98f4d4c6a97863b5beb91839aca4d2d6e16e55/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8b5d563170ff8ba3181caa967c99a3c804d1dedb702c7cb93a6a7c32247da978", size = 24950, upload-time = "2026-10-02T23:06:01.289Z" }, + { url = "https://files.pythonhosted.org/packages/1a/5e/01037f8a43e8ccb0bffb4fbdc5212db05bf080fdd7286cd392332d58128a/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:396ec4e65cc889f69786b3b89478b471cee5a3bcf468b9d9bb03e1a30fb291fc", size = 23330, upload-time = "2026-10-02T23:06:02.441Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f4/23e83ce0596bb0cbe670502d31df8f757bbd01a392aa486fa3b40d1ed399/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:15ba9e28640feef770374b116a6f019c21f52404aeabe516aa7f800587b98cfc", size = 25239, upload-time = "2026-10-02T23:06:03.579Z" }, + { url = "https://files.pythonhosted.org/packages/88/5b/3708897368073cc683d524750474f41a77d2986152c380dcc55b20fdf340/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d920abdfa61279ba1a2ef9484aab07bf03331f8c08a10120fa332353d06e6932", size = 22767, upload-time = "2026-10-02T23:06:04.699Z" }, + { url = "https://files.pythonhosted.org/packages/c6/61/ebda1307864b409e6b3115757a3d4a09cca46cfb6cc65191b5de226b424b/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a9f54054101545a9a9cccefddf54316aa6e4491611fcbef9e91b3b6bebec04f6", size = 23668, upload-time = "2026-10-02T23:06:05.9Z" }, + { url = "https://files.pythonhosted.org/packages/09/15/98075cceac3b5ba0dbb8e4762a847be967d2befc349a2cf2d0ac77f62c9d/markupsafe-3.0.4-cp314-cp314t-win32.whl", hash = "sha256:12a606a492de952afcb43b59a14aaaaad120e708d3663dd0fdf2d738d427a691", size = 14301, upload-time = "2026-10-02T23:06:07.109Z" }, + { url = "https://files.pythonhosted.org/packages/0b/a3/768b560fcc4156685cb563d922b217810cfa7bc135773367f62f1f9d2078/markupsafe-3.0.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a18f38cafc329bac5e3c2b96c765b4c96d3d103421ed22ab7988c1e3fce27464", size = 14526, upload-time = "2026-10-02T23:06:08.276Z" }, + { url = "https://files.pythonhosted.org/packages/93/63/da554b4c97a6b0ea3229ca7fe8cbfb620be81613d517f482e85958550537/markupsafe-3.0.4-cp314-cp314t-win_arm64.whl", hash = "sha256:eba154571c16e032112afac0dc2dfe9e63c2ceb7aedd07bb7eecf2ce26d4dd4c", size = 14421, upload-time = "2026-10-02T23:06:09.402Z" }, + { url = "https://files.pythonhosted.org/packages/a9/30/54d11c8ca027114898cab97421fb39e4ffd9ddf47cdbc44df2ec76722da9/markupsafe-3.0.4-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:737c9c3981998eba27f11786f84fddcbabc74068b72a4a1f454ea02094b57b65", size = 12791, upload-time = "2026-10-02T23:06:10.485Z" }, + { url = "https://files.pythonhosted.org/packages/10/6d/97c913e253a14bd3cd0e15a5c56d13203b823fa7ee32498342896a072dc4/markupsafe-3.0.4-cp315-cp315-android_24_x86_64.whl", hash = "sha256:489505b03f692c3f376394e49194fa7a7f9e8558d6e293a7056a0032b0c38163", size = 12527, upload-time = "2026-10-02T23:06:11.834Z" }, + { url = "https://files.pythonhosted.org/packages/26/f9/b86d032042a4d597d9e1997f0e5f63a3eedaf11258e0a05760b0a0a826ea/markupsafe-3.0.4-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:077293e425f28ec737dbcad442a71752e28f8ae27cde3d68acd1fb212091cd92", size = 11602, upload-time = "2026-10-02T23:06:13.122Z" }, + { url = "https://files.pythonhosted.org/packages/f2/dc/73c14c1eedf0ac5fa3292ba43435e6c49d2c2050f33cebde541f8f4807f1/markupsafe-3.0.4-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9348cbb300d224fe3b89793262cb093504d4ae927004468463f745188a193e4a", size = 11817, upload-time = "2026-10-02T23:06:14.227Z" }, + { url = "https://files.pythonhosted.org/packages/8f/69/2c2fcaa5fcee22d72c7819c0d536fd181c74a688e6143845419579cd2863/markupsafe-3.0.4-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:b807e598953730f82e4eae3bd30f6a122cf6b31c398c6b504c0e04c13c170429", size = 11446, upload-time = "2026-10-02T23:06:15.574Z" }, + { url = "https://files.pythonhosted.org/packages/88/54/9e5ec76c62e6e2834d5a93623018c943e8b3bb41d663e3fd4c03303b9b85/markupsafe-3.0.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:799c39bdf5e2f1292fedd3009f7b3c9e760f10b2420cb9638d56920840ff6db8", size = 11719, upload-time = "2026-10-02T23:06:16.701Z" }, + { url = "https://files.pythonhosted.org/packages/96/24/3ec292b44064c16229e064d770b2625bd8ea941aa61f44905a9fa44942c0/markupsafe-3.0.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:ae9dcb8fbe244cb82f8a6458b455b927a03685e383d9bacf1ea5ce180b96dc97", size = 12075, upload-time = "2026-10-02T23:06:17.855Z" }, + { url = "https://files.pythonhosted.org/packages/aa/85/b64fdb1f304848518742136983c24e96d967bfb59a0ea160e92736901ab0/markupsafe-3.0.4-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bced6e2a6dba6a28f7dd3c6ce14df1b2dd495923f16ea484cad03decd463b2b", size = 24656, upload-time = "2026-10-02T23:06:18.963Z" }, + { url = "https://files.pythonhosted.org/packages/9c/18/23997d4c65b355da6390d61cd56e0ab3befd6ba8dda25cb40c602bd0fa6b/markupsafe-3.0.4-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3882fb412298575bae3b9c46868251f15cc69307359f87bb1b382e53d6e5a2c9", size = 27737, upload-time = "2026-10-02T23:06:20.117Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/35998dead3c6af88c38265a56e58100211f036234ab88eb2283fd4cbce44/markupsafe-3.0.4-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04e7902ba80ee4bac1d50a549606527a1dcf0476cd81403db41099d3b60ec653", size = 25003, upload-time = "2026-10-02T23:06:21.284Z" }, + { url = "https://files.pythonhosted.org/packages/82/96/ef49135ce260db4ca4a12b119ed468449cd248db6b1468e2112b546d7a2e/markupsafe-3.0.4-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:925f929d6b59a8b3f8b8c6ac363cd0af7eecc81efb3071770b3c6717c450a369", size = 23111, upload-time = "2026-10-02T23:06:22.524Z" }, + { url = "https://files.pythonhosted.org/packages/50/7d/83126e338bd88c17a220668235368ad719fd4638e426739858cbb8508f77/markupsafe-3.0.4-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f68edfc67aabac33708941f26f22a7b8e9f81429bc0cf249fcf7d66b23af8d19", size = 22403, upload-time = "2026-10-02T23:06:23.785Z" }, + { url = "https://files.pythonhosted.org/packages/83/dd/daf7e420de23c8206c365204e7b85e1251d8e19d34196a56336f316e5ed2/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:e5c802729725bd07e2bc3ab7b76dc7e0bbfc53129d8f1eb1c002c24cf774717e", size = 24083, upload-time = "2026-10-02T23:06:25.037Z" }, + { url = "https://files.pythonhosted.org/packages/19/3c/11eecdc06bc44ad5570350085b572ebf049e8f9a38d1ece6d76640b739cd/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:55ffd6ce583d97dc71dc92e930324c8c0d25aea7e3ade6ae54ef77cedb096811", size = 22931, upload-time = "2026-10-02T23:06:26.328Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9e/ac0fd77f2a726e56ecc3ca0235d095feace1358d1b822406c2a2ef26a4dc/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:2cb3dd71fc6be918ad4264346a8ed69485f9b7ed7bf35495d8e22807cd6b8bea", size = 24299, upload-time = "2026-10-02T23:06:27.742Z" }, + { url = "https://files.pythonhosted.org/packages/d7/09/c6bd842ad58ff5b3bc76eeed7e9a42a6f11adc5d090ec697b72c9672731e/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:94f5407f7bc64fa6463906b896f9904beeeb7dd8dc116ee8e9056c8714ff9916", size = 21948, upload-time = "2026-10-02T23:06:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/a3/46/82f586711fed61e86faa1ee1bc317d68cd45a10c8bdbe3f7d1fdf9026ad8/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2dad610540cb2e6272855c178f08ae9a1c7ac258a7fb71660553a5f104b42741", size = 23150, upload-time = "2026-10-02T23:06:30.583Z" }, + { url = "https://files.pythonhosted.org/packages/19/2d/2dfdce99318abbfa26925195fbc17db188c46a1ec6457be121b6f9cfeb42/markupsafe-3.0.4-cp315-cp315-win32.whl", hash = "sha256:03470d1a8268e692ecf79ecd565593e59d44219377a7ead61f1f1b94c1f7ff6b", size = 14269, upload-time = "2026-10-02T23:06:31.949Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ec/6000fd82e8791e58fcd0456ec20f098957e2b03d5ed02eb73241a577c0ba/markupsafe-3.0.4-cp315-cp315-win_amd64.whl", hash = "sha256:d882a373d8093c2941e01291b7ced96e9cbe4781da9a7751ca7e6c70385e5214", size = 14496, upload-time = "2026-10-02T23:06:33.258Z" }, + { url = "https://files.pythonhosted.org/packages/bc/66/e73bd5016421d5d6e2fb6de7dd609f9de020942ac8c626526bd8c6eeaf82/markupsafe-3.0.4-cp315-cp315-win_arm64.whl", hash = "sha256:353bd63081912ab8cfa6a0c7d185934cdf8426f04c618bba6bc4b394f2069b67", size = 14361, upload-time = "2026-10-02T23:06:34.539Z" }, + { url = "https://files.pythonhosted.org/packages/90/df/cb8c3dc98d313a951df2f8968f44e4cb5643df6d3cab749a530ce2f7d972/markupsafe-3.0.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c61750fadcd119d0825bcb7d7d675dd264dcc89cc05292aab5be68ebdbb374ad", size = 11760, upload-time = "2026-10-02T23:06:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/d6/bb/4af9b3ca0753d654ac75f9531d5bd741bb77ca6e696f36807c475ffc099a/markupsafe-3.0.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:1c0df495a977d10460a94941799c72d5b5ab03d3858d949b55b5a66c8f371c99", size = 12108, upload-time = "2026-10-02T23:06:37.089Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d4/b56429313aee5fd59b079c3df5615299959e25e7113eb6d8caadbdd7d38a/markupsafe-3.0.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02fa4acbc6a3fc5c693c34d4dd8c1130b7fe99cc915181b0ddd6f72aeb296002", size = 25762, upload-time = "2026-10-02T23:06:38.419Z" }, + { url = "https://files.pythonhosted.org/packages/65/f5/34c181e891aa4f7d59c918584672e0c5eb7fffe76c1387d1246008bf4081/markupsafe-3.0.4-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:05295589e619b9bed252a86b532b8e27350abc372d18ba89b59375325e91ec1e", size = 28400, upload-time = "2026-10-02T23:06:39.819Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b5/ad14694fd0ac9a5ce30bc6498f2999378f418583dd1679cca5a1b512957e/markupsafe-3.0.4-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:be6cb0c799abb0e2ba3e618e6d28ddddf7e485f6c2ce938dfa237daf3905072c", size = 25946, upload-time = "2026-10-02T23:06:41.381Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a8/26b606445387d0ceb1eb1f21840094b84e4e3c3c3983d80d10b89823b490/markupsafe-3.0.4-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26e9867520db70d37f7fb421a7f0d8adb40171011fb84ce869afa1a83370dfa8", size = 23634, upload-time = "2026-10-02T23:06:42.748Z" }, + { url = "https://files.pythonhosted.org/packages/39/a2/b8814de672f1f0094d498bf646f2fec9d6356b503d28ef500b71c5095377/markupsafe-3.0.4-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f03460ff076f70ab595bb45a0205ccea1971443575b6920c52e755dec2b3fbfe", size = 23488, upload-time = "2026-10-02T23:06:44.176Z" }, + { url = "https://files.pythonhosted.org/packages/db/c7/287223376fb73335a3cc5d6eb22c6ab01358cf33945a9c39c06b9dac3f4b/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:436e3ffc6310d3c41878c601db29098102fe5d8a467c49da4a4125254e0980f2", size = 25037, upload-time = "2026-10-02T23:06:45.646Z" }, + { url = "https://files.pythonhosted.org/packages/f9/29/4df8355e313426d19e62ba33e0253c009ca12a0894ee77d67fa67255361c/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:4e2c4809c14559aa7ef426f27fb35afbb38104c349a903bf8f3600456764bb38", size = 23543, upload-time = "2026-10-02T23:06:47.264Z" }, + { url = "https://files.pythonhosted.org/packages/71/e5/8377731e8495668dcc768f645e717df18318c841edaf023a99395f6da9b4/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:da2af0d7aebfc2074080d72efa6ab8317c62481ef1f896f65d9999c1c01f4494", size = 25282, upload-time = "2026-10-02T23:06:48.795Z" }, + { url = "https://files.pythonhosted.org/packages/ed/5f/373456e37ceb1478d657d6fe769cbe0a39f0a8dfc1548eeb19c471eefdd9/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:aa2c838cc024642cc04c6854232f32b43e5e22833dd11119c1766c7873b8370d", size = 22993, upload-time = "2026-10-02T23:06:50.31Z" }, + { url = "https://files.pythonhosted.org/packages/d7/93/2cbd5628435afb6f541bbaced4bce0c2edac4b09a142e6e928b8b0da9858/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b91cc9d336957239ff200f30097e6fea2dc6d6fb3c81e853eaa09eac904fd894", size = 23712, upload-time = "2026-10-02T23:06:51.759Z" }, + { url = "https://files.pythonhosted.org/packages/81/99/157e10966b033b363aeda5263e82596ee232a0b1d082fdbf90aa417ff083/markupsafe-3.0.4-cp315-cp315t-win32.whl", hash = "sha256:e49fb0d1ce92cfa0cb198cc5b1b11cdf9d0638658e2a2db2687e39db7c87fc78", size = 14300, upload-time = "2026-10-02T23:06:53.241Z" }, + { url = "https://files.pythonhosted.org/packages/33/05/55884815414c9706a23deca150b72c25a62109e65b0b6ce232077802c719/markupsafe-3.0.4-cp315-cp315t-win_amd64.whl", hash = "sha256:4f6e0852a0283b1b1fd776eeb7b766a5f440b3e2bd31ab51af3b400585f3965c", size = 14522, upload-time = "2026-10-02T23:06:54.729Z" }, + { url = "https://files.pythonhosted.org/packages/92/f9/ecbde7149e95b8a0f18e16d5d747f7dc06049d5da2e4f77f6f5e4a1f46a8/markupsafe-3.0.4-cp315-cp315t-win_arm64.whl", hash = "sha256:39dbacefc411633db5b4378b066a9aca70a3d7e2922c9e578d825f844026eeba", size = 14417, upload-time = "2026-10-02T23:06:56.246Z" }, ] [[package]] name = "matplotlib-inline" -version = "0.1.7" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, ] [[package]] @@ -1166,49 +1542,99 @@ wheels = [ [[package]] name = "mistune" -version = "3.1.3" +version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload-time = "2025-03-19T14:27:24.955Z" } +sdist = { url = "https://files.pythonhosted.org/packages/96/eb/749a4e69bf7396e751ae37444abe997eff2254e695a8095b84d1c89c1181/mistune-3.4.0.tar.gz", hash = "sha256:2eaf7952af928ca8d33b779762effc1da517b62c6ad85ec8ca957e3b07b9782a", size = 136772, upload-time = "2026-10-19T10:44:28.172Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload-time = "2025-03-19T14:27:23.451Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f7/021d590d52c1ac28e3290311776854c6a1c927fa3fb4b25ce74caf937a3d/mistune-3.4.0-py3-none-any.whl", hash = "sha256:d03cec4c8620f21517a996d82d14f3b59c30d79bda2cc6c56bd32b839f18ce6b", size = 70398, upload-time = "2026-10-19T10:44:26.751Z" }, ] [[package]] name = "msgpack" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/b1/ea4f68038a18c77c9467400d166d74c4ffa536f34761f7983a104357e614/msgpack-1.1.1.tar.gz", hash = "sha256:77b79ce34a2bdab2594f490c8e80dd62a02d650b91a75159a63ec413b8d104cd", size = 173555, upload-time = "2025-06-13T06:52:51.324Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/83/97f24bf9848af23fe2ba04380388216defc49a8af6da0c28cc636d722502/msgpack-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71ef05c1726884e44f8b1d1773604ab5d4d17729d8491403a705e649116c9558", size = 82728, upload-time = "2025-06-13T06:51:50.68Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7f/2eaa388267a78401f6e182662b08a588ef4f3de6f0eab1ec09736a7aaa2b/msgpack-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36043272c6aede309d29d56851f8841ba907a1a3d04435e43e8a19928e243c1d", size = 79279, upload-time = "2025-06-13T06:51:51.72Z" }, - { url = "https://files.pythonhosted.org/packages/f8/46/31eb60f4452c96161e4dfd26dbca562b4ec68c72e4ad07d9566d7ea35e8a/msgpack-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a32747b1b39c3ac27d0670122b57e6e57f28eefb725e0b625618d1b59bf9d1e0", size = 423859, upload-time = "2025-06-13T06:51:52.749Z" }, - { url = "https://files.pythonhosted.org/packages/45/16/a20fa8c32825cc7ae8457fab45670c7a8996d7746ce80ce41cc51e3b2bd7/msgpack-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a8b10fdb84a43e50d38057b06901ec9da52baac6983d3f709d8507f3889d43f", size = 429975, upload-time = "2025-06-13T06:51:53.97Z" }, - { url = "https://files.pythonhosted.org/packages/86/ea/6c958e07692367feeb1a1594d35e22b62f7f476f3c568b002a5ea09d443d/msgpack-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0c325c3f485dc54ec298d8b024e134acf07c10d494ffa24373bea729acf704", size = 413528, upload-time = "2025-06-13T06:51:55.507Z" }, - { url = "https://files.pythonhosted.org/packages/75/05/ac84063c5dae79722bda9f68b878dc31fc3059adb8633c79f1e82c2cd946/msgpack-1.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:88daaf7d146e48ec71212ce21109b66e06a98e5e44dca47d853cbfe171d6c8d2", size = 413338, upload-time = "2025-06-13T06:51:57.023Z" }, - { url = "https://files.pythonhosted.org/packages/69/e8/fe86b082c781d3e1c09ca0f4dacd457ede60a13119b6ce939efe2ea77b76/msgpack-1.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8b55ea20dc59b181d3f47103f113e6f28a5e1c89fd5b67b9140edb442ab67f2", size = 422658, upload-time = "2025-06-13T06:51:58.419Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2b/bafc9924df52d8f3bb7c00d24e57be477f4d0f967c0a31ef5e2225e035c7/msgpack-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a28e8072ae9779f20427af07f53bbb8b4aa81151054e882aee333b158da8752", size = 427124, upload-time = "2025-06-13T06:51:59.969Z" }, - { url = "https://files.pythonhosted.org/packages/a2/3b/1f717e17e53e0ed0b68fa59e9188f3f610c79d7151f0e52ff3cd8eb6b2dc/msgpack-1.1.1-cp311-cp311-win32.whl", hash = "sha256:7da8831f9a0fdb526621ba09a281fadc58ea12701bc709e7b8cbc362feabc295", size = 65016, upload-time = "2025-06-13T06:52:01.294Z" }, - { url = "https://files.pythonhosted.org/packages/48/45/9d1780768d3b249accecc5a38c725eb1e203d44a191f7b7ff1941f7df60c/msgpack-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fd1b58e1431008a57247d6e7cc4faa41c3607e8e7d4aaf81f7c29ea013cb458", size = 72267, upload-time = "2025-06-13T06:52:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/e3/26/389b9c593eda2b8551b2e7126ad3a06af6f9b44274eb3a4f054d48ff7e47/msgpack-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae497b11f4c21558d95de9f64fff7053544f4d1a17731c866143ed6bb4591238", size = 82359, upload-time = "2025-06-13T06:52:03.909Z" }, - { url = "https://files.pythonhosted.org/packages/ab/65/7d1de38c8a22cf8b1551469159d4b6cf49be2126adc2482de50976084d78/msgpack-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:33be9ab121df9b6b461ff91baac6f2731f83d9b27ed948c5b9d1978ae28bf157", size = 79172, upload-time = "2025-06-13T06:52:05.246Z" }, - { url = "https://files.pythonhosted.org/packages/0f/bd/cacf208b64d9577a62c74b677e1ada005caa9b69a05a599889d6fc2ab20a/msgpack-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f64ae8fe7ffba251fecb8408540c34ee9df1c26674c50c4544d72dbf792e5ce", size = 425013, upload-time = "2025-06-13T06:52:06.341Z" }, - { url = "https://files.pythonhosted.org/packages/4d/ec/fd869e2567cc9c01278a736cfd1697941ba0d4b81a43e0aa2e8d71dab208/msgpack-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a494554874691720ba5891c9b0b39474ba43ffb1aaf32a5dac874effb1619e1a", size = 426905, upload-time = "2025-06-13T06:52:07.501Z" }, - { url = "https://files.pythonhosted.org/packages/55/2a/35860f33229075bce803a5593d046d8b489d7ba2fc85701e714fc1aaf898/msgpack-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb643284ab0ed26f6957d969fe0dd8bb17beb567beb8998140b5e38a90974f6c", size = 407336, upload-time = "2025-06-13T06:52:09.047Z" }, - { url = "https://files.pythonhosted.org/packages/8c/16/69ed8f3ada150bf92745fb4921bd621fd2cdf5a42e25eb50bcc57a5328f0/msgpack-1.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d275a9e3c81b1093c060c3837e580c37f47c51eca031f7b5fb76f7b8470f5f9b", size = 409485, upload-time = "2025-06-13T06:52:10.382Z" }, - { url = "https://files.pythonhosted.org/packages/c6/b6/0c398039e4c6d0b2e37c61d7e0e9d13439f91f780686deb8ee64ecf1ae71/msgpack-1.1.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fd6b577e4541676e0cc9ddc1709d25014d3ad9a66caa19962c4f5de30fc09ef", size = 412182, upload-time = "2025-06-13T06:52:11.644Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d0/0cf4a6ecb9bc960d624c93effaeaae75cbf00b3bc4a54f35c8507273cda1/msgpack-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb29aaa613c0a1c40d1af111abf025f1732cab333f96f285d6a93b934738a68a", size = 419883, upload-time = "2025-06-13T06:52:12.806Z" }, - { url = "https://files.pythonhosted.org/packages/62/83/9697c211720fa71a2dfb632cad6196a8af3abea56eece220fde4674dc44b/msgpack-1.1.1-cp312-cp312-win32.whl", hash = "sha256:870b9a626280c86cff9c576ec0d9cbcc54a1e5ebda9cd26dab12baf41fee218c", size = 65406, upload-time = "2025-06-13T06:52:14.271Z" }, - { url = "https://files.pythonhosted.org/packages/c0/23/0abb886e80eab08f5e8c485d6f13924028602829f63b8f5fa25a06636628/msgpack-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:5692095123007180dca3e788bb4c399cc26626da51629a31d40207cb262e67f4", size = 72558, upload-time = "2025-06-13T06:52:15.252Z" }, - { url = "https://files.pythonhosted.org/packages/a1/38/561f01cf3577430b59b340b51329803d3a5bf6a45864a55f4ef308ac11e3/msgpack-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3765afa6bd4832fc11c3749be4ba4b69a0e8d7b728f78e68120a157a4c5d41f0", size = 81677, upload-time = "2025-06-13T06:52:16.64Z" }, - { url = "https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9", size = 78603, upload-time = "2025-06-13T06:52:17.843Z" }, - { url = "https://files.pythonhosted.org/packages/a0/60/daba2699b308e95ae792cdc2ef092a38eb5ee422f9d2fbd4101526d8a210/msgpack-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196a736f0526a03653d829d7d4c5500a97eea3648aebfd4b6743875f28aa2af8", size = 420504, upload-time = "2025-06-13T06:52:18.982Z" }, - { url = "https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a", size = 423749, upload-time = "2025-06-13T06:52:20.211Z" }, - { url = "https://files.pythonhosted.org/packages/40/1b/54c08dd5452427e1179a40b4b607e37e2664bca1c790c60c442c8e972e47/msgpack-1.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4df2311b0ce24f06ba253fda361f938dfecd7b961576f9be3f3fbd60e87130ac", size = 404458, upload-time = "2025-06-13T06:52:21.429Z" }, - { url = "https://files.pythonhosted.org/packages/2e/60/6bb17e9ffb080616a51f09928fdd5cac1353c9becc6c4a8abd4e57269a16/msgpack-1.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e4141c5a32b5e37905b5940aacbc59739f036930367d7acce7a64e4dec1f5e0b", size = 405976, upload-time = "2025-06-13T06:52:22.995Z" }, - { url = "https://files.pythonhosted.org/packages/ee/97/88983e266572e8707c1f4b99c8fd04f9eb97b43f2db40e3172d87d8642db/msgpack-1.1.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1ce7f41670c5a69e1389420436f41385b1aa2504c3b0c30620764b15dded2e7", size = 408607, upload-time = "2025-06-13T06:52:24.152Z" }, - { url = "https://files.pythonhosted.org/packages/bc/66/36c78af2efaffcc15a5a61ae0df53a1d025f2680122e2a9eb8442fed3ae4/msgpack-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4147151acabb9caed4e474c3344181e91ff7a388b888f1e19ea04f7e73dc7ad5", size = 424172, upload-time = "2025-06-13T06:52:25.704Z" }, - { url = "https://files.pythonhosted.org/packages/8c/87/a75eb622b555708fe0427fab96056d39d4c9892b0c784b3a721088c7ee37/msgpack-1.1.1-cp313-cp313-win32.whl", hash = "sha256:500e85823a27d6d9bba1d057c871b4210c1dd6fb01fbb764e37e4e8847376323", size = 65347, upload-time = "2025-06-13T06:52:26.846Z" }, - { url = "https://files.pythonhosted.org/packages/ca/91/7dc28d5e2a11a5ad804cf2b7f7a5fcb1eb5a4966d66a5d2b41aee6376543/msgpack-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d489fba546295983abd142812bda76b57e33d0b9f5d5b71c09a583285506f69", size = 72341, upload-time = "2025-06-13T06:52:27.835Z" }, +version = "1.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/e7/bb605a7bab2d8425a64b3fa762b39dc1bf1c7e3f11ba6fb5413d6db0ff8c/msgpack-1.2.3.tar.gz", hash = "sha256:32edb81a2b5eb7cd7c9d941b2bfbbb082fd2cd09e0e725930316af6b708db186", size = 196517, upload-time = "2026-09-29T02:33:52.276Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/95/b9c651ccb9d720b2e2c8d537954dff528ab869a03bf89598145716db823c/msgpack-1.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec90a9ae3e1169fa1171147340f0e97d941aa19fcd3b34e8339a55933ed042af", size = 90404, upload-time = "2026-09-29T02:31:44.826Z" }, + { url = "https://files.pythonhosted.org/packages/50/cd/fc9e2e367e80f1493e2ec5f610dda558b344eeede296f88976db133e8f2c/msgpack-1.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9d7e9cbb0998bbfd363fd9a09c330520d5e9cb323c05b5a1a05865d23ccf2226", size = 89683, upload-time = "2026-09-29T02:31:46.413Z" }, + { url = "https://files.pythonhosted.org/packages/19/9e/1028485c6886c1c117f777cc9b053e541eff0fedb3292dfb1da95040edb5/msgpack-1.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6707d2fa2aa1bb5424ea0b05f44ffc989b15ab41a73ff5855bff4944fec7c8ac", size = 465347, upload-time = "2026-09-29T02:31:47.934Z" }, + { url = "https://files.pythonhosted.org/packages/aa/83/800570e6a22376eb8d599920f70aead4779a63611696f567477c4e85a70f/msgpack-1.2.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:382b219de3d436de3baba0f4b0c6d4336e8f5858d0eb047918b13b69a71c6c55", size = 477820, upload-time = "2026-09-29T02:31:49.479Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ff/817e4a2052f848d3fb67726908d6e4e7c19f68ee7c19553a82ce7b0ed415/msgpack-1.2.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:186e6c602b8a9968b8e864c67d622a69279f7d1e55ae25f40e3bff7e815b2b62", size = 436656, upload-time = "2026-09-29T02:31:51.18Z" }, + { url = "https://files.pythonhosted.org/packages/3d/42/040cc55dde6a7d92057baac8d1fc9cfb9f4fd4162900e2ec16dc33917a7d/msgpack-1.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9276ba88891338f2617044429dfd080ae008c9868a25f6f1a7d004a35dc9ac0a", size = 460939, upload-time = "2026-09-29T02:31:53.026Z" }, + { url = "https://files.pythonhosted.org/packages/09/93/4dc007bdef930eed247346773bc0189b710078961d3218d5ee7ba59f322c/msgpack-1.2.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c942c21a93f36b3a69e828c8945bb72c94dc2ffe488a2086950c812f3edf046c", size = 433608, upload-time = "2026-09-29T02:31:54.981Z" }, + { url = "https://files.pythonhosted.org/packages/c0/97/a1b944046f283ec89445cb2a982c42233b5b07cc630f9be739f4f1d469a3/msgpack-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18a6ed513023001b28dcd3ba54966f6bb90a38274ba8d2640464bcab3a1b81d4", size = 477373, upload-time = "2026-09-29T02:31:56.713Z" }, + { url = "https://files.pythonhosted.org/packages/59/79/ab411d0d172743732ab2503f4c32a22dd1a7d1436a6feecbb160e4b6376a/msgpack-1.2.3-cp311-cp311-win32.whl", hash = "sha256:d0238cd05dec9ffbe0de1071df685ba63e30a36ac155285b1a094e727c38cbe9", size = 67514, upload-time = "2026-09-29T02:31:58.267Z" }, + { url = "https://files.pythonhosted.org/packages/63/8d/6f0cb2b84e484e96278455c26870196d025bb0cec312b226a663f1fa9000/msgpack-1.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:30e1522e4173230dca4d9ad896f038f73c0da6c1edd42f4dbad88ac583cf5d46", size = 75850, upload-time = "2026-09-29T02:31:59.449Z" }, + { url = "https://files.pythonhosted.org/packages/aa/25/f99e13a2c1d3f5a1dcaa5aab27f474e8c4358188bbc68ad79fecb0d1aefe/msgpack-1.2.3-cp311-cp311-win_arm64.whl", hash = "sha256:8ca67f77938ea6a3663aa9bd22b3e031f6da84d665be850abab910ee90728dfd", size = 72338, upload-time = "2026-09-29T02:32:00.885Z" }, + { url = "https://files.pythonhosted.org/packages/af/12/4d7c6d6203416d9fbf0f59ebaa805e70fb929b93a41b611bc821ec5964a0/msgpack-1.2.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89c930aece4e972b208ba589c8410b4167b05e411a5ea2cb25fd96f8bc47ee43", size = 91577, upload-time = "2026-09-29T02:32:02.141Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c7/8576ad39f4ca42ddad26f68eb8621d2d0a60501193d480f504bd9d7f36c4/msgpack-1.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:905a189853d6bdb204c7ae5f4ab77fb857448abfff574d3d93c62e2815b24b4f", size = 90027, upload-time = "2026-09-29T02:32:03.508Z" }, + { url = "https://files.pythonhosted.org/packages/0a/3a/aa9c580aea1314529a0f3562461479780b0d254b064f0880956bfbcc74a8/msgpack-1.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7b3d0018746b5997dd6b14a1870b07cc4c327d9101145d94a1fc264a51a06", size = 460343, upload-time = "2026-09-29T02:32:04.906Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cf/9c2e4d6c179529d5bf4a64cff76fa581486569e9fbdd35bd98f51cb624bf/msgpack-1.2.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede33b2892ceb976283e009ad12fa1834cfdf1f9c43ee9c97849fc588d00a618", size = 472998, upload-time = "2026-09-29T02:32:06.69Z" }, + { url = "https://files.pythonhosted.org/packages/7b/41/915c81fe6df2d3cbdb0dece4f1a5cd313e1cd2abd9f501d0f50c0582517e/msgpack-1.2.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:666ef5601ab0e6e345e47febc96aa81143cc932201543480cbb9499164f05ffb", size = 423216, upload-time = "2026-09-29T02:32:08.739Z" }, + { url = "https://files.pythonhosted.org/packages/a2/e7/7dda8b1039abfd9bba4c5068172c67135c9e33089f503512db9226f23c24/msgpack-1.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87cf2ef05ff2f2493ba29fcdaef27e960ca64dacfd13460ae29e6f92e0ed05bb", size = 451218, upload-time = "2026-09-29T02:32:10.517Z" }, + { url = "https://files.pythonhosted.org/packages/16/5b/ce995c1ed4a0522b7f2d034bc2034fd63005f240b945961b70fb56fbaf3d/msgpack-1.2.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:b774ff994d844e541439ac5d2d49a14def4104830c3465e9394c153f86200ffb", size = 422453, upload-time = "2026-09-29T02:32:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/ce191fb87e2650d0166b34c437e499ee4a7f9db9c1eb164f41725eb6160e/msgpack-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaf7e82249837e3aa97297b34a0bb9ff562027381631e057cea6e1367f10b438", size = 469003, upload-time = "2026-09-29T02:32:13.663Z" }, + { url = "https://files.pythonhosted.org/packages/42/35/539123407fe200fb16609c835675496fbeb6017ace9fc93909f0613223ae/msgpack-1.2.3-cp312-cp312-win32.whl", hash = "sha256:7c047250096f9fc19dba26e3d1639b5e7a84114003605c94def667149a70ced1", size = 68303, upload-time = "2026-09-29T02:32:15.02Z" }, + { url = "https://files.pythonhosted.org/packages/6f/4c/331b45f9b86fbda6b9e103244d189068e51f726d8c40021ed66e1f2c415e/msgpack-1.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:3ec409b0d6aa8e9eec6eaf881b893caa215dbe68c5319ca96e8a271d81bb111d", size = 76744, upload-time = "2026-09-29T02:32:16.344Z" }, + { url = "https://files.pythonhosted.org/packages/13/9f/fb572dc42b9fac06c7ea848aaee6e140d84469743bd1402bc07089fc4566/msgpack-1.2.3-cp312-cp312-win_arm64.whl", hash = "sha256:59612b4ed48a04cf024584218e813562f3b30a3bafa5f55abe300b15da314751", size = 71580, upload-time = "2026-09-29T02:32:17.617Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8b/3824d65e912e925d09ce30d9130fa9970d6d2855d7888b13639a6604967f/msgpack-1.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:21bfa4d2aa0b04c1806ef778a1199e9e53ea2441bcbf284420a32083896320b8", size = 91728, upload-time = "2026-09-29T02:32:18.949Z" }, + { url = "https://files.pythonhosted.org/packages/05/e6/df7f2c9ebb94760113debbcea2bd3afe5fdab88a4f7bec1b618755517460/msgpack-1.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:db84203b13aecc222f465061397fdd5b53b7ae73d2c95ffc1c8dc5be0153a709", size = 89955, upload-time = "2026-09-29T02:32:20.224Z" }, + { url = "https://files.pythonhosted.org/packages/08/6a/e5fc57136e8bacccb2b39627dea2cd546540a06181e22fe6db90e15b3ae4/msgpack-1.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e0d7950ca3c1bbae291d0552dd3bb2792fc680629c4c0d44e47e5bab969f3ca", size = 454930, upload-time = "2026-09-29T02:32:21.771Z" }, + { url = "https://files.pythonhosted.org/packages/b0/30/c394d37898db9212d1693456cdf363c7e1a097d0b63e10664007f3df3ec1/msgpack-1.2.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07c9733089d1b176c3dd2f7fa268452f9d5d784d076473499d754a58e8d1fbbb", size = 466866, upload-time = "2026-09-29T02:32:23.742Z" }, + { url = "https://files.pythonhosted.org/packages/4a/c8/1e4ddf6f6b829b3ee6c530c79dfae89cb609d2b0eedb5e0ae716851c52d1/msgpack-1.2.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f24a43b3560e20f825b807fe1e874bd73d53abaf8bbdcf258a6eb152cddbc1f5", size = 418715, upload-time = "2026-09-29T02:32:25.262Z" }, + { url = "https://files.pythonhosted.org/packages/11/a5/f460ba6d7a12d4301002f3efbb8f841e8bdc9c5fc98d771689677a352885/msgpack-1.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6576f348ed6cc4f31db6fd915a8e94245f042f50eae08d48732425e70638ea37", size = 446489, upload-time = "2026-09-29T02:32:26.988Z" }, + { url = "https://files.pythonhosted.org/packages/49/23/adface88db909bed321c85dd673655152d4a514c67e1f0800eb51c777d07/msgpack-1.2.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cd5a9f9f86a52c24713679aa2631956835f3842512964ff93f736ff76f1f530d", size = 416998, upload-time = "2026-09-29T02:32:28.606Z" }, + { url = "https://files.pythonhosted.org/packages/36/00/5bb3a239ccfc3763c4d0fa49b13b1b7010b00182c499ab3c1fecfe6294bc/msgpack-1.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9ddd28d3e9bbc602a9dced1591882c7fb9ab776eef8837da2c326fde19e2853", size = 463288, upload-time = "2026-09-29T02:32:30.375Z" }, + { url = "https://files.pythonhosted.org/packages/29/8c/456df77f00d701df9d6980ffb80291bce6e4e2e112e25a4dfae216f0715a/msgpack-1.2.3-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:62cc1a4ef0e553bac32c8342e1f04834aca7de276b92744eb7307db77759b890", size = 53347, upload-time = "2026-09-29T02:32:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/9d/22/ce780be666f89b77cdb855daa9ec62e87bb7f69e9f403e4a5d83a2b2208f/msgpack-1.2.3-cp313-cp313-win32.whl", hash = "sha256:d2f9c4f85e47a44d26d5baf3b041eef23436e224d44eed273f01bd8a12048d9f", size = 68258, upload-time = "2026-09-29T02:32:33.163Z" }, + { url = "https://files.pythonhosted.org/packages/51/06/c3def9bc4db283103c5901b302ee2a4305cb1e69729244f94d9bd8f8e8e7/msgpack-1.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:bb89b5dc30469c84bbf8684826eb851d82412ca95690e111b9ac5e8fb343961a", size = 76569, upload-time = "2026-09-29T02:32:34.412Z" }, + { url = "https://files.pythonhosted.org/packages/12/9f/cef344073858b80adb92d6ea342e20b0eae7a8f6fe70281b69cf03707270/msgpack-1.2.3-cp313-cp313-win_arm64.whl", hash = "sha256:471e12a6a42498a31490c206e0069e343b6a7c35db540be73a879eb06f5be047", size = 71530, upload-time = "2026-09-29T02:32:35.892Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8e/f777f74e38731c428857933c8011596f2d2f3160c821152f23b6ffba862f/msgpack-1.2.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3a31905206722103a84c1f72633fe30692cff6732c9d262e09a27dbc468797c8", size = 92042, upload-time = "2026-09-29T02:32:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/a0/71/551608543ee5d590f7e8d522267665d6d9946866ad2a2a70a770f7c70793/msgpack-1.2.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3372475211a9ce1a23acefe512cb3e121d18c95dc74ed56cb1819ef40836ebf4", size = 90578, upload-time = "2026-09-29T02:32:38.883Z" }, + { url = "https://files.pythonhosted.org/packages/ea/11/6d78ce5a9a58bf9ba7b1b6a8f649173b030e6770c8019cf330b91825ee5d/msgpack-1.2.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9324c54995641c3d1f92a9d55093c8cde0ffa2fbc87a467a688ef60428393220", size = 454352, upload-time = "2026-09-29T02:32:40.34Z" }, + { url = "https://files.pythonhosted.org/packages/3d/08/feb9a196269ba7809f44f9117d9e4a601c41c313f6144fd0c337293a5488/msgpack-1.2.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8ef3a66e4b52d2d7fdd90df2984670124b2ff7546d76bb25dcf68ef47f7df58", size = 462562, upload-time = "2026-09-29T02:32:42.176Z" }, + { url = "https://files.pythonhosted.org/packages/f5/77/3a674f366def24140b103d1ffd4fd27b3d912a13e47da67422afa16bebb3/msgpack-1.2.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:902f3490db0e07a7d40b48536a85c9b28fbf1397e7e1658a45a55f958e303620", size = 418134, upload-time = "2026-09-29T02:32:43.693Z" }, + { url = "https://files.pythonhosted.org/packages/48/82/944e71f280577490d99a3951cbce21aa4cbe04e7ab42cb373fd668af883c/msgpack-1.2.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e51eca14fbb65c4e0a5a9657346962bd3dca78c08e04e3d4dee70ef48687d30", size = 445937, upload-time = "2026-09-29T02:32:45.739Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ec/feddd629c4a3edf1395313680450c525086cceab56dec0d4de9da9ccb618/msgpack-1.2.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f42f146752eedb6765f07dcc04d72dab0a25779ec8d4a88c0085263ce114f22c", size = 416450, upload-time = "2026-09-29T02:32:47.558Z" }, + { url = "https://files.pythonhosted.org/packages/e4/59/263a10f8c4613ba0713f48cbda7695ac8dd6d6fab2fcbc9168f03f23a94d/msgpack-1.2.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0ed5823c4efc20fe87d3530665f40ec18a002be003114814c21235cc8d256207", size = 459546, upload-time = "2026-09-29T02:32:49.145Z" }, + { url = "https://files.pythonhosted.org/packages/1e/21/addcfa1e583cfc8a22fbdc57526621b5decd7ad676ae12e9150b7be1be5d/msgpack-1.2.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:2487453ca1b6104442c6442f9a1a8fee1fe8f428a70d99d4cba799108b304150", size = 53462, upload-time = "2026-09-29T02:32:50.708Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2c/3cb5c8524a1335ee27ca952c7ab78d375a16fea8e18ae3767ba0c880416c/msgpack-1.2.3-cp314-cp314-win32.whl", hash = "sha256:6df430419f2338cb71e4a34d6e64f83c88ccd321f91f40ba4513400b36d864ec", size = 70294, upload-time = "2026-09-29T02:32:52.037Z" }, + { url = "https://files.pythonhosted.org/packages/23/f9/9172ff3cdb85d160ad06df5e2708a5fce7682982a5eee8d31869b9f69d2e/msgpack-1.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:84a6616d396ec1bc18a1e83e67c96a393ec35dfe5e17434a5be7b9aa0fe988ab", size = 77778, upload-time = "2026-09-29T02:32:53.429Z" }, + { url = "https://files.pythonhosted.org/packages/04/e8/b4c23178bcf605ae17cec48a75530dd69d49b0a5a6f5f4df5c47d59f746e/msgpack-1.2.3-cp314-cp314-win_arm64.whl", hash = "sha256:7a003b02c6ee2eea6dfe0bb08818631e3597e69f0131f2a8250488a1cc553290", size = 73794, upload-time = "2026-09-29T02:32:54.763Z" }, + { url = "https://files.pythonhosted.org/packages/66/b1/92704be352c4f428b7e0a0e0fb210cb1aa2b1c42c102b8dc22d34b82fac0/msgpack-1.2.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ccea05b5542f6d283fef3f0a8e93a7f0be90af0ddeeef84c25c0216ba76dcae1", size = 93721, upload-time = "2026-09-29T02:32:56.342Z" }, + { url = "https://files.pythonhosted.org/packages/49/78/9c91f1e86cadcbc100b3780fd429c3715648704032a612e77a00646ebe79/msgpack-1.2.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b1631e12fe572e181cd77e831f69335d6cd5278eac22e3db3f33cf264ac2ac18", size = 94256, upload-time = "2026-09-29T02:32:58.056Z" }, + { url = "https://files.pythonhosted.org/packages/91/4d/270f9725921ae88a29d37a774a77ac24f0ef1411fc960a63f5a4665e81b4/msgpack-1.2.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e54394b7dbe2e12ab032d9d21feef7bb61a90a150a2623633ba3781ba69dcb1f", size = 471673, upload-time = "2026-09-29T02:32:59.886Z" }, + { url = "https://files.pythonhosted.org/packages/48/b8/eaa8d930f72dc1d1dd79511dc2ccf965922b059f2f0ed3b30aebac8c4b11/msgpack-1.2.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63bb7448a1e9111319ae2430c09a5596140c160422830d6271bc75730ff2ff9a", size = 466257, upload-time = "2026-09-29T02:33:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/97adc805037bc7e24c4e2f711bbcd3b28be8ec9aea3e778f18208cfbdb46/msgpack-1.2.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:382bc88fe90f29f5ac8a0b65c7046ff255356f2f2f3186c30e370215736fa1dc", size = 418484, upload-time = "2026-09-29T02:33:03.402Z" }, + { url = "https://files.pythonhosted.org/packages/0d/7e/1c53302606fe436ab48ba539ebafafe4a6a9efe12c4f04dc7eb36912d93e/msgpack-1.2.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c77e27790ad72989db783d5303825fba0b71550f00a490efba35cde7dc4b719f", size = 454064, upload-time = "2026-09-29T02:33:04.977Z" }, + { url = "https://files.pythonhosted.org/packages/00/2d/9ee0170f638907b396c15c6cd26b3e54f869159efc6206683acfd8f696e1/msgpack-1.2.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:700bc0fc9e968a292b9137ee70e7a012f7e115bf0107ce45e3a88202788dfc1e", size = 417901, upload-time = "2026-09-29T02:33:06.489Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d2/905c84490a75cd15a27065407cd085d201f7d392e1e0411f49f03fd31ade/msgpack-1.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5bd5f91ea75c45cafcc5433ba8fae59b708b736ec178d2441c40c499e9e079db", size = 459896, upload-time = "2026-09-29T02:33:08.361Z" }, + { url = "https://files.pythonhosted.org/packages/37/cd/4ce5809b9ab3b114d7cca64863e436820fa1614b49d55ccb93d49824ac2d/msgpack-1.2.3-cp314-cp314t-win32.whl", hash = "sha256:7995a7c6a62a1d6e7df211b4a16de513bd99fd053525050a319f80f44fb8015e", size = 75983, upload-time = "2026-09-29T02:33:10.023Z" }, + { url = "https://files.pythonhosted.org/packages/8a/31/853bb580744c24be0dbd8b090c3e6987dce466a1fc840fe50c0ac2ef9044/msgpack-1.2.3-cp314-cp314t-win_amd64.whl", hash = "sha256:bfe7d5b62cbe7aa664f0b3e2c49077f10fcdd06183d3014f8271ff3c5edbfbf9", size = 83757, upload-time = "2026-09-29T02:33:11.441Z" }, + { url = "https://files.pythonhosted.org/packages/0d/49/9f1b2ee484414eef9e21ee2b2b23b482bb71433ab9bac1da03cbda15ebf5/msgpack-1.2.3-cp314-cp314t-win_arm64.whl", hash = "sha256:1f585407f740a9eac04a3bb82c61d68a0ea78f90e29e670bfb086b9ce3a518dd", size = 78128, upload-time = "2026-09-29T02:33:13.063Z" }, + { url = "https://files.pythonhosted.org/packages/47/b8/50db4235407c3802f622b4ccdf65c6fe1e48d3c3eab6981fa6a9a5e53f11/msgpack-1.2.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:13221a6c81ebb8e43ea63a7251c35d54e4175cea37ebf3a62e911bdf42562a3c", size = 92111, upload-time = "2026-09-29T02:33:14.476Z" }, + { url = "https://files.pythonhosted.org/packages/15/56/50cf2a45c6163edafd737e2fd555103a26ce6748e1e241fb56ed445ea835/msgpack-1.2.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:0955b9000725573d1457c1676944b370dd9643c8d18f25bda5ac72913f850949", size = 90583, upload-time = "2026-09-29T02:33:15.924Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/8cc02f767c3bc94d2649c954d28dea935ce9398eb9c93ce2444bb9474cc1/msgpack-1.2.3-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c91762c48cd686dc9cf2b142c0bc544083952de32f5853d6624c956e54b85e5", size = 454751, upload-time = "2026-09-29T02:33:17.475Z" }, + { url = "https://files.pythonhosted.org/packages/80/c9/ddb896767808e3e022453d8dfae26fd52ed404b0aa6fb7f752d39c040208/msgpack-1.2.3-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f4ae8bd4ad9ba085fde95e95d055a896d19210238a4199a771a3cf36dceed49", size = 463597, upload-time = "2026-09-29T02:33:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a5/e7c261abf75783c07dcac89951cb31dd0c123bf02fbdeda0c67303e698d8/msgpack-1.2.3-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7013534a7163aa4f213c4d9864f1a8a7555daac6fcd48f699a198e29b436bfab", size = 422661, upload-time = "2026-09-29T02:33:21.093Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8e/466d5133f9e1c2e232e15e304f715b62f6f0e28332d18e37d975fe174315/msgpack-1.2.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:6a834097144aabe948b8ca9020a833e8026f7d0abbd0ec54bc7e50f45a8ce012", size = 445188, upload-time = "2026-09-29T02:33:22.877Z" }, + { url = "https://files.pythonhosted.org/packages/d4/b4/33e7ad987ee2f4b3d449a6cbf28f574ed222987ca7f65ad277072646ac5e/msgpack-1.2.3-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:d31864ba3933a589b6a00249f89c0eb422197f49128fc10da550e57e9cb0f377", size = 420451, upload-time = "2026-09-29T02:33:24.485Z" }, + { url = "https://files.pythonhosted.org/packages/34/2c/9d8be0d6c16e7e6131cd7da20257dd3da65473e3e6df0c00572fb10a195c/msgpack-1.2.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e15f70588f4db8cd10df0930145b186de70feb9db51710cd378b1399009655bd", size = 460624, upload-time = "2026-09-29T02:33:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/6a/e7/3a04783582c6f44f398cbfcf5f07a111192126ec4e63edf7f5640143bf64/msgpack-1.2.3-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:b949cc25e4a09252cbcc54e66e507de914d0e94a3a7039bd54c299bf7037c098", size = 53474, upload-time = "2026-09-29T02:33:27.83Z" }, + { url = "https://files.pythonhosted.org/packages/68/fb/db07359851644e258609d84f8e4fe0030ef448c108e20afe73f2a3bf539c/msgpack-1.2.3-cp315-cp315-win32.whl", hash = "sha256:8ec7a1d49ca6c2569d722ab5ec86e90089b0713900aa31905b47b4c4d9e78ce0", size = 70344, upload-time = "2026-09-29T02:33:29.382Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e4/cf5584d2f2a2e4465d5896a855a3e75a34a20ab172360b3d42ad862dd1ce/msgpack-1.2.3-cp315-cp315-win_amd64.whl", hash = "sha256:79dfa38faf92f804aa61beec140d70b18418e1dde1778dbb77a87a4cce85aa8a", size = 77800, upload-time = "2026-09-29T02:33:30.941Z" }, + { url = "https://files.pythonhosted.org/packages/63/f9/518ad4e8a580027b507eafdd26de7aae661a714e43d7c111c212482e4a1b/msgpack-1.2.3-cp315-cp315-win_arm64.whl", hash = "sha256:ed899d73a22f286a72bd9528d63f2ab3030dbad8bf1527fc249319a50d61fb9d", size = 73871, upload-time = "2026-09-29T02:33:32.406Z" }, + { url = "https://files.pythonhosted.org/packages/a4/79/254d4c9ad642b2a3ba84e646787892b34cc815eb36c9976f67a1c4f38515/msgpack-1.2.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f56fba61b2516be7917cb00151f0d060b5b21184e3499bb57f0f7d9259bea124", size = 93370, upload-time = "2026-09-29T02:33:33.87Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6f/5a2ba167646a25e84eaa8894e12935351e4331b80c28a9237ce6fe8d375f/msgpack-1.2.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:69ad12cedb674c73527bed869cddb42b742cac79a207a614202a4abaa24ea173", size = 93959, upload-time = "2026-09-29T02:33:35.503Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a1/2b44612e55f7cf5d5e4b580294959b4429bbbcb1991177888e3e18668137/msgpack-1.2.3-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db9fb67a3a2e75247bae569d34ebb5ff61c0448a4f0d6dbf991dae68af39b007", size = 467921, upload-time = "2026-09-29T02:33:37.023Z" }, + { url = "https://files.pythonhosted.org/packages/0b/6e/3309798ed1c11d7fcfdc7b946642685b0ff1588477925bc0d26bee7dcaae/msgpack-1.2.3-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2574ef81c1c8c38b10e330f3f9406fd09198a776b002030fafcf8e7647e9e06e", size = 467310, upload-time = "2026-09-29T02:33:38.799Z" }, + { url = "https://files.pythonhosted.org/packages/6f/79/9c799f489fa4146de4e00cfe9fee17afe33d8012f88ddffffea94f7c4700/msgpack-1.2.3-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fafc3b8898b432b841d30a61082c599fa7f4d06885f9dc58ad72259e12059fa6", size = 420178, upload-time = "2026-09-29T02:33:40.781Z" }, + { url = "https://files.pythonhosted.org/packages/94/c6/5850dc9cafcd2ea315692e65db0e222d20923dd55f44adf35061003de27e/msgpack-1.2.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a393e428f6ffb0dcb73308c1fff5593041c16ff42da66e5bac8a83a6107a54b0", size = 450248, upload-time = "2026-09-29T02:33:42.366Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d2/b4c806e3497fe21f0b353568266aec14ff735d092aea672de7b2955db03f/msgpack-1.2.3-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:d1c1e8989a855b7f1f2a64ec4a80b23a631822903952770813857b2e4f460471", size = 418431, upload-time = "2026-09-29T02:33:44.178Z" }, + { url = "https://files.pythonhosted.org/packages/b0/f5/f4ecc3ddac4d551bf2f3cdb283ec546dcc826fe7c500074be61aa273e08a/msgpack-1.2.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:e0bd394e999949c814f7912284243298de1b5a17b6a3dcb6cc8a79b156ffc4fa", size = 457543, upload-time = "2026-09-29T02:33:45.978Z" }, + { url = "https://files.pythonhosted.org/packages/a4/69/1c821d8386fae5cecc5fcaacf3de3947ff0a23f16bb481b5532b5868372a/msgpack-1.2.3-cp315-cp315t-win32.whl", hash = "sha256:3d4c807ed050fe3ddbea5ba7e9f63d7136871ce42861be1f50ff739f0e91047a", size = 75820, upload-time = "2026-09-29T02:33:47.596Z" }, + { url = "https://files.pythonhosted.org/packages/68/9e/41e2f7343a3764a9c1fb10c79f9a6a05db9df93dedd76401d1b511f5a685/msgpack-1.2.3-cp315-cp315t-win_amd64.whl", hash = "sha256:5f304123b90e8b2e49867981b7f6061612c39f50cca51ee88de007c084cf68d3", size = 83345, upload-time = "2026-09-29T02:33:49.325Z" }, + { url = "https://files.pythonhosted.org/packages/80/cd/0c3aa439bc7a7bf24684fef3a0ad776cba170e18ed94445e723bce42fce7/msgpack-1.2.3-cp315-cp315t-win_arm64.whl", hash = "sha256:f41ca154b7737b11893cdce3c78c61d703398a1cd54d4297bdad908392338a8e", size = 77572, upload-time = "2026-09-29T02:33:50.729Z" }, ] [[package]] @@ -1222,7 +1648,7 @@ wheels = [ [[package]] name = "nbclient" -version = "0.10.2" +version = "0.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, @@ -1230,14 +1656,14 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/a5/b3bae4b590c0cbcada2c63a34f7580024e834a8ba213e949a2f906705787/nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a", size = 62535, upload-time = "2026-06-05T07:52:41.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, + { url = "https://files.pythonhosted.org/packages/36/c9/94d73e5a01c5b926c3fa2496e97d7a8dc28ed5a77c0b2ed712f1a62e6694/nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895", size = 25288, upload-time = "2026-06-05T07:52:40.115Z" }, ] [[package]] name = "nbconvert" -version = "7.16.6" +version = "7.17.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4" }, @@ -1255,14 +1681,14 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/6a/252c7620305a9661205aed7a2a4b3592f5207bfca56ad11b7dea2c5ec2f6/nbconvert-7.17.2.tar.gz", hash = "sha256:344a218e8595117ce37396ed025d994f146d076226ebac59255a2fa085ab24d8", size = 865989, upload-time = "2026-10-12T09:11:19.583Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, + { url = "https://files.pythonhosted.org/packages/81/fd/a8d457af68848a8e5c12dd1d84ff35c415db471af78280e0703db4efbb12/nbconvert-7.17.2-py3-none-any.whl", hash = "sha256:6a143c11c00bf831604da4b1be4347d36ea52367057eb920135d69bc2862fed2", size = 262094, upload-time = "2026-10-12T09:11:17.215Z" }, ] [[package]] name = "nbformat" -version = "5.10.4" +version = "5.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastjsonschema" }, @@ -1270,55 +1696,73 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } +sdist = { url = "https://files.pythonhosted.org/packages/31/72/b3446efab8756e7df4b8ec587f8e611cb5a7249e4323db480802f1d3be04/nbformat-5.11.1.tar.gz", hash = "sha256:32d4521c68c6e7d5b29c76defaeed9f42ea733142b9b19f88277ce10390b9c4d", size = 147775, upload-time = "2026-08-17T08:10:51.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, + { url = "https://files.pythonhosted.org/packages/1a/69/ee613f74085ca7103f79cd08d579c4f3177d1d26e5d3d9528d2d6536a707/nbformat-5.11.1-py3-none-any.whl", hash = "sha256:cc6698fa75f4fab8755ead786317815f13a6fee3b53311c0abb1a8b51d52f7ec", size = 79849, upload-time = "2026-08-17T08:10:50.18Z" }, ] [[package]] name = "neo4j" -version = "6.2.0" +version = "6.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/aaa4ac19adae4b01bc742b63afd2672a77e7351566f02721e713e4b863ee/neo4j-6.2.0.tar.gz", hash = "sha256:e1e246b65b572bd8ea97f9e0e721b7d40a5ce53e53d0007c29aef63e4f9124d9", size = 241459, upload-time = "2026-05-04T07:35:41.428Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/d1/bc40a291c60b06738ce92d5f0259d348eee1f07ba10d569a881c848c8afe/neo4j-6.4.1.tar.gz", hash = "sha256:fac99b7cb9679b93ef97dc23f22a3f0e7c3feb2db223eddfd2521f27005cfeaf", size = 287897, upload-time = "2026-10-15T10:47:26.666Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/cf/1c3795866cefaac6e648d4e98c373cafd97810f6e317c307371007ab4abb/neo4j-6.2.0-py3-none-any.whl", hash = "sha256:b87abdd13a5cc2e3bd51026926c2f20ac38fa3febe98c340520dce19e97388d0", size = 327824, upload-time = "2026-05-04T07:35:39.604Z" }, + { url = "https://files.pythonhosted.org/packages/07/69/3036bdcacfba561c6ef4b00fe72529e0a1b6241a6b2de82572a0940a276b/neo4j-6.4.1-py3-none-any.whl", hash = "sha256:f56a281c74355522fc2642df8919bec450115431531b8f3f6fe1cc17acb57a27", size = 390684, upload-time = "2026-10-15T10:47:25.236Z" }, ] [[package]] -name = "nest-asyncio" -version = "1.6.0" +name = "nest-asyncio2" +version = "1.7.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/32/2c/70e3b6bb2189cfd260280b7e1042bd622949a258663f95e887fada4ac1e6/nest_asyncio2-1.7.4.tar.gz", hash = "sha256:995b1409d926ec55e0876ea39a69bffdd8852cf1db3652c177e8c8ffdbcaf3cc", size = 16891, upload-time = "2026-10-07T22:31:50.507Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/09/ed/559d2915dce85794bc0c36064043da170da50cd98746dcbddd85d5932017/nest_asyncio2-1.7.4-py3-none-any.whl", hash = "sha256:86e77b52c3d1496b294af3c944b44213b9b82a12a5ee590c0acc4ca4692ef6c7", size = 8543, upload-time = "2026-10-07T22:31:49.245Z" }, ] [[package]] name = "networkx" -version = "3.5" +version = "3.6.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" } +resolution-markers = [ + "python_full_version >= '3.11.5' and python_full_version < '3.12'", + "python_full_version < '3.11.5'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "networkx" +version = "3.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/76/3af777226b63a5e64a6b36b1ec5855c14e2b94a37096d4760e595fc43511/networkx-3.7.tar.gz", hash = "sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a", size = 1866482, upload-time = "2026-09-21T16:45:16.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", hash = "sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", size = 2142205, upload-time = "2026-09-21T16:45:14.609Z" }, ] [[package]] name = "notebook" -version = "7.4.4" +version = "7.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "jupyter-builder" }, { name = "jupyter-server" }, { name = "jupyterlab" }, { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "tornado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/4e/a40b5a94eb01fc51746db7854296d88b84905ab18ee0fcef853a60d708a3/notebook-7.4.4.tar.gz", hash = "sha256:392fd501e266f2fb3466c6fcd3331163a2184968cb5c5accf90292e01dfe528c", size = 13883628, upload-time = "2025-06-30T13:04:18.099Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/ac/aedb759dc683dcd129f6c75271bab5eb23020b0f7969163c726343718e1e/notebook-7.6.3.tar.gz", hash = "sha256:e2c08e469c0ae20bb0b3214f0ab77e79653317a2f8e5b34c10361c66874a5b50", size = 5501618, upload-time = "2026-09-21T18:07:24.261Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/c0/e64d2047fd752249b0b69f6aee2a7049eb94e7273e5baabc8b8ad05cc068/notebook-7.4.4-py3-none-any.whl", hash = "sha256:32840f7f777b6bff79bb101159336e9b332bdbfba1495b8739e34d1d65cbc1c0", size = 14288000, upload-time = "2025-06-30T13:04:14.584Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f7/907b98438cf00bdc4e296570058f29a347214bb42338a48e3b7eae58ae2a/notebook-7.6.3-py3-none-any.whl", hash = "sha256:ad7e0eb765fba836cd4a2ab0c7a3a26cde1d91665fbf6f533b6ae7b2de6d88d2", size = 5548452, upload-time = "2026-09-21T18:07:21.563Z" }, ] [[package]] @@ -1344,11 +1788,11 @@ wheels = [ [[package]] name = "packaging" -version = "25.0" +version = "26.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, ] [[package]] @@ -1371,11 +1815,11 @@ wheels = [ [[package]] name = "pathspec" -version = "0.12.1" +version = "1.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, ] [[package]] @@ -1392,70 +1836,56 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.3.8" +version = "4.13.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } +sdist = { url = "https://files.pythonhosted.org/packages/58/e6/d0abbb256b44e6a05748c6942511ff67db8dbb068de0c35b24bf1b395b09/platformdirs-4.13.5.tar.gz", hash = "sha256:05831adf87d392760f4b5c3a0a95579ab5a10b18b9b9bd43680dcb47544788a0", size = 62362, upload-time = "2026-10-19T01:02:11.778Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, + { url = "https://files.pythonhosted.org/packages/6c/8a/1d8cb3842909dc193a73835adedf412e32e18f8ffd59f43983949622fe6f/platformdirs-4.13.5-py3-none-any.whl", hash = "sha256:53d3ec4280b815c1e0b02edad7f9ee8fda1ba9c0865dd9c2e6e63849ce82fc1e", size = 32779, upload-time = "2026-10-19T01:02:10.17Z" }, ] [[package]] name = "pluggy" -version = "1.6.0" +version = "1.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/db/7fc19e6f2dc92a966727031389fc2e08b558f0f25eb7403c1119ad4713cd/pluggy-1.7.0.tar.gz", hash = "sha256:d1eaa46ebb595891b860ab086b4d09c8588af65ebd4361b8e8f4bb8920b90ba8", size = 123304, upload-time = "2026-10-15T09:50:58.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/40/9e/2b38731e0fc536806f16490e1a12d7f0dc2a1235aa8cc07bcc75416a7daa/pluggy-1.7.0-py3-none-any.whl", hash = "sha256:7dd7b0d8832ba3cb632c306926ded123429211b83641b35dc5c41ad2d34f9bec", size = 27082, upload-time = "2026-10-15T09:50:56.808Z" }, ] [[package]] name = "prometheus-client" -version = "0.22.1" +version = "0.26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746, upload-time = "2025-06-02T14:29:01.152Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694, upload-time = "2025-06-02T14:29:00.068Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, ] [[package]] name = "prompt-toolkit" -version = "3.0.51" +version = "3.0.53" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, ] [[package]] name = "protobuf" -version = "6.31.1" +version = "7.36.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797, upload-time = "2025-05-28T19:25:54.947Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/89/5b8517baa72f84a67b8a307ba953c91057af618bf40bf676f3c03551f8f0/protobuf-7.36.2.tar.gz", hash = "sha256:497d0463ff3316681da6c0b9e8d06cb465d61abce00b613ab42226175644d1bb", size = 512737, upload-time = "2026-09-17T20:07:59.326Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603, upload-time = "2025-05-28T19:25:41.198Z" }, - { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283, upload-time = "2025-05-28T19:25:44.275Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604, upload-time = "2025-05-28T19:25:45.702Z" }, - { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115, upload-time = "2025-05-28T19:25:47.128Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070, upload-time = "2025-05-28T19:25:50.036Z" }, - { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724, upload-time = "2025-05-28T19:25:53.926Z" }, -] - -[[package]] -name = "psutil" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, + { url = "https://files.pythonhosted.org/packages/32/72/98342feb672507c8f3a69e34b4fa8961f608edba5c1a48a6f47156d92cb5/protobuf-7.36.2-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:cbc70b17ee27e28894c7fee8bb04be1abead49e936bc70eb60052531eee2079e", size = 456039, upload-time = "2026-09-17T20:07:51.542Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ea/91fdf7c2b8bbd49cde056f00a9df6773532987e1c00fe2830b895af95c7e/protobuf-7.36.2-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:e11e1f0180583a2af89db6a2ecd9e8dc40aa6d2988ca175bfd0e6d12ea72d74e", size = 344219, upload-time = "2026-09-17T20:07:52.914Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/5fd5f8ece73fad885c5a09aa849b32d70472f954ba3a92d3bb5974ea953b/protobuf-7.36.2-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:f4fee11ec330d238b34a05c9b675f693c20415d1c5bd7d5320cc2f8a798eb9cf", size = 357223, upload-time = "2026-09-17T20:07:53.985Z" }, + { url = "https://files.pythonhosted.org/packages/db/f3/3996583dd2906297a637af12114deddf7658af6e683fedb83be061983fb5/protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:89f23aa53c24553a2416fd4fd1ec06f74fa42b14b546d8883128813f775bbfd2", size = 343223, upload-time = "2026-09-17T20:07:54.931Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1b/dcc64f358fcb51811b58ae40b3d28f820725f116d86487cc20bd4b130701/protobuf-7.36.2-cp310-abi3-win32.whl", hash = "sha256:912c1221170e16c08d1f086762f563dd61ff83c18b5fa6652952dfaded66f728", size = 442998, upload-time = "2026-09-17T20:07:55.826Z" }, + { url = "https://files.pythonhosted.org/packages/8a/55/b77bda4e5e5f5971fb51b07663694690e9afdb9402136c16a522bd621cad/protobuf-7.36.2-cp310-abi3-win_amd64.whl", hash = "sha256:a300819d441e078a5608c0d3c709796bb548136058fda017ae51d425b44fd353", size = 456514, upload-time = "2026-09-17T20:07:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/d52c7016b04b6c5108f26691f9d33ec82a9b65d041f1a9c771137693d618/protobuf-7.36.2-py3-none-any.whl", hash = "sha256:bdb3a345d48db958e6ce1f18e508beb0cc981d64f24088427549c866cd039f1e", size = 179806, upload-time = "2026-09-17T20:07:58.211Z" }, ] [[package]] @@ -1469,34 +1899,34 @@ wheels = [ [[package]] name = "pure-eval" -version = "0.2.3" +version = "0.2.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/9f/abfd2959e9261dd5217ca8551d4de211ca6ab26fe9b72cf44731ff6c4442/pure_eval-0.2.4.tar.gz", hash = "sha256:260c2774686e651b79f8b8e7fc9d80b3599ea6a66334b47d5f4abb69fc2c0ea1", size = 20563, upload-time = "2026-09-10T21:41:22.836Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/6d/18/83376915176eb058cb86470eb7396388a13350b09a8f233a79303bbcbc5b/pure_eval-0.2.4-py3-none-any.whl", hash = "sha256:96cae060a313cfaad51bb761278bfb0e62dc0248d9315a81173752dc546cd37a", size = 11893, upload-time = "2026-09-10T21:41:21.532Z" }, ] [[package]] name = "pycodestyle" -version = "2.14.0" +version = "2.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472, upload-time = "2025-06-20T18:49:48.75Z" } +sdist = { url = "https://files.pythonhosted.org/packages/86/df/178e41c9ed0ff33c23b3f3757e4e658c889f9abc5ad76ece6cd607b12e9c/pycodestyle-2.15.0.tar.gz", hash = "sha256:318f5db083869b4c4dad922d0b11124fb27ab181b6730b93371da671e31bd50e", size = 39765, upload-time = "2026-09-22T22:15:34.926Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, + { url = "https://files.pythonhosted.org/packages/56/e2/480bcdb153feecde4d736b18c908c7eee4846f11d7547d2e0c71499af630/pycodestyle-2.15.0-py2.py3-none-any.whl", hash = "sha256:12fd2f73c7b8ee8845a0431111df8faf4c1a07d6e64e2ee7f0c74014dab14181", size = 31583, upload-time = "2026-09-22T22:15:34.007Z" }, ] [[package]] name = "pycparser" -version = "2.22" +version = "3.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/27/eeb9f307bf07060f3d9f9aa0fb8c15b01bdfded0a941e4b2719c7f94cacd/pycparser-3.12.tar.gz", hash = "sha256:f03387877eab82ce01bbdfd0ba7252ee55a90b1c708d5129e2ce915475cf1db6", size = 158785, upload-time = "2026-10-22T13:40:03.56Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ae/315bbeee126a769cbde43cf4908acb4b40408d8bf8bbf334dd7368d8dadf/pycparser-3.12-py3-none-any.whl", hash = "sha256:a076f3f489b39b43ed13563a1dafe42447445bec2e294154ec5c57fcdda4c85e", size = 62600, upload-time = "2026-10-22T13:40:02.021Z" }, ] [[package]] name = "pydantic" -version = "2.11.7" +version = "2.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -1504,97 +1934,165 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/0b/8e10b2e693af8ec54346a14caf36221334775975a747c9ceaa3f8371d96d/pydantic-2.14.1.tar.gz", hash = "sha256:94f478203dd03404682a1ada216965651dd74b1d2d5ffd62e00e0837caab5c26", size = 900362, upload-time = "2026-10-11T18:37:55.396Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/35/ea/a56b9fe5066f3537b7882f77e9c5dfb26d8c2eefdaed9b5fc73d57b4dc22/pydantic-2.14.1-py3-none-any.whl", hash = "sha256:9195d967ec791692a04438115466764fb8b9a27b31f14a760437694f40d6b454", size = 488106, upload-time = "2026-10-11T18:37:53.437Z" }, ] [[package]] name = "pydantic-core" -version = "2.33.2" +version = "2.50.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a6/24/af4ec4be49fbc810f35b0bdcacc3d433b56bbfa469fd3bfd4ae116cd9bf1/pydantic_core-2.50.1.tar.gz", hash = "sha256:e50d7b94baac6c7d09927fa5ca5800a0c7ee5015c7fcff65beb3a1931b5a6e09", size = 513515, upload-time = "2026-10-11T18:35:44.82Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/1b/ca81811da3d2aea724fb3c4ba6b83f50ab8f210576306ccd601973142d35/pydantic_core-2.50.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c531166c42ea7bdfecc8c50049581f05dd1993b09cc7c52bb36a14e96deaec7d", size = 2152145, upload-time = "2026-10-11T18:31:58.046Z" }, + { url = "https://files.pythonhosted.org/packages/59/20/938ef7e0541af0a314e2f9d63848dbd1656ba2ebfe5ca0469f7ebee00d5e/pydantic_core-2.50.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b6d0c2183008c188e19f4906d426b293bdc4f67ab17df8e180fe16cda208fa71", size = 2045761, upload-time = "2026-10-11T18:31:59.35Z" }, + { url = "https://files.pythonhosted.org/packages/2f/4b/456497fe2affa18f49b226e89bde31e8a204751ee343dd9beaac5438123e/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94be440c03fede26969a5ce75468e0e6a9927a1b46d9b679ee8adc1b057b0350", size = 2049557, upload-time = "2026-10-11T18:32:01.121Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/cd5dfe13928f55e236dff3a1bee06721d318ca6c955d9ca993b0a5d09f39/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:36c426eac0af8d1529ff8467e612b933346caec1fdc0d774f78f67a1a11e16c1", size = 2188153, upload-time = "2026-10-11T18:32:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8d/d0b25bc484f8d9136ea76ece69e0b2d24ab370cc2e7bbd1b79e61723b763/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028e2f212273d4a39b1ec1e0de8166b1165a65fc0f1111452a9d94fc7c625c63", size = 2388308, upload-time = "2026-10-11T18:32:03.767Z" }, + { url = "https://files.pythonhosted.org/packages/c5/64/6513cac7c9f78492abafa01d57a69de1d246bf3085fd7b0330bf14b025b3/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6f0cc1bb9900dc558960894adeb30b0c083366fc1d69b856209fb2ca5c36fe5", size = 2431187, upload-time = "2026-10-11T18:32:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/ed/60/7f2ae89c37e69a3dc0da9ff57b0388c285542c688d05f36767770429de85/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8812592c85d0edf423f10eadcef42716d71e8219085ad9e85b775057b7306133", size = 2157623, upload-time = "2026-10-11T18:32:06.616Z" }, + { url = "https://files.pythonhosted.org/packages/87/02/e3a71373b85a7973099b9a229a4302c7792262717e0b4997e41c01f7dd16/pydantic_core-2.50.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:bbce99252ba3167b2b6277f1829d5bf4b43b754524bddf7f944707c3db7d2253", size = 2254539, upload-time = "2026-10-11T18:32:07.968Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d5/5b620aaf40dc631d911565b64d49d3fa8422027c046a7a96dc4e4921ae98/pydantic_core-2.50.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:476f6ed8e43cd1e0b460920e23571700872b284e77331cb30c4faf459cf48a4b", size = 2267344, upload-time = "2026-10-11T18:32:09.399Z" }, + { url = "https://files.pythonhosted.org/packages/e0/48/f46baf4580d8a56ca4782aa65842e16d3cf39736b29fcce8e9c0521b3422/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2cbd1b75b09e976ed0d6b6ca297675632ca35df86130088457cdc60ef36970ae", size = 2300877, upload-time = "2026-10-11T18:32:10.903Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9d/e7d28505e6092c1fe075838a4f793ccbe6dd676e44ab16175815ee06cfe0/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:5958c72adb417c39b12ac87525ac60b0d73315fcdc59e21f44ee4a5e2512c9ef", size = 2464270, upload-time = "2026-10-11T18:32:12.329Z" }, + { url = "https://files.pythonhosted.org/packages/22/b1/3bf63b82efd93ebc9968f9c12fc46037a28bcb452c88e4688f33e5ff7dca/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f9e8a6c4ab04b78d61f78627370d834eb004b2869dcb28cfffa647b4ea1980", size = 2478653, upload-time = "2026-10-11T18:32:13.735Z" }, + { url = "https://files.pythonhosted.org/packages/28/17/26d1e4b9c2ba6a92b7dc75bbcb99ef44456b7e3af1bced868403667ea7d3/pydantic_core-2.50.1-cp311-cp311-win32.whl", hash = "sha256:4be846f55c9477f5f3ddde8f2ce941137e16862a56d018ed885d422bb6ae02f2", size = 2120246, upload-time = "2026-10-11T18:32:15.591Z" }, + { url = "https://files.pythonhosted.org/packages/24/65/3e875e7991eaecd4d70686293ff0d8a99aa8f93dc295e6a21c3d702912fb/pydantic_core-2.50.1-cp311-cp311-win_amd64.whl", hash = "sha256:0048b6dddc8ef4b64fccaad878bd143b0c3882ea9936279dc11d613f6b7dd1bc", size = 2176332, upload-time = "2026-10-11T18:32:17.153Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5c/58dbd17c61f209d91c70f549eb7a3bbec7023e89ea12dead091462d6d658/pydantic_core-2.50.1-cp311-cp311-win_arm64.whl", hash = "sha256:6a733778df2f7087ec1100ed0b41533e4f3001976e99570fa34f57c66e7f8e3e", size = 2182471, upload-time = "2026-10-11T18:32:18.49Z" }, + { url = "https://files.pythonhosted.org/packages/ee/94/101b49a6c63f99586755690696eae14532772587d9e39e93f7b8d28a49da/pydantic_core-2.50.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:704075d10b74f2f3c6e15407c696d88701df35fc8953f434a431add0d0074db0", size = 2222428, upload-time = "2026-10-11T18:32:20.228Z" }, + { url = "https://files.pythonhosted.org/packages/db/a3/f8b1b39349c33037c73d7a1b794c9c29d8f07d5bd2b74399c1375a529cc6/pydantic_core-2.50.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e8e1d6ce820aa23317e8209a86bd65a540973c12dc7552b48a4f6c8e9926815e", size = 2025779, upload-time = "2026-10-11T18:32:21.723Z" }, + { url = "https://files.pythonhosted.org/packages/d2/2d/862a7d115305cc621358e51ba13f296e0ffdf4fbd984be9f63bc7862730b/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c18db21573bd2c6489f9a544b7499f0df2853958c568e5e783536ee1f690af41", size = 2048429, upload-time = "2026-10-11T18:32:23.3Z" }, + { url = "https://files.pythonhosted.org/packages/c0/7d/fed95d18bf2b5abe2d5ab2bbec4184bfc22b6805994a33ccdae8edffd25a/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb57f304525a5e3c13333b772bf9a473f36326e9c821b2e8e1b2fd36f80ae2c3", size = 2173274, upload-time = "2026-10-11T18:32:24.697Z" }, + { url = "https://files.pythonhosted.org/packages/93/1e/c6f22ceac65dc3d291ff79bea0eb74cbd1de8b128f01fee48af03bcea1e1/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a27c09d86600f1bf2fe3f37e1ae697faf3143931c09322cd799da94deee923b5", size = 2360403, upload-time = "2026-10-11T18:32:26.281Z" }, + { url = "https://files.pythonhosted.org/packages/2c/97/190b5b6bfe4c72f265feb657913eb30749193927a5ad7b83cfa7866a25a2/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46b3301d3b5c886f77de7546e47274a5842c622ea2020b8c6524c6b66913b4a6", size = 2439799, upload-time = "2026-10-11T18:32:27.844Z" }, + { url = "https://files.pythonhosted.org/packages/90/24/48cd98388e4ac2c08d0800af36d15413db15e20387f1038123a2c86cb2f6/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ba4e9d8210d941c200431a56b2c0400b131865947903937ed3ec5404307d2e", size = 2160157, upload-time = "2026-10-11T18:32:29.553Z" }, + { url = "https://files.pythonhosted.org/packages/00/86/d909133d0b9979ed14c20f110f21124a0e346caf071bd66ac5af3009062b/pydantic_core-2.50.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:e5faeaee74a57d32b3ab3aebad2e348f06d3ba946fc5d28c1728455f00a3d13a", size = 2229523, upload-time = "2026-10-11T18:32:31.027Z" }, + { url = "https://files.pythonhosted.org/packages/90/31/4b43f08131b2098e73a852fd932063385f3103b33839fd9d1abdb89e673d/pydantic_core-2.50.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3cda0e538208e5d722bbf3698b24f19c0a7d05bc8d5f8a7f9b121ea7fa243d9", size = 2242700, upload-time = "2026-10-11T18:32:32.622Z" }, + { url = "https://files.pythonhosted.org/packages/88/77/de39658569dc7a4c293d110a89629f61145e7538f00d1e4280c28debefd3/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:57f51b31ff826e2859120cf4737c5a758a48d96f3e97da40ccee1796d58078ff", size = 2278452, upload-time = "2026-10-11T18:32:34.165Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/1eeb9e4e791e81210ef9096f58080b32ba15b5b13c108d50aaa3f8ce9f73/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8daa7ee75245d43ad7d747e5c9ecc1b1d06552f72b14887e9276f787d57375f4", size = 2450098, upload-time = "2026-10-11T18:32:35.547Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e6/b2accfdff17e5a88d6358536702146de00f9339adaa4d5bbe1ee93cb4832/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:acbf31f37c53a5ac0c34706c80b4f5107ba20b05fdd3816124bf236ef0c57dd2", size = 2476839, upload-time = "2026-10-11T18:32:37.119Z" }, + { url = "https://files.pythonhosted.org/packages/3b/7e/c8a83eb5d2cd42c2e13507150fb777b1edea5a018adc9cbf2858a1d08285/pydantic_core-2.50.1-cp312-cp312-win32.whl", hash = "sha256:45b11cac094aa25725581d9304eee93c9028516b9ea80dd9e175e13a5a2c840e", size = 2101425, upload-time = "2026-10-11T18:32:38.593Z" }, + { url = "https://files.pythonhosted.org/packages/c5/17/8bbd530b8659e9d963f5b16f6cb8e159f4cd174b4d6304e48969ab12dba8/pydantic_core-2.50.1-cp312-cp312-win_amd64.whl", hash = "sha256:132529c83901437ff642f585216831bf5fd7a91df66829907e155192ead62498", size = 2172522, upload-time = "2026-10-11T18:32:40.112Z" }, + { url = "https://files.pythonhosted.org/packages/af/9f/a79d690b127e4e3cff143d031538ab9aa715f6b2fbeecbd07cd6f2bf9fb7/pydantic_core-2.50.1-cp312-cp312-win_arm64.whl", hash = "sha256:4e834f6a8e4ff772dcc34f58ef5504147a3ea5b0f4eeb13b0f8eb2ca75ac57f1", size = 2161366, upload-time = "2026-10-11T18:32:41.606Z" }, + { url = "https://files.pythonhosted.org/packages/ae/57/0e237d7091d2cd44a35d243b7344227f90440166860469cd036afc23a04d/pydantic_core-2.50.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d5e062c01286d861fd6a1c4ff6e063547b3e713067f2df033c0ff97ac2ca006b", size = 2222774, upload-time = "2026-10-11T18:32:43.103Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b9/c720e56858d4e1539503297ed37063e0c08e0f3541c41b777f6a800f75fa/pydantic_core-2.50.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c003c3b7f49debb893d2d85ae099ac5959c9839e2f330fadb1fcdf7a6594482", size = 2024738, upload-time = "2026-10-11T18:32:44.587Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b8/fbfc25875219cc060e613170ff10e850c6d8924beb4910da57c2ee3ba1d2/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:409e0ea40ec30d9158f33574fd758e689f6045a0f2596701828c27816ca9687d", size = 2047049, upload-time = "2026-10-11T18:32:46.164Z" }, + { url = "https://files.pythonhosted.org/packages/d7/43/34210124d504c553688f2f04b48500b131237528ac545b445e0d6d30e0d5/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:131059670f1d2444269b8585cb888963994871932447c08b39ac6a51fcfef658", size = 2173415, upload-time = "2026-10-11T18:32:47.722Z" }, + { url = "https://files.pythonhosted.org/packages/65/cf/6e178e8fdc11da5965bef980983bf46326a42f436871dd51ba0a57f39df1/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dbcbee53bf17196a7f745aa9bf5a9603953a1e365b1f020be3207c676a3e7c4", size = 2361719, upload-time = "2026-10-11T18:32:49.217Z" }, + { url = "https://files.pythonhosted.org/packages/11/14/bd5169d356aa91bf777e28ba0b281c192d286d03c2812c9c9db023a2f00e/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:325c23f3e35cfbf0fe3486fa5f7260d1e45885173002d30a28ca019994124255", size = 2439803, upload-time = "2026-10-11T18:32:51.025Z" }, + { url = "https://files.pythonhosted.org/packages/1c/bc/d79d000e5203ebef39af839f2ce77a777fcad6e08ad26af9a2fcd114ffc8/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17e722e156d0444ecaefbe640bdb60928752bf2013e2b7a11cdb099aaae19bec", size = 2158402, upload-time = "2026-10-11T18:32:52.714Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a5/4902cb5fd599422c130bd3124ab31ee8b771199bd56662702eed07d3fec7/pydantic_core-2.50.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:aa8224f10880d9bf1b5993988ba153d42a8b4f3f4f511f93b1f09c93ff613c72", size = 2229755, upload-time = "2026-10-11T18:32:54.126Z" }, + { url = "https://files.pythonhosted.org/packages/1a/f5/c1481f8669f6060d89110c9b1374173fc8767ca276b84f4870bd8acd5e3f/pydantic_core-2.50.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:41bc8237121bd8dc8d888dfd6279fc166ffc88c1f1bf3a8bf00869680533ca4c", size = 2242303, upload-time = "2026-10-11T18:32:55.641Z" }, + { url = "https://files.pythonhosted.org/packages/04/f9/77fc3c7653ba9b6e42049e17e96b25388187d4a7c274ab1cb07f58ac8419/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:45c6266d071c241f2a168d45bf8c54344f0effce35e7e6b73afdec11f3687568", size = 2278345, upload-time = "2026-10-11T18:32:57.38Z" }, + { url = "https://files.pythonhosted.org/packages/95/9b/0579c5d12e7f2b16b27e6782427987341fcce07b0725e02ddb0b74add0c4/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:1deeacb112d14d3f4fcb16b165f7dbaf76c70ba6e82f37ba042bdab51970a0b8", size = 2449947, upload-time = "2026-10-11T18:32:58.896Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ac/1b677db91eba54cc5922f4de6edc46ba45c2bd712dfdc0130382d158e214/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c96fd793b73d1b92e65570132505498fe7b21eaef73cdf74e67e5dfba7ac9e4", size = 2476889, upload-time = "2026-10-11T18:33:00.665Z" }, + { url = "https://files.pythonhosted.org/packages/4d/2a/3a9f6624ee3ea9ccba5249dde11418bb4c35780a7a92608f8768bd3fea39/pydantic_core-2.50.1-cp313-cp313-win32.whl", hash = "sha256:06ead20d39ffd6f2f6f2a8f8a6de67ff8bb1b4f14a8a30e058502514ee2ac685", size = 2101118, upload-time = "2026-10-11T18:33:02.329Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1f/323f78ddd9d9938aac420c1abb4e8ba799fc8bdab0acc67c0593b837c979/pydantic_core-2.50.1-cp313-cp313-win_amd64.whl", hash = "sha256:7816e98acc08119dc0f340ab167048ecc54126316330c1f0caf7c6756c88e28f", size = 2170840, upload-time = "2026-10-11T18:33:03.919Z" }, + { url = "https://files.pythonhosted.org/packages/cb/09/8497c52a739ae425c3ac2f7f56414cbc711c67d374346174f40fe2062644/pydantic_core-2.50.1-cp313-cp313-win_arm64.whl", hash = "sha256:c17799a62c142d61b8a3c51752a7cbc87fe2ad4ccfab10e628a77b405075c662", size = 2161633, upload-time = "2026-10-11T18:33:05.518Z" }, + { url = "https://files.pythonhosted.org/packages/49/33/28b96e81677153715e3eafb9f26663a80841e859fde282a380359b0d3fa1/pydantic_core-2.50.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1cf41f1ae3fa155cf167a72689ad044bcc1e3c97e064123677149bdfb5dafc4a", size = 2224428, upload-time = "2026-10-11T18:33:07.153Z" }, + { url = "https://files.pythonhosted.org/packages/94/40/15c06410c9b7b8da5805d27b64e09bd3f900e986728106db2689dbc51513/pydantic_core-2.50.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4df197990c15b5a37c5a277d131d9f2c67de6133f2e5dafd80d9bba4b99f46f9", size = 2023740, upload-time = "2026-10-11T18:33:08.763Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4e/5eb629f6efc2a27e421d789dd4bfacbb5f6d09c80c28b13d1e87d73163d5/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0036473f5583e6a60e50b8b21651511564277a3f05cc5dab8cf579f552cd5f6c", size = 2049435, upload-time = "2026-10-11T18:33:10.366Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8e/f195aebec49ad12318876ac2368c197a7939f5d52f8e156d2238ef8a4588/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:992c3514ec891fa7858099183e4d64e6bd5a5d4ff452fae29df22faa77a006bb", size = 2172975, upload-time = "2026-10-11T18:33:12.368Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f5/7ad9fb83010cd5ea0948409db105676ed779c4e709e2d3d89b9fe2558794/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:739dc730e6be3bd5ec2f4ab5cfc7eb047cc45fc1497b3bafec74ff2ed07df597", size = 2364197, upload-time = "2026-10-11T18:33:14.244Z" }, + { url = "https://files.pythonhosted.org/packages/ca/fb/bf0aab3e78301d202b82a0322ec968cd703b11fc0623fde9a28708936f62/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fad3a91e51b6d2039c572db04a5a873260b399f6bd62c3552671fa7a4a2899", size = 2444259, upload-time = "2026-10-11T18:33:15.79Z" }, + { url = "https://files.pythonhosted.org/packages/45/35/38f6d6564fae57d9b12e5676dfa947e0e7d5c46dbeaa7eb3352261d6d299/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42b54c2c90ad348b5e3a85e03e715d572c1fde357ef104cdfe3b03b697a404ea", size = 2159857, upload-time = "2026-10-11T18:33:17.51Z" }, + { url = "https://files.pythonhosted.org/packages/65/a0/fb0a3ca10f139dcf765b2d312d10cf0f65c57c59993229d00ad12b14ceff/pydantic_core-2.50.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:2df1ff41884de2bc4b307bafd7c40a691094fad2ff8e767e5b45a319257bcf4e", size = 2233954, upload-time = "2026-10-11T18:33:19.591Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6a/e63842252702aa4ec6e6b7178ca85e541a77459076592c23ebe2d9840b33/pydantic_core-2.50.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe90228920fd8ff2be62622b6bb8a2b11acd65046d50c6b130614b5879605a20", size = 2243876, upload-time = "2026-10-11T18:33:21.393Z" }, + { url = "https://files.pythonhosted.org/packages/39/25/5991cf8318b37e0dfab47b87541619a1df8501a793cba0d978846cba37a7/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:844b869f118e22a41a091bdcedda8a71bc1b0f62c38d1a0c3211cece47e1d8fc", size = 2277908, upload-time = "2026-10-11T18:33:23.324Z" }, + { url = "https://files.pythonhosted.org/packages/a7/3e/3ee8baaa6cc25a6961c69168cf9ff0f002d56f4e0d541ad6724c18fb61f3/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:2eb75304506894a281d346220a4f7481a1b8729577c5ed2a05395991966a8396", size = 2449285, upload-time = "2026-10-11T18:33:24.942Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/acbec6deac13fe697a80c275a9b6661db62c4d323bac8a47347b1f39c7cd/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6b20a4bffabdad0db2927ac034ae3b8a681b1f7a0182f3e60b479ad2fde21ebb", size = 2479013, upload-time = "2026-10-11T18:33:26.925Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/21a3f237b264389f6219d053ee78fc1b5c2fd402c1b1cb2b6cb8b85f9834/pydantic_core-2.50.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:99ba9bc2b8062ea0c326a990f7f00e6530c23579de66dd246e72c4cafef950a5", size = 1484400, upload-time = "2026-10-11T18:33:28.693Z" }, + { url = "https://files.pythonhosted.org/packages/09/ce/077a6d262d12ef09108377ac0717f029f420d773ace63cafd6143af75568/pydantic_core-2.50.1-cp314-cp314-win32.whl", hash = "sha256:cf356f70551d40374eaffb1aa63f1eb6d2006681cbd7a9faea173ce0f4dd7cd2", size = 2103222, upload-time = "2026-10-11T18:33:30.326Z" }, + { url = "https://files.pythonhosted.org/packages/14/4c/350a2415209c43d670eb71d3c040f332c04a30583d39e311b05c7ac15762/pydantic_core-2.50.1-cp314-cp314-win_amd64.whl", hash = "sha256:d32f3acc081cc3923386d88f422cde8892335e95f034e0104bb4cf9310d9915f", size = 2171586, upload-time = "2026-10-11T18:33:32.139Z" }, + { url = "https://files.pythonhosted.org/packages/bf/92/9bea6ca96580a0902fed366f064f0829e404f41889b34543279a1162b888/pydantic_core-2.50.1-cp314-cp314-win_arm64.whl", hash = "sha256:bed5163e03b98bc1fa2eb05d74c63d9c5c95d8ed6254985481640fbf5e237dea", size = 2155773, upload-time = "2026-10-11T18:33:33.896Z" }, + { url = "https://files.pythonhosted.org/packages/86/8c/f121f073cf32bdd5cba7e6230b1ce0ac845b0cf43e44dd597d95af272db2/pydantic_core-2.50.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:9572c1369e9c9da2d64a7b7992c786d90ff295abc93964cfe3125e4290768070", size = 2234017, upload-time = "2026-10-11T18:33:35.588Z" }, + { url = "https://files.pythonhosted.org/packages/a4/69/2bb2bcd6146cffe98d760a46c42ae71efd5151d9b2f9c9bf6619a3b32083/pydantic_core-2.50.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2005207aafe1231315718bf6ed5d064a7300fb4772754af35ee72fc68159492e", size = 2001016, upload-time = "2026-10-11T18:33:37.57Z" }, + { url = "https://files.pythonhosted.org/packages/20/b3/fbf854c7d07ec114260c26e9e2071a4381740f9ae09641dbfcbdf2a18c45/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f6047f62a6c5ae08d0a6afb035667aa2d97c3d20d69762e034c5ea144d92a5", size = 2023015, upload-time = "2026-10-11T18:33:39.433Z" }, + { url = "https://files.pythonhosted.org/packages/65/20/6de55b2f92cdb614b745c6e9ced639fc4fd7e1e77604825a88bdece6fcbd/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ef800dd7d85bcdadf4c3076e4c94e43939493558a3b69a1ea830c706d4617bb", size = 2192543, upload-time = "2026-10-11T18:33:41.381Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d9/19e91c94bd5c405945ce2f15526808aea37e162c253160de8ed7bf70b406/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0135bcdcaa0f23573f286e4cb5e0fd2962700964ed13df085b85f2b97aeab9e", size = 2388704, upload-time = "2026-10-11T18:33:43.167Z" }, + { url = "https://files.pythonhosted.org/packages/b6/bc/2e24c8415eae1a25ee5a5484946a917123bad2e9d01689a759236928175a/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0b3a6f334c6a2345ca15318ff894502a90012536404b37c844a976c76c846e0b", size = 2464118, upload-time = "2026-10-11T18:33:44.856Z" }, + { url = "https://files.pythonhosted.org/packages/bd/1f/945b8053cb061c64e102bcaf7bfb9ed740c0bd4349f9bb978a7d4ddff4ab/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06e01fbbfdb9be777b316a71b6c49efaf4a08b615d0a98d678cda3023f79d019", size = 2150142, upload-time = "2026-10-11T18:33:46.661Z" }, + { url = "https://files.pythonhosted.org/packages/2b/78/96a3e50bf0d64aaae781107eb9335b7529d05a85793ed6e7241c4cd1d931/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:a29a061fec0b4e2d714f277e70a3a18125ecff803f2fea6eade2f2e53711d112", size = 2245577, upload-time = "2026-10-11T18:33:48.574Z" }, + { url = "https://files.pythonhosted.org/packages/7a/5d/a6038a0322232758a6ebfa709f4ca14a60bf5b93940cd0b345056a557da4/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f5187624823423e1d1b82b1072ac41dc837389e18d3d0572cc19bbee46cd550a", size = 2263728, upload-time = "2026-10-11T18:33:50.527Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4b/76ded3333a457a9344c4f2d63f2d82d0101654b05178fa4ddfe7d3627674/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3e46a9eb0a0901dd6275e6b06ac3a464885ef350ec4121fe486869de8053e4bb", size = 2293630, upload-time = "2026-10-11T18:33:52.362Z" }, + { url = "https://files.pythonhosted.org/packages/a9/00/9eca378335c9c1b72bc779bf6e4c2a82ce784f14ec48a0e87102c9870e05/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:756d669f04e62ec4148ecfe22be6a4484d9b1181a6ef32e205ebfd200540858b", size = 2468048, upload-time = "2026-10-11T18:33:54.118Z" }, + { url = "https://files.pythonhosted.org/packages/35/ca/e3832e9cf93651251de43c8c5c029ed680a3c1a0a1b17ee26c81bed08cbd/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:c516cc5367ca3448995d42cb994bf3f4c9002d2a7c22eac9622551269ad1b807", size = 2512159, upload-time = "2026-10-11T18:33:55.99Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f2/773469b5a10a39116a2cb17edaf6d722f017dd8da07161b371465311c542/pydantic_core-2.50.1-cp314-cp314t-win32.whl", hash = "sha256:9d1bed94af6a63835461f3cf7502058eb166c58c4778e11d0f433cfb1bd69e19", size = 2098406, upload-time = "2026-10-11T18:33:58.043Z" }, + { url = "https://files.pythonhosted.org/packages/ee/42/0bb74f8f25204b259b11ab7c12dc7f180893b6bd706118b385147fb6efd5/pydantic_core-2.50.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c8dce1f1e0e5358b682a6ad3fa5e31b31d4560997b8e61417e9217c8d60f8a0c", size = 2148481, upload-time = "2026-10-11T18:33:59.913Z" }, + { url = "https://files.pythonhosted.org/packages/47/0d/d801646c9679a4e630e15cf521d4108b93854b42a6e6e02391bd4c6b1095/pydantic_core-2.50.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ceff0acc940be2715bd6ad17b24c0e5304abf44f6efd0f81ee8499e640f9dc86", size = 2174972, upload-time = "2026-10-11T18:34:01.875Z" }, + { url = "https://files.pythonhosted.org/packages/b2/84/23984b763d8862a02a13d27a44b6e8169428fd85ecfed88f54c29108604d/pydantic_core-2.50.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:8a6791afa2245e6c6b180122d105941644f5bd410bb18623b408808cc41a3102", size = 2224599, upload-time = "2026-10-11T18:34:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/4d/90/a63cf8586abc1d1a3f6d9b18f0224789ebf003851f092ebda3c7c863fd32/pydantic_core-2.50.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:84f34323a61a365b4e9295de6028474754829aaddd59c7bf1a040e7487ef8f3c", size = 2024191, upload-time = "2026-10-11T18:34:05.901Z" }, + { url = "https://files.pythonhosted.org/packages/a6/6a/f34bff9808ffb4907fbf5f5040457d253cacf2da7fce9efbc99ca1b1a44d/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23edad659e8dbd8ca7e4e877fe6c81573abbdf215bd25a68b53e1272f58b80c7", size = 2048252, upload-time = "2026-10-11T18:34:07.757Z" }, + { url = "https://files.pythonhosted.org/packages/b2/54/13f419bf1eb59852003818e25935aaf175687d978f4c4bca70e08fe40a3b/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a5fce22f1e87d181e924e12da7d81cfe031fb3881a5ddf26ad28f141756ca43", size = 2173376, upload-time = "2026-10-11T18:34:09.592Z" }, + { url = "https://files.pythonhosted.org/packages/6d/6c/b5a34d24cd0c81669d8f8339d74e6815abcf2f8fb48ab4b49b84c09be1d5/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c73622ef819328873b53109ee4f77ceb598bffedd02daf916102be3228866b78", size = 2364559, upload-time = "2026-10-11T18:34:11.534Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8d/d64d6216a8df365082665927ff923f183056f9049fee08e9777c9ac05296/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce8c25ca38cc0e3d7753ba180808de2c0c8cb24eae0df64491e40921454e9831", size = 2444697, upload-time = "2026-10-11T18:34:13.535Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0d/1b1149f60a00ea21ba5f70e28acbd40feb4598af414f80f53c921fac07c9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7689580e72a642ab5ec64d5f55b2e33636fa43b4ebe63c0c2c965ef307c7d1aa", size = 2159961, upload-time = "2026-10-11T18:34:15.56Z" }, + { url = "https://files.pythonhosted.org/packages/1e/35/f236549299dcc78e71e945495d7ec67e78d20844d0999c60601685003031/pydantic_core-2.50.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d5c0e32fdbce7f1e8ef4d11f655694bf5f4175c757a9f1dc2be09b8864e5bcf5", size = 2234581, upload-time = "2026-10-11T18:34:17.502Z" }, + { url = "https://files.pythonhosted.org/packages/6a/85/26901a490522b7f75ef9bb9a7afb73e5bb550f0e1cb5b99a0069183e2eb9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40f523349960fa30f3ea51404308ff50f9997a90df639590f47a057c1f32b415", size = 2244090, upload-time = "2026-10-11T18:34:19.402Z" }, + { url = "https://files.pythonhosted.org/packages/ca/2c/481bcfc70ceeb77a778ca6e5b705fe592cb64735c108157f81b7dd9c280e/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:d4193206b6587047437f6f11d7e776df23e1c1e23af2a54d9347275614791e10", size = 2277948, upload-time = "2026-10-11T18:34:21.317Z" }, + { url = "https://files.pythonhosted.org/packages/24/eb/f1e09333faa7ba447cde967310f758430cc7c5e987bdab5228816c70030d/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:84bc765b282a9d5b7fe0348b8648904f25a6a04b2139da52b1dd30c8ac3a2c8f", size = 2449688, upload-time = "2026-10-11T18:34:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b3/036bde636db8f76d92996e81aefc75678ab5cec4a07eea1ad0c72a893fc3/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e728b39a383c81035b2459cfcb35d99dfb01f7d6ebe3a913bc1cc5b81e459", size = 2479286, upload-time = "2026-10-11T18:34:25.214Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/07f018294ee18d144afeb6df1a47d9e92960f014be45c5ed13519fa5af95/pydantic_core-2.50.1-cp315-cp315-win32.whl", hash = "sha256:bc94f474417604bd383d2cd445d071b07dd55fedceed3ce33407bf1fcc107290", size = 2103683, upload-time = "2026-10-11T18:34:27.42Z" }, + { url = "https://files.pythonhosted.org/packages/5f/98/f9bd7e1f9b6709f155acb9ef826d9c3884fe925f811fd8e55b9b52280bad/pydantic_core-2.50.1-cp315-cp315-win_amd64.whl", hash = "sha256:983a662de2571cb2502fc8ff47b6770b03d025d2eb314c92f77b3f07c74720ed", size = 2171681, upload-time = "2026-10-11T18:34:29.508Z" }, + { url = "https://files.pythonhosted.org/packages/10/87/4bb3e1e7f385c076ab5af4d6dd0571b22042cd8207eb810d5b9fef15ae31/pydantic_core-2.50.1-cp315-cp315-win_arm64.whl", hash = "sha256:94845ff54dc5193f228cab81b2662a04bfbb892e95bdc15edf7399000ce57d54", size = 2156251, upload-time = "2026-10-11T18:34:31.455Z" }, + { url = "https://files.pythonhosted.org/packages/47/47/83643225b08f2aef6c8cc4bbe6e3f79c5e139c4364a6e450d0f399d87774/pydantic_core-2.50.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:4a53d13cdfbedbfa87f08b83c1a0a5efcc767d785a4b41934fa9cb672670493a", size = 2234363, upload-time = "2026-10-11T18:34:33.65Z" }, + { url = "https://files.pythonhosted.org/packages/5e/66/127ca649ba2f2462039dc1e694c6c01e00a3689f023a617364d3507e6d97/pydantic_core-2.50.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:efbecf43d321f7b9281441f1f213f7c21c66988b0e06c2730ba13ed47a46bb08", size = 2000972, upload-time = "2026-10-11T18:34:36.037Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e421e0a5d653b1203b090b2e48745976988d7338a647940704b5b9c2b399/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1f08f68dac9f9e83845a8039880aba2ab553eb9b2259c3243a313182c253fe", size = 2022925, upload-time = "2026-10-11T18:34:37.972Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/ea5568e2491e1a71100f15ae8c2d01ef52db42a184a2d4e716bc79e5eb8f/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dfe41f232befddb9c4377f6cfc702b51595e2d78ed082672adf8758d2c4619f", size = 2192867, upload-time = "2026-10-11T18:34:39.921Z" }, + { url = "https://files.pythonhosted.org/packages/ae/5e/3b8c3a35acbe219909ada5defad5d7d9fed845fb2b37bd5ec518f453c119/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adc06d218a1cadfd2ec4628424d7d79ce4eba69c2965e7e7b55106f0da5208c8", size = 2388687, upload-time = "2026-10-11T18:34:42.184Z" }, + { url = "https://files.pythonhosted.org/packages/b6/aa/7889b4e515f91a2e8c0ae6b5081fec0feb30c4398d1434e14793c60f173a/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cf91809d0721ab81592ba67bea7694821679c10b1a2e3c3460082b286c1918a", size = 2464415, upload-time = "2026-10-11T18:34:44.384Z" }, + { url = "https://files.pythonhosted.org/packages/08/78/93449e628eb8a6fdcce3eff9043081179d1bc7ce6f1bff32dc5006f41e00/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23923ab9292c40da026330b1ecf4dc2618c8e86e0422e5d1fbf50d94d64ca4f8", size = 2150823, upload-time = "2026-10-11T18:34:46.392Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f1/72c5bc129fceb0d00f05dc1e67f518c1728de1928c55f81fc13d7690de39/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:f3377c8c2b3ce898423c5e5dd94c7982e30aa7717a7e6ab2470b9de364963709", size = 2245806, upload-time = "2026-10-11T18:34:48.805Z" }, + { url = "https://files.pythonhosted.org/packages/28/2a/922a0e78f3aa6ab837b59f88190233fb8dad546c17995fde9bb3ed3b9b49/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:455a773617b5913bf5c20d0692e5787b119e52c4d40ea644ca31f5758fd31be2", size = 2264160, upload-time = "2026-10-11T18:34:50.876Z" }, + { url = "https://files.pythonhosted.org/packages/52/a8/0f1449e3e1b20941c9372faa18e7b6a092e30cdfa841902473f7989532ac/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:1a9006395dece0e32e704c315eff8a00bede494f6108546cfc5539c89fef4f9a", size = 2294031, upload-time = "2026-10-11T18:34:52.876Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d0/1031f492857de70355fb16524bbb03efce5fd34c93ed4a1ec60be07e0d4b/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:d2d82aa62521c55ddfb000ae70f88cdd8de974078f6024e821dfe5addd0c818f", size = 2468423, upload-time = "2026-10-11T18:34:54.995Z" }, + { url = "https://files.pythonhosted.org/packages/46/52/269ffffa645b8e47906395a39cf9db1151ae9fa4bcd7f47b960bc31baf37/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:009634b83993777ddcd69cad0ffcace43dabde692109528e35f0fde91e386a8b", size = 2512598, upload-time = "2026-10-11T18:34:57.149Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/e47e28281f20326ff6f3c31d626f0a83e615d2d94ba41bb0ad6ec237184a/pydantic_core-2.50.1-cp315-cp315t-win32.whl", hash = "sha256:3fde4fdc6487a58d944ca87cf5adc95d5f266e872c19599f5f4c0a8a1b1f9f9f", size = 2098535, upload-time = "2026-10-11T18:34:59.313Z" }, + { url = "https://files.pythonhosted.org/packages/03/ad/759e181e69c1b472c60b2049e5f61d5da1deefdd5ce1df4bb2ebcf771f25/pydantic_core-2.50.1-cp315-cp315t-win_amd64.whl", hash = "sha256:1c8632d4ac04e6f91128fca584b3a8a507d81604c24eeaaad00d4be42765c32b", size = 2148645, upload-time = "2026-10-11T18:35:01.571Z" }, + { url = "https://files.pythonhosted.org/packages/6d/56/8a702c27e5be9f47e5f19d8669227424290e4c024e7c370279cbaf244b4e/pydantic_core-2.50.1-cp315-cp315t-win_arm64.whl", hash = "sha256:c3ede305158e75510be50869b319550ab072008c13d64d4ab1e094fb286b6f44", size = 2175297, upload-time = "2026-10-11T18:35:04.079Z" }, + { url = "https://files.pythonhosted.org/packages/e7/73/a23a327237d9bb985298ce47702e196f995ce850224c12c70886bd66bb5c/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:062e891facce5ca296a1c37098e5e466780457f86413894b399f0cf22934f769", size = 2162560, upload-time = "2026-10-11T18:35:06.274Z" }, + { url = "https://files.pythonhosted.org/packages/df/b2/33b37b5e82408f402a5e82649a43e7c95cd5dab7beaeef2c35cedbfd18f2/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:49c2cbb2397fe4d0987e84606e691af6cb87bc0ee1bd3e7b737f7e10b4c142f9", size = 2075250, upload-time = "2026-10-11T18:35:08.455Z" }, + { url = "https://files.pythonhosted.org/packages/04/62/c7d5b9249466ccab90f3ce4790c2399dbfb8172ae9e74a7753dd295fe65a/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e4472072de0137ee0d8e72d6620e85939c271d2f90f6bbb4b15c24638b79f92", size = 2107891, upload-time = "2026-10-11T18:35:10.918Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7e/28d29bc1657195933147f772dee0558d9e0f045bbc11db7f992f40c37bb5/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ed4f3cef55164b026fefb41341b7754cc6b624c75dfe7142d2ecceb5ad21c87", size = 2268026, upload-time = "2026-10-11T18:35:13.336Z" }, + { url = "https://files.pythonhosted.org/packages/a5/09/1bcf160f3cd6333e2a76982fae5963e5032de0bcaaba38464223dc266bfe/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:76e2e83fa6ec8cdc972d438dafc2522b3a47bee4ec0ae668b29cfb1977ab5242", size = 2217070, upload-time = "2026-10-11T18:35:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/3d/81/f02de95eec7794dfc7a5bc69a834f0e834b31b3009014ce6de903855f775/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:a51eee75939cf811ac09b278745a6cee7dc873ccfbc8b9af3cc88fe4b7ce25b5", size = 2039027, upload-time = "2026-10-11T18:35:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/4d/16/227746ed3771d9bf2304568b55134849ece34e13b38b1d76de763015c77f/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae28183297fb0d2b8dc46a1f01d51f5e45825fc5afe76a835a6cb7fb34821295", size = 2109009, upload-time = "2026-10-11T18:35:20.218Z" }, + { url = "https://files.pythonhosted.org/packages/e5/b9/7664d1592a0e5a74903f357cd5b28ceb7336f3473256c5a4e8c8432f1881/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88e492e8b9d0312e7dc13667c30222abf284dc3b79b5302b3607b41a5784ce61", size = 2269883, upload-time = "2026-10-11T18:35:22.48Z" }, + { url = "https://files.pythonhosted.org/packages/bd/35/002a378302ff91d2a7f149bc8d22363faf581ba40ac39d0123444315a32d/pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7456d699b13954e9c0164dcb267250a10ae0dfb03e6e26d6796ab0d46e189c84", size = 2154076, upload-time = "2026-10-11T18:35:24.743Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5c/7a034330082c00f3c9795052bd9b161aaaf6e1951e897ac00a094823ef7e/pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0d955195bbbe489ad343fcc956eacea9357b79cb22192c66cacdefcbc14b32f", size = 2085850, upload-time = "2026-10-11T18:35:27.009Z" }, + { url = "https://files.pythonhosted.org/packages/57/fa/d5b44a7d3d4eceed6ef8713a0003af56fefde6ec75915513bcdd5d730cd9/pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2c634642694e6a0dad2ab1d375589fa671fd442edd5caf7d9737b8f6ca22906", size = 2259754, upload-time = "2026-10-11T18:35:29.763Z" }, + { url = "https://files.pythonhosted.org/packages/b6/88/e01dd37301710bd8b3b2daf34ec9e2a6e83a333130831c0d468b0292a48c/pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee6db2fbed51a7991302e8fac498cd67e336246026d0dfa84cf5166ce1412760", size = 2268712, upload-time = "2026-10-11T18:35:32.654Z" }, + { url = "https://files.pythonhosted.org/packages/3e/43/5bb80d4a4d2b2d84612a30205662cc521a20d209c94abc079ea48b4e0df2/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:79490e33c4c0fcb933bbbcfc3a62184d8803b99f535863dfbb925e1bcb6945ad", size = 2305049, upload-time = "2026-10-11T18:35:35.392Z" }, + { url = "https://files.pythonhosted.org/packages/e8/7b/e3ef76b269cfe4a5bd3bdcf5d7124cf05e5a8909d443b91639307116bdae/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:48569b0ade9edfbe065cad1d700175546592aebbb42f02adcebcc26e75b896fe", size = 2466001, upload-time = "2026-10-11T18:35:37.791Z" }, + { url = "https://files.pythonhosted.org/packages/8f/7a/ea0947aadc1d9f72d4be00d2e19939611ec17363bcb5e6eb9ec7d8221c34/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5f3cae32fc46121f787cb2486de9cf95a8bf72aec5cc78f64c606fa1735a6ef5", size = 2481777, upload-time = "2026-10-11T18:35:40.287Z" }, + { url = "https://files.pythonhosted.org/packages/24/f3/d15bc0b1fb0c4f1e07b3326ffb7489f7ae70da2b56a0884d22641b0eb47c/pydantic_core-2.50.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7f476456ac2bb0d937f75191494a09c83a30765fea4f70f3b404942fe25f6cdf", size = 2336787, upload-time = "2026-10-11T18:35:42.558Z" }, ] [[package]] name = "pyflakes" -version = "3.4.0" +version = "4.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3d015808458391acbf9df40b1e54750ef175d39180b1/pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58", size = 64669, upload-time = "2025-06-20T18:45:27.834Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/1b/3ba8bd62723cfe1b651c4e4b89b33767fce7a08bb800491cf1d3dd3a7716/pyflakes-4.0.3.tar.gz", hash = "sha256:94762a3a5a343a79b28754f96c554bce057a592a4896907d73f0369fe824e053", size = 67126, upload-time = "2026-10-07T18:57:25.327Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551, upload-time = "2025-06-20T18:45:26.937Z" }, + { url = "https://files.pythonhosted.org/packages/44/b0/554d720d71083ccd24ba2f376c048544c073570e7bb18b34d769cef77f66/pyflakes-4.0.3-py2.py3-none-any.whl", hash = "sha256:330ba92b8c1db2eb0b8f4068f6c58674e2649a99e334769aa50e3e9c5b11c23a", size = 66250, upload-time = "2026-10-07T18:57:24.403Z" }, ] [[package]] name = "pygments" -version = "2.19.2" +version = "2.21.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, ] [[package]] name = "pylint" -version = "3.3.7" +version = "3.3.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astroid" }, @@ -1605,9 +2103,9 @@ dependencies = [ { name = "platformdirs" }, { name = "tomlkit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/e4/83e487d3ddd64ab27749b66137b26dc0c5b5c161be680e6beffdc99070b3/pylint-3.3.7.tar.gz", hash = "sha256:2b11de8bde49f9c5059452e0c310c079c746a0a8eeaa789e5aa966ecc23e4559", size = 1520709, upload-time = "2025-05-04T17:07:51.089Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/9d/81c84a312d1fa8133b0db0c76148542a98349298a01747ab122f9314b04e/pylint-3.3.9.tar.gz", hash = "sha256:d312737d7b25ccf6b01cc4ac629b5dcd14a0fcf3ec392735ac70f137a9d5f83a", size = 1525946, upload-time = "2025-10-05T18:41:43.786Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/83/bff755d09e31b5d25cc7fdc4bf3915d1a404e181f1abf0359af376845c24/pylint-3.3.7-py3-none-any.whl", hash = "sha256:43860aafefce92fca4cf6b61fe199cdc5ae54ea28f9bf4cd49de267b5195803d", size = 522565, upload-time = "2025-05-04T17:07:48.714Z" }, + { url = "https://files.pythonhosted.org/packages/1a/a7/69460c4a6af7575449e615144aa2205b89408dc2969b87bc3df2f262ad0b/pylint-3.3.9-py3-none-any.whl", hash = "sha256:01f9b0462c7730f94786c283f3e52a1fbdf0494bbe0971a78d7277ef46a751e7", size = 523465, upload-time = "2025-10-05T18:41:41.766Z" }, ] [[package]] @@ -1627,16 +2125,16 @@ wheels = [ [[package]] name = "pytest-cov" -version = "6.2.1" +version = "6.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", extra = ["toml"] }, + { name = "coverage" }, { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4c/f883ab8f0daad69f47efdf95f55a66b51a8b939c430dadce0611508d9e99/pytest_cov-6.3.0.tar.gz", hash = "sha256:35c580e7800f87ce892e687461166e1ac2bcb8fb9e13aea79032518d6e503ff2", size = 70398, upload-time = "2025-09-06T15:40:14.361Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, + { url = "https://files.pythonhosted.org/packages/80/b4/bb7263e12aade3842b938bc5c6958cae79c5ee18992f9b9349019579da0f/pytest_cov-6.3.0-py3-none-any.whl", hash = "sha256:440db28156d2468cafc0415b4f8e50856a0d11faefa38f30906048fe490f1749", size = 25115, upload-time = "2025-09-06T15:40:12.44Z" }, ] [[package]] @@ -1654,148 +2152,213 @@ wheels = [ [[package]] name = "python-dateutil" -version = "2.9.0.post0" +version = "3.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, + { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/df/f15f80383f152452d8985b36d95cb8751f901a3e0ff4cd27f7e118f168e2/python_dateutil-3.0.0.tar.gz", hash = "sha256:7ebcb3c29a92f3ceafe79a7a48a5c45677e9e004bbeec5742ac0bbb00560b7a2", size = 271066, upload-time = "2026-10-21T23:41:45.075Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, + { url = "https://files.pythonhosted.org/packages/5a/17/cebee01d1c0c1441174cf0456ddc91b280d79acb65340c05e41d77866ee8/python_dateutil-3.0.0-py2.py3-none-any.whl", hash = "sha256:3c79630202e4152c6add678446984236efe4f57e84d8e892aab0637bab82e9fd", size = 94659, upload-time = "2026-10-21T23:41:43.431Z" }, ] [[package]] name = "python-json-logger" -version = "3.3.0" +version = "4.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/25/5473e46b179f8e8b4ad3aeeb36773d1701b7770eaf5e5bc2025c7303b598/python_json_logger-4.2.0.tar.gz", hash = "sha256:e371ebe22ec01e289850102091a2b1f6fc9e655c7f1f5f29073936756c290afa", size = 18211, upload-time = "2026-08-15T11:36:38.232Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, + { url = "https://files.pythonhosted.org/packages/dc/55/6467fde553886cb293e41538f3a8b4e4fd4688c6df242cf982162d8367fb/python_json_logger-4.2.0-py3-none-any.whl", hash = "sha256:158a52126fcd6869e09574d2b66272666f3dc8f468c62637ef9a1fa883719cb9", size = 14988, upload-time = "2026-08-15T11:36:36.821Z" }, ] [[package]] -name = "pytz" -version = "2025.2" +name = "pytokens" +version = "0.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/92/790ebe03f07b57e53b10884c329b9a1a308648fc083a6d4a39a10a28c8fc/pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", size = 160864, upload-time = "2026-01-30T01:02:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/13/25/a4f555281d975bfdd1eba731450e2fe3a95870274da73fb12c40aeae7625/pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", size = 248565, upload-time = "2026-01-30T01:02:59.912Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", size = 260824, upload-time = "2026-01-30T01:03:01.471Z" }, + { url = "https://files.pythonhosted.org/packages/4e/54/3e04f9d92a4be4fc6c80016bc396b923d2a6933ae94b5f557c939c460ee0/pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", size = 264075, upload-time = "2026-01-30T01:03:04.143Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1b/44b0326cb5470a4375f37988aea5d61b5cc52407143303015ebee94abfd6/pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", size = 103323, upload-time = "2026-01-30T01:03:05.412Z" }, + { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, + { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, + { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, + { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, + { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, + { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, + { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, + { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, + { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, + { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, + { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, + { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, ] [[package]] -name = "pywin32" -version = "311" +name = "pytz" +version = "2026.5" source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/21/d83d6ef28c4c912c4bb4d1dcf591f7b8c6bde87b9c66f9f454677314e16d/pytz-2026.5.tar.gz", hash = "sha256:fa23724b9c486543b9ff54a327ee7569ac83ade54bb9afd0fc18676620401c86", size = 318572, upload-time = "2026-10-04T02:37:58.719Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, - { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, - { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ef/c66110d46fb800dda0bf33164182dfadabe26a90e4476844d502a23dca8e/pytz-2026.5-py2.py3-none-any.whl", hash = "sha256:e658af3757f9e26a9d25dd2aff38335acd92bc9104f890a894b2c1ba28311b03", size = 506342, upload-time = "2026-10-04T02:37:56.814Z" }, ] [[package]] name = "pywinpty" -version = "2.0.15" +version = "3.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/7c/917f9c4681bb8d34bfbe0b79d36bbcd902651aeab48790df3d30ba0202fb/pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2", size = 29017, upload-time = "2025-02-03T21:53:23.265Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/73/6bc452ae57820feb8bb6d993ecd91e24643d8f9a05409e8f83c56c852f04/pywinpty-3.1.0.tar.gz", hash = "sha256:14595b68054d61f2f1e90cc2b30be47be201de200ae1851c433d8cded101bce0", size = 16224208, upload-time = "2026-10-15T17:31:05.352Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/ac/6884dcb7108af66ad53f73ef4dad096e768c9203a6e6ce5e6b0c4a46e238/pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca", size = 1405249, upload-time = "2025-02-03T21:55:47.114Z" }, - { url = "https://files.pythonhosted.org/packages/88/e5/9714def18c3a411809771a3fbcec70bffa764b9675afb00048a620fca604/pywinpty-2.0.15-cp312-cp312-win_amd64.whl", hash = "sha256:83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc", size = 1405243, upload-time = "2025-02-03T21:56:52.476Z" }, - { url = "https://files.pythonhosted.org/packages/fb/16/2ab7b3b7f55f3c6929e5f629e1a68362981e4e5fed592a2ed1cb4b4914a5/pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408", size = 1405020, upload-time = "2025-02-03T21:56:04.753Z" }, - { url = "https://files.pythonhosted.org/packages/7c/16/edef3515dd2030db2795dbfbe392232c7a0f3dc41b98e92b38b42ba497c7/pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901", size = 1404151, upload-time = "2025-02-03T21:55:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/ee/49/d78b094428f10f3365dc9ef48c32e0bb336b2e03c8ab3f786ac5c2ccff99/pywinpty-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:7ed683c7e4f31d92084d062478bf4aa9066a983c92700cb6ac6e4d5ca218723c", size = 2108312, upload-time = "2026-10-15T17:32:12.202Z" }, + { url = "https://files.pythonhosted.org/packages/57/dd/fd3617b3af749ba66227d280e637474f49ce8acbceb87a7ee8e55858bd8b/pywinpty-3.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:6cf46443732493e78efb130ac525df117e49db493eee1fc98ba9db70be410c96", size = 832952, upload-time = "2026-10-15T17:35:01.463Z" }, + { url = "https://files.pythonhosted.org/packages/4f/89/ac7ce4b13b3131c1344c3af4053d70219e92d4c8e35b7182a9365432f7a3/pywinpty-3.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:df249a2d942cbeef71f736119e96d246ea968fe9723dd25e8e439ba81814f85e", size = 2105451, upload-time = "2026-10-15T17:32:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/9e/db/957d5f4d64239720d01839c86f1c9c52aab0dbd4c25767889904bcda7d63/pywinpty-3.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:31c9928935046abe20475392493b5074b3d966ea85c63cc83e939fb54cd9edfe", size = 830609, upload-time = "2026-10-15T17:31:39.836Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0b/fc29cd8d1db4b17fb83074cb763568728a5f21a80e91a481a967e2482f67/pywinpty-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:cc51bc690f58a969eab7dcc8d070321187ed47d5f076edc3b4a56076b38831f3", size = 2104975, upload-time = "2026-10-15T17:32:02.183Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e8/c6146bf22daaf9a6457902a99caa5da386d1ba3e82622fa2acc8b2d4e921/pywinpty-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:3670cd05447e56836301620e92dfdd3ef40408cfb59f2ce6290c66c9986b53ef", size = 830306, upload-time = "2026-10-15T17:32:43.981Z" }, + { url = "https://files.pythonhosted.org/packages/87/6a/0c049de9e2d7d6b637aa36ee3825e643d5dba0a4890881652a6685bbaead/pywinpty-3.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:d01178e9391366bc3325b4c49068cfce95d10d416f6ade62140b274741bc11e0", size = 2104626, upload-time = "2026-10-15T17:33:11.188Z" }, + { url = "https://files.pythonhosted.org/packages/0e/6a/bafc3af2a864d9b681dc6dfcf46cf5de0b070276c9a0baec30c1201e88be/pywinpty-3.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:44918ef8bc408fbf52f54db9b8c33370aee0a59cee76b071a4b4f41ad5ed89c8", size = 830193, upload-time = "2026-10-15T17:32:03.924Z" }, + { url = "https://files.pythonhosted.org/packages/16/8c/e3a2921b39cbf9e27c67787996bdd99ba0acdf0d3f4c3a12b71e7e19a482/pywinpty-3.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:08afc428ec8765f2b8b9a9954727e1dafbefcb5912acc65952007779449650a1", size = 2104740, upload-time = "2026-10-15T17:32:31.808Z" }, + { url = "https://files.pythonhosted.org/packages/42/5a/4155005f0879ae4f348567abd175bd68902e8b036e39d86e50a025f7a5b9/pywinpty-3.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:98f00e50639e9edb740eb6eedd6c0ab82959f9633029db59363d06973d00ac0d", size = 830142, upload-time = "2026-10-15T17:31:49.185Z" }, + { url = "https://files.pythonhosted.org/packages/47/e8/26d10fc6c02628fc6052f820bad0a55531ba7d937f0952233bcbaaba85b9/pywinpty-3.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:188923081eea840c15f37c54a29ad6871b04fddf8fbf1c4acf317d0e27bd9cac", size = 2104930, upload-time = "2026-10-15T17:33:07.069Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f4/1b91263807eaf5a98b4c00b3c144576e3d4bd8e093d40e447013c3745334/pywinpty-3.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:714e8aa138bc61dcfd26c139d8cb8e7b954ea5c09c98bb014ab9b1f5741e289c", size = 830450, upload-time = "2026-10-15T17:32:55.051Z" }, + { url = "https://files.pythonhosted.org/packages/e9/4a/6d9048716dbf969b31ffacbf8a0a0ff944196807957826601cdc995b4afa/pywinpty-3.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:c08a2e5fa7a62f31b5965f0be1b92c67394cd5f75dc0a033d45fadc597f0640d", size = 2105086, upload-time = "2026-10-15T17:38:04.937Z" }, + { url = "https://files.pythonhosted.org/packages/a6/19/dece20a98f989c0eb8e35a2300e0357b98a1e8b5e3ea0149fad62ed16c12/pywinpty-3.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:751d0c727d0e81a246aba722cf0dcb2155fd6bc7b82574b1432f81256157ec73", size = 830443, upload-time = "2026-10-15T17:31:43.136Z" }, ] [[package]] name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] name = "pyzmq" -version = "27.0.0" +version = "27.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478, upload-time = "2025-06-13T14:09:07.087Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/df/84c630654106d9bd9339cdb564aa941ed41b023a0264251d6743766bb50e/pyzmq-27.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:21457825249b2a53834fa969c69713f8b5a79583689387a5e7aed880963ac564", size = 1332718, upload-time = "2025-06-13T14:07:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/c1/8e/f6a5461a07654d9840d256476434ae0ff08340bba562a455f231969772cb/pyzmq-27.0.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1958947983fef513e6e98eff9cb487b60bf14f588dc0e6bf35fa13751d2c8251", size = 908248, upload-time = "2025-06-13T14:07:18.033Z" }, - { url = "https://files.pythonhosted.org/packages/7c/93/82863e8d695a9a3ae424b63662733ae204a295a2627d52af2f62c2cd8af9/pyzmq-27.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0dc628b5493f9a8cd9844b8bee9732ef587ab00002157c9329e4fc0ef4d3afa", size = 668647, upload-time = "2025-06-13T14:07:19.378Z" }, - { url = "https://files.pythonhosted.org/packages/f3/85/15278769b348121eacdbfcbd8c4d40f1102f32fa6af5be1ffc032ed684be/pyzmq-27.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7bbe9e1ed2c8d3da736a15694d87c12493e54cc9dc9790796f0321794bbc91f", size = 856600, upload-time = "2025-06-13T14:07:20.906Z" }, - { url = "https://files.pythonhosted.org/packages/d4/af/1c469b3d479bd095edb28e27f12eee10b8f00b356acbefa6aeb14dd295d1/pyzmq-27.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dc1091f59143b471d19eb64f54bae4f54bcf2a466ffb66fe45d94d8d734eb495", size = 1657748, upload-time = "2025-06-13T14:07:22.549Z" }, - { url = "https://files.pythonhosted.org/packages/8c/f4/17f965d0ee6380b1d6326da842a50e4b8b9699745161207945f3745e8cb5/pyzmq-27.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7011ade88c8e535cf140f8d1a59428676fbbce7c6e54fefce58bf117aefb6667", size = 2034311, upload-time = "2025-06-13T14:07:23.966Z" }, - { url = "https://files.pythonhosted.org/packages/e0/6e/7c391d81fa3149fd759de45d298003de6cfab343fb03e92c099821c448db/pyzmq-27.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2c386339d7e3f064213aede5d03d054b237937fbca6dd2197ac8cf3b25a6b14e", size = 1893630, upload-time = "2025-06-13T14:07:25.899Z" }, - { url = "https://files.pythonhosted.org/packages/0e/e0/eaffe7a86f60e556399e224229e7769b717f72fec0706b70ab2c03aa04cb/pyzmq-27.0.0-cp311-cp311-win32.whl", hash = "sha256:0546a720c1f407b2172cb04b6b094a78773491497e3644863cf5c96c42df8cff", size = 567706, upload-time = "2025-06-13T14:07:27.595Z" }, - { url = "https://files.pythonhosted.org/packages/c9/05/89354a8cffdcce6e547d48adaaf7be17007fc75572123ff4ca90a4ca04fc/pyzmq-27.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:15f39d50bd6c9091c67315ceb878a4f531957b121d2a05ebd077eb35ddc5efed", size = 630322, upload-time = "2025-06-13T14:07:28.938Z" }, - { url = "https://files.pythonhosted.org/packages/fa/07/4ab976d5e1e63976719389cc4f3bfd248a7f5f2bb2ebe727542363c61b5f/pyzmq-27.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c5817641eebb391a2268c27fecd4162448e03538387093cdbd8bf3510c316b38", size = 558435, upload-time = "2025-06-13T14:07:30.256Z" }, - { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438, upload-time = "2025-06-13T14:07:31.676Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095, upload-time = "2025-06-13T14:07:33.104Z" }, - { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826, upload-time = "2025-06-13T14:07:34.831Z" }, - { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750, upload-time = "2025-06-13T14:07:36.553Z" }, - { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357, upload-time = "2025-06-13T14:07:38.21Z" }, - { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281, upload-time = "2025-06-13T14:07:39.599Z" }, - { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110, upload-time = "2025-06-13T14:07:41.027Z" }, - { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297, upload-time = "2025-06-13T14:07:42.533Z" }, - { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203, upload-time = "2025-06-13T14:07:43.843Z" }, - { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927, upload-time = "2025-06-13T14:07:45.51Z" }, - { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826, upload-time = "2025-06-13T14:07:46.881Z" }, - { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283, upload-time = "2025-06-13T14:07:49.562Z" }, - { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567, upload-time = "2025-06-13T14:07:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681, upload-time = "2025-06-13T14:07:52.77Z" }, - { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148, upload-time = "2025-06-13T14:07:54.178Z" }, - { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768, upload-time = "2025-06-13T14:07:55.714Z" }, - { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199, upload-time = "2025-06-13T14:07:57.166Z" }, - { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439, upload-time = "2025-06-13T14:07:58.959Z" }, - { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload-time = "2025-06-13T14:08:00.777Z" }, - { url = "https://files.pythonhosted.org/packages/98/a6/92394373b8dbc1edc9d53c951e8d3989d518185174ee54492ec27711779d/pyzmq-27.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd1dc59763effd1576f8368047c9c31468fce0af89d76b5067641137506792ae", size = 835948, upload-time = "2025-06-13T14:08:43.516Z" }, - { url = "https://files.pythonhosted.org/packages/56/f3/4dc38d75d9995bfc18773df3e41f2a2ca9b740b06f1a15dbf404077e7588/pyzmq-27.0.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:60e8cc82d968174650c1860d7b716366caab9973787a1c060cf8043130f7d0f7", size = 799874, upload-time = "2025-06-13T14:08:45.017Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ba/64af397e0f421453dc68e31d5e0784d554bf39013a2de0872056e96e58af/pyzmq-27.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:14fe7aaac86e4e93ea779a821967360c781d7ac5115b3f1a171ced77065a0174", size = 567400, upload-time = "2025-06-13T14:08:46.855Z" }, - { url = "https://files.pythonhosted.org/packages/63/87/ec956cbe98809270b59a22891d5758edae147a258e658bf3024a8254c855/pyzmq-27.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ad0562d4e6abb785be3e4dd68599c41be821b521da38c402bc9ab2a8e7ebc7e", size = 747031, upload-time = "2025-06-13T14:08:48.419Z" }, - { url = "https://files.pythonhosted.org/packages/be/8a/4a3764a68abc02e2fbb0668d225b6fda5cd39586dd099cee8b2ed6ab0452/pyzmq-27.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:9df43a2459cd3a3563404c1456b2c4c69564daa7dbaf15724c09821a3329ce46", size = 544726, upload-time = "2025-06-13T14:08:49.903Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e7/8d/5b3d5631c2f4b4b8862f64cd0c9eb777b5710eeb5125b4be8dd0a200a4c0/pyzmq-27.2.0.tar.gz", hash = "sha256:54d4259d1bfae24ecdb5ca79f7acc2eac6c286a02d6a0ae617797cb45f0726d3", size = 292316, upload-time = "2026-08-20T19:08:21.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/2e/8897afa4538707d86645f51cc50e66b2b84900edb1be9dc9af2c2fc04e5d/pyzmq-27.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9216132843d139a123f243c07fe70f7487dce5041093dd77040f9adb5dc91872", size = 1457109, upload-time = "2026-08-20T19:06:26.022Z" }, + { url = "https://files.pythonhosted.org/packages/d1/bc/dbce7bc1654fa25b1e68b9bad9e547906f581ce919c186a88ed951cb794c/pyzmq-27.2.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d41ebb260b69329b7d4a2936d44c872c86dd785355b51366c8b14e07ed7e9373", size = 985701, upload-time = "2026-08-20T19:06:27.481Z" }, + { url = "https://files.pythonhosted.org/packages/95/cf/6981738b57c83fef33f356141ad83bf51e92f2f70c9d5767affd1a699f07/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468139ddb2e494d06e586bd3a6835077e8b3764560c8db552fe685c5867fc24e", size = 714285, upload-time = "2026-08-20T19:06:28.962Z" }, + { url = "https://files.pythonhosted.org/packages/50/b5/13657961a845e29c28a4e7ac4202999ec90b3bba1890a5469ce2ae90359d/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39755dc4a923021bd0677990ffdbc21cff0e1ee1cf07fe3817acea153ef4cb67", size = 888465, upload-time = "2026-08-20T19:06:30.4Z" }, + { url = "https://files.pythonhosted.org/packages/58/5a/ca7ee7a767413d4ba858e93748b95e30b35b8c139849fba94de4433ea2e5/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:714f8cbd66c7e405338d668f79d2fe83fe923defe348e843be998603cf92eeff", size = 1705731, upload-time = "2026-08-20T19:06:31.819Z" }, + { url = "https://files.pythonhosted.org/packages/0b/8b/083f6184e4eba566c9a3cc9974b1b0fe327b7093788135ba8133edaa67a6/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1132805970045adb9f5f05dd57040978286a8e21a5475f2c2ddf1bc983b9a2c7", size = 2074243, upload-time = "2026-08-20T19:06:33.36Z" }, + { url = "https://files.pythonhosted.org/packages/57/f5/249362b664ae725d534c8843214fa9fd7fccd74532a19e24603954a88a7d/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b26f2d0493b79ce3c3112c8a12649418915582ba4707b8ed9f44febf2be71f42", size = 1926859, upload-time = "2026-08-20T19:06:34.796Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cc/23c613c15f06d879f13364d14c17e5e4e8304049411e96c1410e6e56c3ea/pyzmq-27.2.0-cp311-cp311-win32.whl", hash = "sha256:44f261eca7dfb9904ea2b56428f59ab693bbe2715c0413a701f17b067ebf877c", size = 570747, upload-time = "2026-08-20T19:06:36.337Z" }, + { url = "https://files.pythonhosted.org/packages/dc/bc/bbbcf89003c93f18e33665c26e3c48d75e3915c3dd22887f3a7aea2c5e26/pyzmq-27.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b86e04f55af0f4d8cd8ecf14c0b8b81ebc8fd66fa20126b753514628ecadc7e", size = 644845, upload-time = "2026-08-20T19:06:37.711Z" }, + { url = "https://files.pythonhosted.org/packages/14/c5/4635d0ba2b8493edf6d5541fff0b07fa1d986fdfc29c596a53a21e20f9af/pyzmq-27.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:917d601e9540098f580d2723d0ce6402cdb6f02bc8dc2de74e0dca6e13bffd1b", size = 567495, upload-time = "2026-08-20T19:06:39.246Z" }, + { url = "https://files.pythonhosted.org/packages/57/8a/153532fa53db30e116118164f3af269a1f3966b3e2ba32c89b12fe864bd8/pyzmq-27.2.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:591c8de5851c5ea372194469fe97587b97c3b641e9a70f31bb3474acbfde0241", size = 1431074, upload-time = "2026-08-20T19:06:40.601Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ef/c08b91248bb90a9efa81fa00ba81b69c157c74d0c5efbb2c319d91babb62/pyzmq-27.2.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:00e73942ef12cecbc7951c4a9104bb8ffaed742abb13af2da6833d90dd368cef", size = 973915, upload-time = "2026-08-20T19:06:42.037Z" }, + { url = "https://files.pythonhosted.org/packages/b4/78/a3a3a86c2b00fadb92ece1ca4f8f028d62b2ce9ac3526097239ab2d6fba9/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f8079d0521fe94bbb401fe9407578b28f3701627c8be2c9f7e0c5b77dcb0109", size = 697722, upload-time = "2026-08-20T19:06:43.325Z" }, + { url = "https://files.pythonhosted.org/packages/62/2c/d5828306f795e8d34676d266823b74e2101e0ad3760d12083de3e02abbb2/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dea74fd65f1fc5f7fe167916a473ebe6ed6174e5e5d9de11ea6583661be6cf43", size = 872258, upload-time = "2026-08-20T19:06:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/51253b78fd8739293e283407eeecb14215c02c71b6519af21f6eed8e69cd/pyzmq-27.2.0-cp312-abi3-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dcc99ca132b667a4ed750afd42db4ea73288f18425a9b2e3c0af095665c491f5", size = 739591, upload-time = "2026-08-20T19:06:46.214Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3e/142c85b67a4c9678629b0cf6d5125b29663d75be69bfaa57a3cac344d780/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b8d5f66e4a8246cf77f7b8f7902af64f00553368fa0373c89d99b78f0ad79394", size = 1689031, upload-time = "2026-08-20T19:06:47.612Z" }, + { url = "https://files.pythonhosted.org/packages/0e/ee/0776fb0f98ed1eb74d77240087fef0ab045b6ad15cb09555c6c5134c98ad/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:d1526b42a2e725b84ed226f37becedc250c6347594e5ed304e4e9aff68c9aec3", size = 2059547, upload-time = "2026-08-20T19:06:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0e/ec77f691a4aebe29ab6329f996fb0e0270c876a3016086e3ca6ef733bcae/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f707bcf2c1d007d14d70531d4dd7b41060881c73efa845580bf6faaf9ea24d42", size = 1910457, upload-time = "2026-08-20T19:06:50.783Z" }, + { url = "https://files.pythonhosted.org/packages/30/97/1f5530ff4fc271b4597048371d5af972c2baab51be132ba15874e0327a6a/pyzmq-27.2.0-cp312-abi3-win32.whl", hash = "sha256:fdaaa4ea3242f6ad298eb5177eb042aea5c73c30e76d20caee7b15af20d24ec2", size = 563450, upload-time = "2026-08-20T19:06:52.307Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/b83f7780dad22e0878e4c7bd9158ebd24ed12bc3d5e3a471cd0576f77ded/pyzmq-27.2.0-cp312-abi3-win_amd64.whl", hash = "sha256:2c218c6ab8bc447ba62054b581fd30209689d199c6ecb253f79615ca74a38e12", size = 628633, upload-time = "2026-08-20T19:06:53.809Z" }, + { url = "https://files.pythonhosted.org/packages/52/aa/3918b5ac7f9987bd9c421b065074fd7409ded88f856f2c704a24341877ec/pyzmq-27.2.0-cp312-abi3-win_arm64.whl", hash = "sha256:348d6fd3e4b81ae4580622ea8c2ea60224e84b2ac1b3be4482e6edc7de06e7a3", size = 556006, upload-time = "2026-08-20T19:06:55.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/5e/d0541596b48c5a19f85dcbea83d6673d8e91681cdf853eb194c31fc9766e/pyzmq-27.2.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:c551b9e2f86dc625fcb1a032c0d68042678caf96a8dd7c28796766b673bd5b52", size = 1127193, upload-time = "2026-08-20T19:06:56.545Z" }, + { url = "https://files.pythonhosted.org/packages/50/9f/8c7411bb283982d46e6d56dca6a095678c87eb0398daead12776d9881ac2/pyzmq-27.2.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:288cc790da0e3064a14a38ddc56ba169dada8c8af4cb86518db2bcbd380eedbb", size = 1166833, upload-time = "2026-08-20T19:06:58.011Z" }, + { url = "https://files.pythonhosted.org/packages/f9/84/a849161ff88b2de9b991cc8ab332218824741122fdc4fdf222a5b822ac8c/pyzmq-27.2.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:3d45189c0c3c99f817b7fefff0d32eeef684cf33e1e3c0fc4281515357c54702", size = 1134452, upload-time = "2026-08-20T19:06:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/3c/34/ff4aaff0cfba2a4d7ad1a16ffedc52c6deb89fcf673d455085446b23f215/pyzmq-27.2.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:d61910b52be5b2cd8b248dbcbe3a1b0275556a7d99fb613fc43323b546e273b8", size = 1167520, upload-time = "2026-08-20T19:07:01.283Z" }, + { url = "https://files.pythonhosted.org/packages/b6/07/42111e9dc1041d78b4443d6eb1b82b027f1a58178dc8a38385effbc72ad5/pyzmq-27.2.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3ab6eb88590e510ab16715c32dbba12000da9bee989fdadd9ee19a234c492eb7", size = 1466289, upload-time = "2026-08-20T19:07:02.738Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b4/def7a478458da78665840564161772e7e938600c32a89f28e8b221b54d2d/pyzmq-27.2.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1ecbdd131b9669f62d3a45afee5527c7ae9f141e4301267f21714c90bd21725f", size = 975868, upload-time = "2026-08-20T19:07:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/38/d5/e3e85f7fea37153097aaff49db9e33093909cc2a7b22c1ac4ebe546600fc/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3146385b94a760236c5eceff468a66a296a716ca98a2e0f9217b1518118466b1", size = 706054, upload-time = "2026-08-20T19:07:05.623Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ef/3b7d9449b223183222bf517245e1e53d5f1ab8c10be8b45f6a301b2f994a/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9846e881620dd62566ca76a53e384c3f37490faf4b9240aebc7498810dfca853", size = 878984, upload-time = "2026-08-20T19:07:07.153Z" }, + { url = "https://files.pythonhosted.org/packages/be/a5/8b49dbd494f6dcfda69dc4cade322a4b02706ef4e3d30cc366d4e369899f/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d9527e3dbaef1edaeeb2446fa7379446814a43ade8adc7c4a5ebe69437815ddd", size = 1697489, upload-time = "2026-08-20T19:07:08.945Z" }, + { url = "https://files.pythonhosted.org/packages/da/5a/4bb8280901130c26ea25f0cbb4a6d39d94250860c6b3dbd912f1cf48fca7/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:56b48fa9d478a3af7254f397697a62f5ad3e1bb677e200b2701f0c290d97e5af", size = 2064236, upload-time = "2026-08-20T19:07:10.384Z" }, + { url = "https://files.pythonhosted.org/packages/de/38/f433af66922554adb2b5f79e897018c8e19a90b9eaeb49c4814f8355ebe4/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bf0b6e4ce1bb089751c504c5493d6b0557eabd02dd21b76e9086cf964234b103", size = 1917424, upload-time = "2026-08-20T19:07:11.909Z" }, + { url = "https://files.pythonhosted.org/packages/36/81/ea1c1ae3f801d96ba2c269e056761ebcfe023476e651d3af2a7817962051/pyzmq-27.2.0-cp314-cp314t-win32.whl", hash = "sha256:fba8afcf265c6e9fbe1594cb045d4765c6c9a7d607653a8196067ef23566b843", size = 591103, upload-time = "2026-08-20T19:07:13.451Z" }, + { url = "https://files.pythonhosted.org/packages/8a/04/149a627707e780fa9f2c1ede3590c14fa6b18b5576d15744342622299a50/pyzmq-27.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d1bc1d380a91d954ed5fc9f12915dba014eed0978d2de05ee7ca688bdaac144a", size = 670215, upload-time = "2026-08-20T19:07:15.069Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/f9c3c1536c41ef3dbf765ea04218990e2056e558f98184ecd883767fc501/pyzmq-27.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:c7cfb75caa83f5153c687e9d2107f64b5ef0ef0d6edd260d3ff920baaaa69101", size = 582252, upload-time = "2026-08-20T19:07:16.582Z" }, + { url = "https://files.pythonhosted.org/packages/fa/00/78fe097a304a408275747ce43f20428789130b059c5649956277c20f30cf/pyzmq-27.2.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:c5129a8fe43ecc49b99eb75616603d483a3c2fcaef504988fafe8ea392aea98b", size = 1134295, upload-time = "2026-08-20T19:07:17.94Z" }, + { url = "https://files.pythonhosted.org/packages/f2/83/1c36270658d2ee56e23a3f9ef5fbcb94cbd2f9fe966a6641f2f38e697162/pyzmq-27.2.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:baa2ce3485145653194d6c8c5beedd1e9f0bf46a0919c9fa2fe2204fc35b74d9", size = 1167492, upload-time = "2026-08-20T19:07:19.476Z" }, + { url = "https://files.pythonhosted.org/packages/58/b2/f0ae223438d7faa991f6feefdc823815f11cc604f898738376b59fd96515/pyzmq-27.2.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e1ed46048d1920cabc96d952a0d5cfe4127ad8db572c335aae4e3c57b9278d7f", size = 1465992, upload-time = "2026-08-20T19:07:20.941Z" }, + { url = "https://files.pythonhosted.org/packages/59/46/fb56f3f37a6a0937b0e1d2885e808b5eedc171320bac85573cfae78fa9bc/pyzmq-27.2.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e0fa0bc6b1a184aee59b32efcd1b7f0e6d5b8f9387799e4c16a4cb66a86747d6", size = 976118, upload-time = "2026-08-20T19:07:22.577Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/a2c9bfd7c4d34eea1278493cd041bc000d41acb4463c89ceaad29dc813b6/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4bd6743e8bf854c3bfce892dd6578a514aabf128e37a4b2eafcf01856f7e44", size = 705968, upload-time = "2026-08-20T19:07:24.019Z" }, + { url = "https://files.pythonhosted.org/packages/d6/12/b906b269116b6591dc15c0acc5d04c043957c8a531d336999731f4b1d899/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95369ed6626afcfe2ac89832fb1b917c077fbeb905fbbe5d918349ce0222b89b", size = 879011, upload-time = "2026-08-20T19:07:25.428Z" }, + { url = "https://files.pythonhosted.org/packages/12/13/f96359534bfb77651c15f1fbfc4bfdd7ec3489d23f434706d39598dd0dcd/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40124779c3a56ad5d91902df1ff89159cb414b6c1a0ee697abcc66cf5e6db62d", size = 1697496, upload-time = "2026-08-20T19:07:26.821Z" }, + { url = "https://files.pythonhosted.org/packages/21/b4/2c007ae5f2fe5eca86cbfbc874ed86b5135f2f7812615dfd78606d3c93f6/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:ec8a318dfc27c7d946651b3d9e8025d5734f30c168a822195601827207bac09b", size = 2064347, upload-time = "2026-08-20T19:07:28.315Z" }, + { url = "https://files.pythonhosted.org/packages/9b/88/767af3a6630c15215f3a66700ec79598a375edd1fdc9d75a3ad522178c01/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:88c0fac061bac269076edeb3a209acefc96cd6167c239daf1c2b404ac48d7012", size = 1917360, upload-time = "2026-08-20T19:07:29.693Z" }, + { url = "https://files.pythonhosted.org/packages/35/c1/80dd2d20d6e57bc68e1dce1e84bf3e76c9577c1bf728199985c8b4ea0fd1/pyzmq-27.2.0-cp315-cp315t-win32.whl", hash = "sha256:ac126d48cf18aa955daabef43bf0009ff76ad4deee437d09ecf15388214b5beb", size = 591073, upload-time = "2026-08-20T19:07:31.341Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b5/33b781666f3f52ae834bc9c8e38f4f0483a826c5a91cccc993292007bf10/pyzmq-27.2.0-cp315-cp315t-win_amd64.whl", hash = "sha256:edce90a1e588ec63adbf612cc0ad582de4169cd216c7ae53c15f42a2ee902f35", size = 670701, upload-time = "2026-08-20T19:07:32.895Z" }, + { url = "https://files.pythonhosted.org/packages/6e/97/bc4f0edefb992df4fdebcf9f0cc40f631cd4ed277e1ed59ef2cd99a5c8c5/pyzmq-27.2.0-cp315-cp315t-win_arm64.whl", hash = "sha256:a843094b4d3d633bc3623e47a2ff50742d6af02bc1f7606aa2e67e971e21878d", size = 581985, upload-time = "2026-08-20T19:07:34.19Z" }, + { url = "https://files.pythonhosted.org/packages/93/22/7187a1f0bf2b8bf8dc6b91762438fb9b472f684f2dc4cb74a24bf8957943/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a7c1144dc61777938e932a2c9011b980b89fd8ff3733033b34c44c299187a6e1", size = 875015, upload-time = "2026-08-20T19:08:01.692Z" }, + { url = "https://files.pythonhosted.org/packages/92/71/09b71620ad52bad4eb68b1516978ecaf52ef623c3fa16e0732a03cf3274c/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c218b816220d05acf6ab1bafca58926d95cbcc5fec5024724666030466308f0c", size = 774395, upload-time = "2026-08-20T19:08:03.108Z" }, + { url = "https://files.pythonhosted.org/packages/9c/cf/5c8eb9994a14ff5ee5b0cada339421748746c95aee0280c8b656741e8749/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ae6ebbc0bfe5a21ce21e32ba567bf73df2d93888109c65acbd42506cf9395759", size = 877994, upload-time = "2026-08-20T19:08:04.724Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/e22094c5555e550b6450ecfcceb6a1205d893d9a18ae27764c8c45acfb16/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:679b5b1dde326a921ea2c9ec1f9ea3115bfe1b4735779bbc6eb0473a0ed93f71", size = 614492, upload-time = "2026-08-20T19:08:06.487Z" }, + { url = "https://files.pythonhosted.org/packages/d2/28/5b1042899caed18278c56d54a502f5254d463afe8aea1acbecc98e053391/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5c6d8744d10b5e1eadd90a7c58f8546acf6bf680ee463f7e6ada09ad6c9f802", size = 780574, upload-time = "2026-08-20T19:08:07.987Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/f134603a671c114c6b56eb912bba890f09e2d43b8a28d243be5a5507cf2f/pyzmq-27.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3ee8dd7031d5e23f632e0e7eee67183ca7d2536e0de35dc1e5d69f3471a791e8", size = 553961, upload-time = "2026-08-20T19:08:09.651Z" }, ] [[package]] name = "ray" -version = "2.48.0" +version = "2.59.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1808,39 +2371,41 @@ dependencies = [ { name = "requests" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/79/cd0376eef04d5dabdf0de04c0ae7d71447797c6db4a09a3f71e746018cea/ray-2.48.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4b9b92ac29635f555ef341347d9a63dbf02b7d946347239af3c09e364bc45cf8", size = 67315928, upload-time = "2025-07-18T22:32:40.109Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b3/dc73b03bfa75b0668542f77a14d22bee3337754e09af64c7c5c22fdb6649/ray-2.48.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:b94500fe2d17e491fe2e9bd4a3bf62df217e21a8f2845033c353d4d2ea240f73", size = 69829631, upload-time = "2025-07-18T22:32:45.619Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ea/d1f44f5dde662eaf1a61fdfd80b2bac44438506de608c77965be82c2f572/ray-2.48.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:24a70f416ec0be14b975f160044805ccb48cc6bc50de632983eb8f0a8e16682b", size = 69128145, upload-time = "2025-07-18T22:32:51.506Z" }, - { url = "https://files.pythonhosted.org/packages/5c/46/b376189b9df6b41307754bbc8ed8fe191a86908a8a104b37a602897ec5f0/ray-2.48.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:46d4b42a58492dec79caad2d562344689a4f99a828aeea811a0cd2cd653553ef", size = 70079019, upload-time = "2025-07-18T22:32:57.136Z" }, - { url = "https://files.pythonhosted.org/packages/cb/93/98459098f43336ac09c6e5d688468d896f1a791948263727880e1accc7d0/ray-2.48.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfb48c10371c267fdcf7f4ae359cab706f068178b9c65317ead011972f2c0bf3", size = 26763615, upload-time = "2025-07-18T22:33:01.954Z" }, - { url = "https://files.pythonhosted.org/packages/41/53/0d105e1baa6c8c9582f90154ba3f0ca08d58129384ea2707b2e59449b03b/ray-2.48.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:8de799f3b0896f48d306d5e4a04fc6037a08c495d45f9c79935344e5693e3cf8", size = 67302857, upload-time = "2025-07-18T22:33:06.414Z" }, - { url = "https://files.pythonhosted.org/packages/df/c5/7de1e9d92a45b1805fe828dcbd18b4c5a1f35ab3cad9134efeb20a3ab3e5/ray-2.48.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:5a6f57126eac9dd3286289e07e91e87b054792f9698b6f7ccab88b624816b542", size = 69823198, upload-time = "2025-07-18T22:33:12.494Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a6/e7c969bd371c65b7c233d86f23610489e15164ee7eadb3eb78f9d55eda4d/ray-2.48.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:f1cf33d260316f92f77558185f1c36fc35506d76ee7fdfed9f5b70f9c4bdba7f", size = 69151702, upload-time = "2025-07-18T22:33:18.655Z" }, - { url = "https://files.pythonhosted.org/packages/61/02/1894be2ab930b599de0f1f77f785b86c78bda4873c6c2dd65d1de5b40837/ray-2.48.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:a42ed3b640f4b599a3fc8067c83ee60497c0f03d070d7a7df02a388fa17a546b", size = 70124265, upload-time = "2025-07-18T22:33:25.155Z" }, - { url = "https://files.pythonhosted.org/packages/79/8c/d3653d17337fc787af108411d9c9a38333c9fbdf247283ee56dd096d3360/ray-2.48.0-cp312-cp312-win_amd64.whl", hash = "sha256:e15fdffa6b60d5729f6025691396b8a01dc3461ba19dc92bba354ec1813ed6b1", size = 26745570, upload-time = "2025-07-18T22:33:31.328Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7f/0dc9f5464181ecad93ec2d6f106084d46e5c5ec9a8718c1ba60610ea65fe/ray-2.48.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a7a6d830d9dc5ae8bb156fcde9a1adab7f4edb004f03918a724d885eceb8264d", size = 67250116, upload-time = "2025-07-18T22:33:36.572Z" }, - { url = "https://files.pythonhosted.org/packages/22/ef/bf5dc762663475fc40680f44df716c553f5d619c6648c8b43ccde00f13ce/ray-2.48.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:5742b72a514afe5d60f41330200cd508376e16c650f6962e62337aa482d6a0c6", size = 69763475, upload-time = "2025-07-18T22:33:42.297Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7c/498ceb9684971cb5c9722a2c8400919cd886473b77416c23c23e4e7ddc67/ray-2.48.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:622e6bcdb78d98040d87bea94e65d0bb6ccc0ae1b43294c6bd69f542bf28e092", size = 69062026, upload-time = "2025-07-18T22:33:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/dd/4f/bb511598091f06cc7d781868caf833a0c3459b4f51c0b36cfb75dfaa7e4e/ray-2.48.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:25e4b79fcc8f849d72db1acc4f03f37008c5c0b745df63d8a30cd35676b6545e", size = 70039793, upload-time = "2025-07-18T22:33:54.072Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4b/c57f711b3d5a2492b39e25195075008d45edf4e045a08d8ece972b24fef6/ray-2.59.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cedce6af865d078d318bc3f691e41527331d532dca0017fb824191c884e59a22", size = 67431449, upload-time = "2026-10-02T07:02:24.125Z" }, + { url = "https://files.pythonhosted.org/packages/1a/e9/f40e48941d88c95fef0b074319af5f3f30e1046f624244f65480d196ca8c/ray-2.59.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:e59bbeed9fd3ae29e326bcf73a6dc6b957029004230e9f1e874670c4e390b147", size = 77814064, upload-time = "2026-10-02T07:02:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/f6/63/fdacad6a6f5b0bf065efa9b9f083636feb15e1910bee3a865a0175294aea/ray-2.59.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:645f4676ef6ff2ca8154e83edf0b38583d225b6c6fb83b6050ca1681dc3a8688", size = 78796281, upload-time = "2026-10-02T07:02:52.435Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1a/88915bc161c1a57cfcdea65849449a2e668052c103b80e30547ab461f68f/ray-2.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:b967405ba6fb9d36bb04883bb8c4c1048f2e305f30a40080b1c7570efa7188ff", size = 29078533, upload-time = "2026-10-02T07:03:01.16Z" }, + { url = "https://files.pythonhosted.org/packages/21/62/990cf9605814b8b29bdfefa5f009ae5c078b4746acbf39586030178ac8b6/ray-2.59.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:6a240b393819c0c8c03940d16faf952223003ab1d9736d5328cc5a5f71c95e1c", size = 67414852, upload-time = "2026-10-02T07:03:06.647Z" }, + { url = "https://files.pythonhosted.org/packages/15/dd/fd8d8e727241f809977c5f813ded0227c39cc59848b4a2db55c7db8cf310/ray-2.59.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:09e2dd8ba367f07f1829fc2e35f41e9c3fa9f6ec0babace13d70ebe14e8cf662", size = 77850115, upload-time = "2026-10-02T07:03:12.253Z" }, + { url = "https://files.pythonhosted.org/packages/47/09/914175e40868edbc2e5fddcb7ec9a85b755d2266a70d86ceee2effa09fa6/ray-2.59.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:4055a7a60293ffee41005ab9b3ed9933e0f9b5d8450b214f3c0a7b1de5503f0e", size = 78870190, upload-time = "2026-10-02T07:03:17.912Z" }, + { url = "https://files.pythonhosted.org/packages/68/73/1de47f6dba02a1f203e0c5697697003e95d4313836b52dbbd340de2906a5/ray-2.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:71a8ff087739044a0d596daeccde33da02afd6d0dacfecae962c395cb3e90d78", size = 29057753, upload-time = "2026-10-02T07:03:22.679Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b8/6a82f95c7987f6f660a35b73d5fdb28521cf2e3e3b680a777ef838c6b248/ray-2.59.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:843bf48f42722e0c143eba6846b5819716bb7e5e044b9e4779b1d3ac5933040b", size = 67360214, upload-time = "2026-10-02T07:03:27.329Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d4/2b0dd44bd0c2e7f3350aad98731ab9aadb4d41f02819d872e058a75210a4/ray-2.59.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:583f26e1f1a04aefd230b908621dc3f3e1ca5e0d201ee09d5f040ca4b824e800", size = 77770538, upload-time = "2026-10-02T07:03:33.59Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/e737527a7f9b16f2c890cf6f6582542e5f6ddb1608fa2390ea485a50d0dd/ray-2.59.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:70fdc5bec47cc33a4f4e0d9b081f66505e119abd8a8bc6cb2c5d4926427fce6d", size = 78796343, upload-time = "2026-10-02T07:03:39.276Z" }, + { url = "https://files.pythonhosted.org/packages/5a/60/32259117d228f5a6e740e0103d3f7ce6e2f2122cf9e562d4785d22aeb4d3/ray-2.59.0-cp313-cp313-win_amd64.whl", hash = "sha256:65288d38b5107a76f36965be1e9d7830613356e0c32d675a44410c30c714f495", size = 29009537, upload-time = "2026-10-02T07:03:43.735Z" }, + { url = "https://files.pythonhosted.org/packages/74/eb/625f30893920995e4b72acf224c064be45765deef2685c701f479fa6bdc7/ray-2.59.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:af31158ee8fead4119c6e4b7b3e0cb3414416599df1da2e4c99e7c53fa5c5fb3", size = 67369542, upload-time = "2026-10-02T07:03:49.417Z" }, + { url = "https://files.pythonhosted.org/packages/39/27/7a698a08edff7d2c3cac2a92df0bafdb3203a400f41b4de8d5555781c2dc/ray-2.59.0-cp314-cp314-manylinux2014_aarch64.whl", hash = "sha256:6d60f9b7a94fc138ac47a07564182769fd6b6cefae0714aa7499a553bdda2949", size = 77759588, upload-time = "2026-10-02T07:03:54.951Z" }, + { url = "https://files.pythonhosted.org/packages/18/df/815ab1f99c99512cbf678bdb86ba1e1bd9d96fe7654b3a1fd8310359a275/ray-2.59.0-cp314-cp314-manylinux2014_x86_64.whl", hash = "sha256:050781099ce641b7d89896e7b0d79c820813529da86c9b5c65ecb7c89403e667", size = 78764177, upload-time = "2026-10-02T07:04:00.927Z" }, + { url = "https://files.pythonhosted.org/packages/69/3c/0919e6996d70daee39e25a405eb4181eae48ba27573dffb1b65f7f15045e/ray-2.59.0-cp314-cp314-win_amd64.whl", hash = "sha256:d3a119eac653c0a1b3bf4e25609de123e5fb994a33d4e1f270ed1ce5e304693d", size = 29593993, upload-time = "2026-10-02T07:04:06.257Z" }, ] [[package]] name = "referencing" -version = "0.36.2" +version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, ] [[package]] name = "requests" -version = "2.32.4" +version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -1848,9 +2413,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] [[package]] @@ -1901,121 +2466,146 @@ wheels = [ [[package]] name = "rpds-py" -version = "0.26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload-time = "2025-07-01T15:57:13.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/4c/4ee8f7e512030ff79fda1df3243c88d70fc874634e2dbe5df13ba4210078/rpds_py-0.26.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed", size = 372610, upload-time = "2025-07-01T15:53:58.844Z" }, - { url = "https://files.pythonhosted.org/packages/fa/9d/3dc16be00f14fc1f03c71b1d67c8df98263ab2710a2fbd65a6193214a527/rpds_py-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0", size = 358032, upload-time = "2025-07-01T15:53:59.985Z" }, - { url = "https://files.pythonhosted.org/packages/e7/5a/7f1bf8f045da2866324a08ae80af63e64e7bfaf83bd31f865a7b91a58601/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1", size = 381525, upload-time = "2025-07-01T15:54:01.162Z" }, - { url = "https://files.pythonhosted.org/packages/45/8a/04479398c755a066ace10e3d158866beb600867cacae194c50ffa783abd0/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7", size = 397089, upload-time = "2025-07-01T15:54:02.319Z" }, - { url = "https://files.pythonhosted.org/packages/72/88/9203f47268db488a1b6d469d69c12201ede776bb728b9d9f29dbfd7df406/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6", size = 514255, upload-time = "2025-07-01T15:54:03.38Z" }, - { url = "https://files.pythonhosted.org/packages/f5/b4/01ce5d1e853ddf81fbbd4311ab1eff0b3cf162d559288d10fd127e2588b5/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e", size = 402283, upload-time = "2025-07-01T15:54:04.923Z" }, - { url = "https://files.pythonhosted.org/packages/34/a2/004c99936997bfc644d590a9defd9e9c93f8286568f9c16cdaf3e14429a7/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d", size = 383881, upload-time = "2025-07-01T15:54:06.482Z" }, - { url = "https://files.pythonhosted.org/packages/05/1b/ef5fba4a8f81ce04c427bfd96223f92f05e6cd72291ce9d7523db3b03a6c/rpds_py-0.26.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3", size = 415822, upload-time = "2025-07-01T15:54:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/16/80/5c54195aec456b292f7bd8aa61741c8232964063fd8a75fdde9c1e982328/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107", size = 558347, upload-time = "2025-07-01T15:54:08.591Z" }, - { url = "https://files.pythonhosted.org/packages/f2/1c/1845c1b1fd6d827187c43afe1841d91678d7241cbdb5420a4c6de180a538/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a", size = 587956, upload-time = "2025-07-01T15:54:09.963Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ff/9e979329dd131aa73a438c077252ddabd7df6d1a7ad7b9aacf6261f10faa/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318", size = 554363, upload-time = "2025-07-01T15:54:11.073Z" }, - { url = "https://files.pythonhosted.org/packages/00/8b/d78cfe034b71ffbe72873a136e71acc7a831a03e37771cfe59f33f6de8a2/rpds_py-0.26.0-cp311-cp311-win32.whl", hash = "sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a", size = 220123, upload-time = "2025-07-01T15:54:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/94/c1/3c8c94c7dd3905dbfde768381ce98778500a80db9924731d87ddcdb117e9/rpds_py-0.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03", size = 231732, upload-time = "2025-07-01T15:54:13.434Z" }, - { url = "https://files.pythonhosted.org/packages/67/93/e936fbed1b734eabf36ccb5d93c6a2e9246fbb13c1da011624b7286fae3e/rpds_py-0.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41", size = 221917, upload-time = "2025-07-01T15:54:14.559Z" }, - { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload-time = "2025-07-01T15:54:15.734Z" }, - { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload-time = "2025-07-01T15:54:16.922Z" }, - { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload-time = "2025-07-01T15:54:18.101Z" }, - { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload-time = "2025-07-01T15:54:19.295Z" }, - { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload-time = "2025-07-01T15:54:20.858Z" }, - { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload-time = "2025-07-01T15:54:22.508Z" }, - { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload-time = "2025-07-01T15:54:23.987Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload-time = "2025-07-01T15:54:25.073Z" }, - { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload-time = "2025-07-01T15:54:26.225Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload-time = "2025-07-01T15:54:27.424Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload-time = "2025-07-01T15:54:29.93Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload-time = "2025-07-01T15:54:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload-time = "2025-07-01T15:54:32.195Z" }, - { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload-time = "2025-07-01T15:54:33.271Z" }, - { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload-time = "2025-07-01T15:54:34.755Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload-time = "2025-07-01T15:54:36.292Z" }, - { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload-time = "2025-07-01T15:54:37.469Z" }, - { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload-time = "2025-07-01T15:54:38.954Z" }, - { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload-time = "2025-07-01T15:54:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload-time = "2025-07-01T15:54:43.025Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload-time = "2025-07-01T15:54:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload-time = "2025-07-01T15:54:46.043Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload-time = "2025-07-01T15:54:47.64Z" }, - { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload-time = "2025-07-01T15:54:48.9Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload-time = "2025-07-01T15:54:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload-time = "2025-07-01T15:54:52.023Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload-time = "2025-07-01T15:54:53.692Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload-time = "2025-07-01T15:54:54.822Z" }, - { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload-time = "2025-07-01T15:54:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload-time = "2025-07-01T15:54:58.561Z" }, - { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload-time = "2025-07-01T15:54:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload-time = "2025-07-01T15:55:00.898Z" }, - { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload-time = "2025-07-01T15:55:02.201Z" }, - { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload-time = "2025-07-01T15:55:03.698Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload-time = "2025-07-01T15:55:05.398Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload-time = "2025-07-01T15:55:08.316Z" }, - { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload-time = "2025-07-01T15:55:09.52Z" }, - { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload-time = "2025-07-01T15:55:11.216Z" }, - { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload-time = "2025-07-01T15:55:13.004Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload-time = "2025-07-01T15:55:14.486Z" }, - { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload-time = "2025-07-01T15:55:15.745Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload-time = "2025-07-01T15:55:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload-time = "2025-07-01T15:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload-time = "2025-07-01T15:55:20.399Z" }, - { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload-time = "2025-07-01T15:55:21.729Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload-time = "2025-07-01T15:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload-time = "2025-07-01T15:55:24.207Z" }, - { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload-time = "2025-07-01T15:55:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload-time = "2025-07-01T15:55:27.798Z" }, - { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload-time = "2025-07-01T15:55:29.057Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload-time = "2025-07-01T15:55:30.719Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload-time = "2025-07-01T15:55:31.981Z" }, - { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload-time = "2025-07-01T15:55:33.312Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload-time = "2025-07-01T15:55:34.933Z" }, - { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload-time = "2025-07-01T15:55:36.202Z" }, - { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload-time = "2025-07-01T15:55:37.483Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload-time = "2025-07-01T15:55:38.828Z" }, - { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload-time = "2025-07-01T15:55:40.175Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload-time = "2025-07-01T15:55:42.015Z" }, - { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload-time = "2025-07-01T15:55:43.603Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload-time = "2025-07-01T15:55:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload-time = "2025-07-01T15:55:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload-time = "2025-07-01T15:55:48.412Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload-time = "2025-07-01T15:55:49.816Z" }, - { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload-time = "2025-07-01T15:55:51.192Z" }, - { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload-time = "2025-07-01T15:55:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload-time = "2025-07-01T15:55:53.874Z" }, - { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload-time = "2025-07-01T15:55:55.167Z" }, - { url = "https://files.pythonhosted.org/packages/51/f2/b5c85b758a00c513bb0389f8fc8e61eb5423050c91c958cdd21843faa3e6/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674", size = 373505, upload-time = "2025-07-01T15:56:34.716Z" }, - { url = "https://files.pythonhosted.org/packages/23/e0/25db45e391251118e915e541995bb5f5ac5691a3b98fb233020ba53afc9b/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696", size = 359468, upload-time = "2025-07-01T15:56:36.219Z" }, - { url = "https://files.pythonhosted.org/packages/0b/73/dd5ee6075bb6491be3a646b301dfd814f9486d924137a5098e61f0487e16/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb", size = 382680, upload-time = "2025-07-01T15:56:37.644Z" }, - { url = "https://files.pythonhosted.org/packages/2f/10/84b522ff58763a5c443f5bcedc1820240e454ce4e620e88520f04589e2ea/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88", size = 397035, upload-time = "2025-07-01T15:56:39.241Z" }, - { url = "https://files.pythonhosted.org/packages/06/ea/8667604229a10a520fcbf78b30ccc278977dcc0627beb7ea2c96b3becef0/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8", size = 514922, upload-time = "2025-07-01T15:56:40.645Z" }, - { url = "https://files.pythonhosted.org/packages/24/e6/9ed5b625c0661c4882fc8cdf302bf8e96c73c40de99c31e0b95ed37d508c/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5", size = 402822, upload-time = "2025-07-01T15:56:42.137Z" }, - { url = "https://files.pythonhosted.org/packages/8a/58/212c7b6fd51946047fb45d3733da27e2fa8f7384a13457c874186af691b1/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7", size = 384336, upload-time = "2025-07-01T15:56:44.239Z" }, - { url = "https://files.pythonhosted.org/packages/aa/f5/a40ba78748ae8ebf4934d4b88e77b98497378bc2c24ba55ebe87a4e87057/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b", size = 416871, upload-time = "2025-07-01T15:56:46.284Z" }, - { url = "https://files.pythonhosted.org/packages/d5/a6/33b1fc0c9f7dcfcfc4a4353daa6308b3ece22496ceece348b3e7a7559a09/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb", size = 559439, upload-time = "2025-07-01T15:56:48.549Z" }, - { url = "https://files.pythonhosted.org/packages/71/2d/ceb3f9c12f8cfa56d34995097f6cd99da1325642c60d1b6680dd9df03ed8/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0", size = 588380, upload-time = "2025-07-01T15:56:50.086Z" }, - { url = "https://files.pythonhosted.org/packages/c8/ed/9de62c2150ca8e2e5858acf3f4f4d0d180a38feef9fdab4078bea63d8dba/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c", size = 555334, upload-time = "2025-07-01T15:56:51.703Z" }, +version = "2026.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/42/68/3bd46b8a5e01d3c2ebdf9c5e9497912e3fe0cde02bac21a7130ca866e403/rpds_py-2026.9.1.tar.gz", hash = "sha256:4793ef7f78268b124b73fa933440f01d258bbae01de9fa53e9080c9ab0425a12", size = 63948, upload-time = "2026-10-04T16:32:36.469Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/6d/ddb8dfcf41892ba9c672d27988592c038d30db61708230313831b6780a1b/rpds_py-2026.9.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2711d29b653b3bce48a63d18b9c6b53274669e6d6c4094dddeb4d9a0e45128b2", size = 344947, upload-time = "2026-10-04T16:28:55.207Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b2/632c3d034961149eff606e3e357547620a9ab37b849ae5815f67838753fd/rpds_py-2026.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3231c4c0e521dafa5be0c9f114ee2c2ad46650836f2d72caa86801950c3e7044", size = 346770, upload-time = "2026-10-04T16:28:56.884Z" }, + { url = "https://files.pythonhosted.org/packages/6d/45/4df346410bb873d03ec60c3b891d1fceb8cabde1971d29844bbb625cc296/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e01b3c878c8641913e688edd1b3f08658c6783d29cf6b826bd3c0d1ae7a1ffaa", size = 377795, upload-time = "2026-10-04T16:28:58.193Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b8/a70f302207e4f29f873c01a986fcac5def49b9c8224328cef1ad7da6b7a9/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e524c7874ac72884d28e16dd5b8d839fd09e0fe76b020d3fbca23212a7b8c52", size = 383137, upload-time = "2026-10-04T16:28:59.411Z" }, + { url = "https://files.pythonhosted.org/packages/13/e3/3aa28a48a01169d0e20728bf0e5ebbea3ae2774285b40853ae49b3ef332a/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:761fdae6728ceb99ab182fad2f0cc1e262f610834dc891aea1d1a2a2e634776f", size = 496789, upload-time = "2026-10-04T16:29:01.011Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a7/414e8d088602d66ad6f47c65bf07fe5090992a8574cdd4571c1a83b647ed/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b723eb406dec5bc9ec516c73ab9c3239a3284e017f7eb89ee2b3258bd504fb7", size = 395929, upload-time = "2026-10-04T16:29:02.465Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5c/aac3b960fd55d37b49f77c0eebbe043eaf36762ebd48e7b46951e59c1c05/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:136a1c3fe4402b7008bc81cb62ee538481795b61a7e83df88dff3b3f02b726ff", size = 375426, upload-time = "2026-10-04T16:29:03.944Z" }, + { url = "https://files.pythonhosted.org/packages/d3/80/77987a41c40be7202a78d9aed4a650bfb05792237cfd3b9e22638d990fe5/rpds_py-2026.9.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:839dde845559254f34885267c6878f60d61d5205180226d976fe488d45fa128e", size = 381497, upload-time = "2026-10-04T16:29:05.308Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d0/640b02eb1ecd71a913c1178b6235287b31006266bca9a26862e80e497b54/rpds_py-2026.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56cd8b3f77d7b6812f533b662186a1f28316931166ddc00fb893b1b0db7e9888", size = 405740, upload-time = "2026-10-04T16:29:06.578Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8c/d034195d45d215625a23f2ae85dbbdb86a49a93a51272061c97c80b9d316/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:074a4d198bc34d9a8ea425114fc3ded6d11ec01f6a314a8db67454a5152d8834", size = 555850, upload-time = "2026-10-04T16:29:08.115Z" }, + { url = "https://files.pythonhosted.org/packages/de/f8/532f1addfc86207bc3cf23749638bb0d457bce891595012ed8a08d0543b8/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6beb738155fe8ab8091afdfa5a3226b21c2b1593f1e50ebb90eb25b44dbc0391", size = 618661, upload-time = "2026-10-04T16:29:09.554Z" }, + { url = "https://files.pythonhosted.org/packages/50/5b/b0f2c9833a36a5b1f6ac5cb0e635fabacf713266f46ceefba2102da0bf51/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57492a550a1d88d29d003247e5f78dd8cf04a701fac0e4c8db8745a6d2504e0a", size = 583530, upload-time = "2026-10-04T16:29:11.072Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/464ed4b98d3c8c6a334f3b5e24d3886de04b05658a95fc40a37e0e6e4775/rpds_py-2026.9.1-cp311-cp311-win32.whl", hash = "sha256:d95a354e02393eada6d7351184671aced9d4cce109dabf927cb7aa99624352a1", size = 208125, upload-time = "2026-10-04T16:29:12.408Z" }, + { url = "https://files.pythonhosted.org/packages/df/c9/384a9b62f8cd89c8e3e609b8c9052c140e8c01d807261e0517c904b8bf29/rpds_py-2026.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4d4f52e2a4324396caddbd45a97d8d7be5f42edd25d2355282a9c34f9b2f7f", size = 226045, upload-time = "2026-10-04T16:29:13.751Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3b/0a691f0dcb2301fa9c736346da2d0d4991778373283301c5c12b8f952f3d/rpds_py-2026.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:fdcd198979b4ecffcc1beba366a7fbcf4eb41243691a82fe52ceb0b902f09c12", size = 222636, upload-time = "2026-10-04T16:29:14.989Z" }, + { url = "https://files.pythonhosted.org/packages/5d/34/a828586ea3329fbb50895b50e9cf98ca3d924a9f41a0b26d443bff1b3794/rpds_py-2026.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:50906f5aea24b5a865cbd0a589698288631d9f3a54c3a937c83aefa95a0d14af", size = 346822, upload-time = "2026-10-04T16:29:16.258Z" }, + { url = "https://files.pythonhosted.org/packages/90/81/ac6a0d064982251856ce009c9e1dd51a34110b3c055aa7d1aad18b4899a3/rpds_py-2026.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e21c1429e205828ea886a2293a4a2c8e01f4c25d9893ca330e97a6cf73f52e7b", size = 341380, upload-time = "2026-10-04T16:29:17.706Z" }, + { url = "https://files.pythonhosted.org/packages/42/ff/bf7d54f362748fd6a49277b9d6531c394074110fedf50ad791ec59133fbb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693b2728bbcc48d09a981a356954b0c47c53ff25b545856f28a889ea619f69a", size = 373053, upload-time = "2026-10-04T16:29:19.063Z" }, + { url = "https://files.pythonhosted.org/packages/60/de/74b0ccdbbd28687b9b5fdb34c1cabed88352182facaced9d6f5486b8b9ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8601470267d938bcb7f3ab1a336100af51a4fd5b6ed030ef52461bb3ef5e7e07", size = 377742, upload-time = "2026-10-04T16:29:20.543Z" }, + { url = "https://files.pythonhosted.org/packages/c2/6d/b979775a3057b2a5c26d75ecbff60a20a24ef081db6dd76836fca3f20247/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3890a6aa36e6baa53d5258a2a25d3ef8b37ad165a6ab27a892d7c3e3a432cd69", size = 487289, upload-time = "2026-10-04T16:29:21.958Z" }, + { url = "https://files.pythonhosted.org/packages/1d/5d/7c34734ce3ece943d9d6ee0122a74a21bbc75b47acb5b7053c83f6efb1ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b5b393eda5ea42cca1c1a6665f2a4882b4fd5d1777e41ce0545a107fb008c9d", size = 390710, upload-time = "2026-10-04T16:29:23.378Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6d/b26eb1e75395925b3a142ed351cbed2ec8212f5c9d937aee3df32c701baa/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addeda51556dac7c1a2f14cda62db8b621cd12afba3091d03a96c72932387eab", size = 371261, upload-time = "2026-10-04T16:29:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/7c/98/b2fdfe10301a9e27af21e634337fbba7baac0bc17fe44619a17c26bba2cb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d9edf30457d74eebfd76b045535e36f1cd89062566a128a0db2145ca042d787e", size = 376075, upload-time = "2026-10-04T16:29:26.748Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b1/c4b8d954e49c3c69cf8063c0c9e0919c99f3d2cecc46311606a1cbe835dc/rpds_py-2026.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815d26356930846a40c7bc1366e7b1b0320ab8a063e66c11298a208bed0fd237", size = 399358, upload-time = "2026-10-04T16:29:28.282Z" }, + { url = "https://files.pythonhosted.org/packages/b3/59/9559a7293c97dff0cbb293efffbd36644103883ecc27741af8ef90c84ca8/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b5a6f40f0a1486b4b36c888123afc67acdbd9f33235927acf5ff295429a0ba3", size = 550267, upload-time = "2026-10-04T16:29:29.851Z" }, + { url = "https://files.pythonhosted.org/packages/6c/9d/6dc60e49511de4c8b00e74f9c1d43aed4d27f712cdb1ade92f2c199cbf64/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5b8b0753718d258fd454283fbd57e14545d3b40583fa672e27cb4f987626bcc", size = 614018, upload-time = "2026-10-04T16:29:31.54Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bc/92a4ecf27301b886232a413360f6b348a81d55ffef654f2ebda5970ebc3d/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:46d80bc76b51a6c24f9944368c28d38b8bcbcea1da4f2f8d3ebc31a67e8c6ec6", size = 578509, upload-time = "2026-10-04T16:29:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/08/53/efb97f2e6589b7ab8394385a73870e0b2ab2a195281c117b21fd6d7d4855/rpds_py-2026.9.1-cp312-cp312-win32.whl", hash = "sha256:befc2d6a953e563f8a7bfd87a42c22ebf8a3e980dcb7b6a4d17b70b0e914e8a3", size = 205401, upload-time = "2026-10-04T16:29:34.451Z" }, + { url = "https://files.pythonhosted.org/packages/1c/84/1700cc748d0eaa747486e4e82882d2575224e6e9a3148df583058850c629/rpds_py-2026.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ce8943f79c2210f7abcc28e86367b03b28d95027fd01c46d2472373ae70c86f", size = 222923, upload-time = "2026-10-04T16:29:35.709Z" }, + { url = "https://files.pythonhosted.org/packages/c3/89/0302215373c2f8b4408b0fdfee955368cc378a98ff59508d47a7e0dc2dbf/rpds_py-2026.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:501909f2e4a1e2dee528ef766fe3c469060ebc17e54a8383d404ba07a81a6f02", size = 218415, upload-time = "2026-10-04T16:29:37.263Z" }, + { url = "https://files.pythonhosted.org/packages/83/ea/ee88fd9e756ff93fb6b1182a47ec09504a242620e33ce1d20679efefe841/rpds_py-2026.9.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a36b70596407634ca82d4b989a3729074a008537a0522e4c8046a67c729103e9", size = 346229, upload-time = "2026-10-04T16:29:38.82Z" }, + { url = "https://files.pythonhosted.org/packages/57/71/a097d6552f837500fc36e6b23d09cfb9890c3cc47531f9ca64e149799615/rpds_py-2026.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eba5d173f7d5708b22a93815017a4611873ed54db9f268077c0dd1ed99cfc858", size = 340514, upload-time = "2026-10-04T16:29:40.405Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b7/497e85768bf4e0d8ddbaa096a4cac31d1509251dee2728a8490aa367e0b5/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:457866b85daf5034296666168b84a69e0b2e89dc4f1af102b46f6448a60b9063", size = 372611, upload-time = "2026-10-04T16:29:41.778Z" }, + { url = "https://files.pythonhosted.org/packages/52/4b/74ab4108916250b6e198e0d3af05bc6835eb046315f22f7a0ceb49667c5a/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3a52a3ba86436ab3aef510fbe21512abc2ddd1993005dfe50514bd2284ef025", size = 377712, upload-time = "2026-10-04T16:29:43.242Z" }, + { url = "https://files.pythonhosted.org/packages/0c/8e/067e77d9d7b3cc793c9d909b7e97e7aadbbb1fb094093b6876902cc96d38/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7841166b7fa64c9c56404617ae4341448847482d45933b13135d26c130519e5", size = 488106, upload-time = "2026-10-04T16:29:44.692Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b4/c5aae6c2dde269bf955f6b7d35065c655a57e47750d9668052ad67e74dda/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:926bdd3e3b5998ddf70cc64bc8cf57209571f9044542913afb673799fec77dd0", size = 390795, upload-time = "2026-10-04T16:29:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/a0/36/76fab39973ee11e7f9f357c55138197bb01c86f6502cb76487e3b4f42db0/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b85224291c6cb6759f9b5adb9745f486d226f62b16a614dd5a2a5ab2b35b", size = 370794, upload-time = "2026-10-04T16:29:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/3d/fe/cd2a80e6d7b871937a60e935c5d507aa390d143f4ff3636f640b9733d5df/rpds_py-2026.9.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3cd182d7291d29b92c521a0069d9c01ba6193628a9a105531d11b40a6d731a33", size = 375673, upload-time = "2026-10-04T16:29:49.223Z" }, + { url = "https://files.pythonhosted.org/packages/6c/18/7464a9953724e55a3b3206062fa0ffdeaa519584c6aabf65d3956d94f131/rpds_py-2026.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ea1cda8d8c688278430e4268a42f5e5da3bdd74578dfadc0820c3f1766ce83", size = 398758, upload-time = "2026-10-04T16:29:50.601Z" }, + { url = "https://files.pythonhosted.org/packages/c0/86/1534b436700fd49ff411063b7c4d7e938adfabf90895b6cf1622d5a7d1f6/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5943980471829f6de242a20b109de3111ba6b77e3af0ffc587028ac854b05e6c", size = 550370, upload-time = "2026-10-04T16:29:52.002Z" }, + { url = "https://files.pythonhosted.org/packages/57/1c/e1fa82a8a01e3c5820f3ba98a8b2673f642128eb368fa88871b01dd2c909/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:76d3af9732d2dab69f28179b40ba2d87e2f1d5824b4a694780aa787d685e8f36", size = 613106, upload-time = "2026-10-04T16:29:53.655Z" }, + { url = "https://files.pythonhosted.org/packages/29/55/b20b8c4c3dde8755bfcd5b08492a02d0cd2e26929aedf6199ca2a377d42a/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:78326f4cb4427a56ba4996c0762b63be45f06b85f086526420d2b3a66e40f84d", size = 578235, upload-time = "2026-10-04T16:29:55.157Z" }, + { url = "https://files.pythonhosted.org/packages/55/42/df3f7bbc3f7ab37a8a9db8d6c2ff2c985422899f1f7926afbf7ec3c0b8b4/rpds_py-2026.9.1-cp313-cp313-win32.whl", hash = "sha256:172e47169583f46ce118cbec68e6795d0da0f4606b488b6434f8276bca0a058c", size = 205293, upload-time = "2026-10-04T16:29:56.669Z" }, + { url = "https://files.pythonhosted.org/packages/31/9c/ba5a9569d719bfdd6ce863df4133ac6a1658cf1b07cc3534c31db729fbbc/rpds_py-2026.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:3e93b2cd69a9830be33e03945cd7cda940a0a8bfcfbff41d6144f0cb0d3d8bd9", size = 222409, upload-time = "2026-10-04T16:29:58.049Z" }, + { url = "https://files.pythonhosted.org/packages/35/72/f28ca566f6c23c35bbf7445f65eb0364577b25a026305995e24f78b83d94/rpds_py-2026.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:d151e148117294133bf8af7eeace085e7e87432db15ab6adf640330298a47f6f", size = 217681, upload-time = "2026-10-04T16:29:59.449Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f2/67b94be1532767803415c1c5a1fd88ea487643d74a673cec1ba140af77bb/rpds_py-2026.9.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c9d1aca01f49170fdcf5c92761b1fafe97f554b721ca4570c5949fff778f0d4b", size = 347178, upload-time = "2026-10-04T16:30:00.865Z" }, + { url = "https://files.pythonhosted.org/packages/04/37/b751de2b59b0197a1d92a5dd491de88e8a5e928c2e6562581974f1e85263/rpds_py-2026.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3f0e9ac28fc067d4d34b88ae43c48e9489455c97fee9633d851f7eeed5a05d35", size = 341878, upload-time = "2026-10-04T16:30:02.564Z" }, + { url = "https://files.pythonhosted.org/packages/72/e2/5873bc4643c250db9e05d48dc0c93763d4aa68bc3b81164cb1af3b45b284/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07deecbfce94c78473018bc7d10b337cc651d12df87a1eb2cb3e4024bc9c33d0", size = 373963, upload-time = "2026-10-04T16:30:04.026Z" }, + { url = "https://files.pythonhosted.org/packages/51/03/5acf7632158247f3f6386ff0af3a1ee48167d575037e8d0920594b76d92b/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:821b2755db9194409254012f429c56643416fb96ef9be090be82ec8826b7f477", size = 377975, upload-time = "2026-10-04T16:30:05.555Z" }, + { url = "https://files.pythonhosted.org/packages/e6/00/63fda451b8bffa5808fc8bb311ee7c073b340974b09f273c7b2a145d3d62/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c91c210ae7645626c608400e3519b4a642f837cce09ca830db3beb2e9f274d4", size = 490347, upload-time = "2026-10-04T16:30:07.156Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ae/c093ffd070ba0fb02f76c565d06fecc65ad6e4afdbae78f7031076d3cdac/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54ac2158a6f96cfbabff0b2eedaf94b90c5ec7ca8317fcadc61e1c2b2e0ff6ef", size = 392962, upload-time = "2026-10-04T16:30:08.77Z" }, + { url = "https://files.pythonhosted.org/packages/22/9d/d08a1128ab199b2f0cf25bfeb0639bd05119fff4b7c47bec24ef9a8ec23f/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac2f5dbafd585dfe31f86a23ebf0d3ba480a9d49ebc87947267b5608d4ea0cd", size = 371623, upload-time = "2026-10-04T16:30:10.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/c7/4758ddcbb75609414bbccfcb11d612436f9b3ee821bd2f33f0f1604ee648/rpds_py-2026.9.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:8aa5dda18d39b6143eb24809d158f9252c88f402749b6f1b62a506cc7d96cc35", size = 376997, upload-time = "2026-10-04T16:30:12.124Z" }, + { url = "https://files.pythonhosted.org/packages/87/e4/947bd7f608ff60faf46dc9d389c3dffd0e3d767d78a0be19978448ef0ce7/rpds_py-2026.9.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c90e7fa02e8f5de0d10c17595c568ada48c5302e749462c0ea1a4c362111a86", size = 400169, upload-time = "2026-10-04T16:30:13.804Z" }, + { url = "https://files.pythonhosted.org/packages/4b/35/fe93e020a0543b5670472c18d7e6af3197c08da571240ce1965c84f85c0f/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6d198bad4e49dd6732fbd636e2fc5c082f45c8cad0b4acb756b00c82c76072e", size = 551615, upload-time = "2026-10-04T16:30:15.332Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4f/5d2a0136bb03b2a56a39dc6ff92d58a6e3e53a2e17079238b86228882f16/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:96beca19ec79de272e8668585380ff9092c47077c1d7a1e098e00bbd921f4785", size = 614655, upload-time = "2026-10-04T16:30:16.92Z" }, + { url = "https://files.pythonhosted.org/packages/09/1c/3f1025aaf70d9bf7272cc41f8b64ee76b48bf01726248138430e16f23b38/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5cf77eb04f20b720be95265a3e00eb2a14814074255cc27069c551b2db53118", size = 579602, upload-time = "2026-10-04T16:30:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/53/0d/5c72e6204f76610608706da32b6b7e11ef7e10317558a7bb15a122e008dc/rpds_py-2026.9.1-cp314-cp314-win32.whl", hash = "sha256:a03d57b86d2a51d0a66c92177e2be154ad015f357791d306e714569999cdb4cc", size = 206315, upload-time = "2026-10-04T16:30:20.05Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0b/489d48abbcc7d70cf3fbf662d9d22abf1f4650761c0a9ae05260800800d3/rpds_py-2026.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:837c6b305e26fe0f75b15c92cf3b2ba29e0ae19dc40b1c557b026cb426347d0c", size = 222852, upload-time = "2026-10-04T16:30:21.604Z" }, + { url = "https://files.pythonhosted.org/packages/91/16/bbb05a7e6a10cf79ba639be7f799d770ee15f64175cc61d081b218dd402a/rpds_py-2026.9.1-cp314-cp314-win_arm64.whl", hash = "sha256:fce4b85234a0cbad67bf8e6e1201ee815d172c9aebad75f25645bc4d834f8e31", size = 218709, upload-time = "2026-10-04T16:30:23.036Z" }, + { url = "https://files.pythonhosted.org/packages/22/ac/ac507a0a4ec478ca470440a09583db4be5259ba7670aeba0620822f1e57a/rpds_py-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:3a72c11530d71abfb66c8d7696a2f86c43e63fca8b948f1a784ac490f4ec688e", size = 349596, upload-time = "2026-10-04T16:30:24.558Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f2/817a46b658d5070f477f722c298ee9a24525b0e4017347964146ef5fdd0e/rpds_py-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:068c37bba854ec2fe42f7365c640af11dd9895890ccbf2df5070d0c059bd7f96", size = 343114, upload-time = "2026-10-04T16:30:26.048Z" }, + { url = "https://files.pythonhosted.org/packages/6c/42/6ade976b13ac1b4cb3bf2eb603f1be2fe74df19a29988d4c2b386be59d6f/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fca4eb6df565e2a928f1c7dad92d27db8f9df0f449e76423ed5d7e713ed445", size = 374197, upload-time = "2026-10-04T16:30:27.699Z" }, + { url = "https://files.pythonhosted.org/packages/d9/70/77cdf1d3f1a07faabe936016ae623aec7981f73108a8fe7a203ed2e21998/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c933c6678c6f116ff8af47a4c6db0868b8ace74af0343016c0ef00f00272ea69", size = 378025, upload-time = "2026-10-04T16:30:29.451Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6b/18a44a3beaa9b7931acb04af7bd9539836477c630a794452d4826d6185d4/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028ad274ea951dac64491b5d1e65712a4aeabfdbdb9fccf797b57bd899b0c495", size = 491969, upload-time = "2026-10-04T16:30:30.995Z" }, + { url = "https://files.pythonhosted.org/packages/73/27/fb39cfd6bddaf741b024f813890374578ff8ac1f1adc473659c048b03b05/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d0a99cf9de0b17a3943388e9294a59becf75e7c43421f387bd3c7a9901f7c", size = 393905, upload-time = "2026-10-04T16:30:32.628Z" }, + { url = "https://files.pythonhosted.org/packages/ed/71/0fa7bb77b57af0d710273964180d11b503f62b8a5c358eb2d8c3f62feff6/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0da298fb372dc192610a4b9ecbc68a0cd8b675bbbd1fc519d01b41cfd658333e", size = 374569, upload-time = "2026-10-04T16:30:34.257Z" }, + { url = "https://files.pythonhosted.org/packages/54/22/f41cfac269af3b449513ef1bc3d7f32fde52abbbd2d01c7e76b47743acd9/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:eb61be926bb81567c1f48bdc8aa22b9855048dc2efd53871f9f7e6e9a5632346", size = 377482, upload-time = "2026-10-04T16:30:35.997Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fc/312b49006e7f8f9ca5f96647577b8aa6f3df30519c46bd448f5c425af0b2/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:42e75466f83cd43f6026c81eab74246efb2bdadafb307b85700632d06c68f299", size = 400040, upload-time = "2026-10-04T16:30:37.76Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a6/18cca7a878dc7fa95165a83343fd4d7b65643fd22e54e47340a451121d5c/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:617f59cde379b4f648a09797b7f683d04b90a46344cddab85639da5aff0f5531", size = 551849, upload-time = "2026-10-04T16:30:39.443Z" }, + { url = "https://files.pythonhosted.org/packages/e4/6d/1f5685e20f39604691bdc3c05aaa6b8bd2f954e9e996477adf2376768e33/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3edae8c5ddfdb6985d49ae9d150516e5076888879022f91a26c2de9276ce0bdb", size = 614842, upload-time = "2026-10-04T16:30:41.231Z" }, + { url = "https://files.pythonhosted.org/packages/c6/25/98652109fd9f7e10268dd4571aa52b81987001b806f37ef1a18260de714a/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0f045bb053c9057720d72c56dffe30dffdc05997b2897a827b9325f0ab6623fa", size = 582606, upload-time = "2026-10-04T16:30:43.345Z" }, + { url = "https://files.pythonhosted.org/packages/19/03/11ca09099bab5f53373a80a334c424ec917c13d050760a59499d2af5171e/rpds_py-2026.9.1-cp314-cp314t-win32.whl", hash = "sha256:bf35d0568abda97233239ce32896d3ad53fccc537832c104e30c94aa5fb93569", size = 203341, upload-time = "2026-10-04T16:30:44.954Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8a/88909e3ffd9f47f5b58211473875d8c3c09079f0058c46fb72c55a702a26/rpds_py-2026.9.1-cp314-cp314t-win_amd64.whl", hash = "sha256:1e8d4d79d828299bf44a55db22a9388ab967b49d17132c88eab0f4360b48da8e", size = 222843, upload-time = "2026-10-04T16:30:46.486Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b7/a662f367d4896dd0a10cef2fc91f10b7f08af1c10858e287e019563f338d/rpds_py-2026.9.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:1d77b649e6f7cdf12ca5c2a98dad0ad37f9ea9b6f960408a92f0cb12bb3d04d9", size = 347463, upload-time = "2026-10-04T16:30:48.203Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3f/ad45d03df4f84ebae5439577ee81f3999d182711e82235c8037b6528890e/rpds_py-2026.9.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:00ba2d8c7dd4ee537978ddf4b3fbd712bef2d8751603f7f3146b3f4287768e25", size = 342051, upload-time = "2026-10-04T16:30:49.872Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/3dcd68c13d4bcc59c1f7eb33ac8e80698f06f3eb0d8a1e06419836071c20/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec450527cbf485e13c8d3602a54f428ab0432fdade0ede75efd74b735421c871", size = 374143, upload-time = "2026-10-04T16:30:51.508Z" }, + { url = "https://files.pythonhosted.org/packages/cf/0d/68c1f058a250fbd1380ebda9fc227cbf50117adf8ffe8161ef383ea79f68/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:306ee1850d8105b5baf977e78d45fcadd12c1a54678d614c9baf217708446e91", size = 378604, upload-time = "2026-10-04T16:30:53.206Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d6/2d4c59b85397cb4800594fadf692688ccf5ce556adc930e7a5bf21061a5e/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef6b65b03247c54692ad4fd9ee97cb772781927db72e3cb05e70b3db6d1ff14f", size = 490790, upload-time = "2026-10-04T16:30:54.925Z" }, + { url = "https://files.pythonhosted.org/packages/da/04/7e05dc3aebaf52f4e026766bd668fdd09a9d0e23f64a14686b36b3501892/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a575404ebc9cf2e91edd32eaf570ec1430eb900d4f56724ba7dd4bc1fc9c176d", size = 393146, upload-time = "2026-10-04T16:30:56.625Z" }, + { url = "https://files.pythonhosted.org/packages/57/ca/e2e9a0a46a74ed51a0498ba1fe10f4ea6b2d9a155f372a2f91e51f18cf10/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c16ab111bc27c646ba8aa005d0527754edc538ebb636f0b1bf8e244b48d1945", size = 372022, upload-time = "2026-10-04T16:30:58.295Z" }, + { url = "https://files.pythonhosted.org/packages/ba/cb/8f8774df5134e23424372838bcc5c7ed4127d723e1ff52f7bebd4dcb2563/rpds_py-2026.9.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:7664419f27db41d4f1c43a78dccda7dd6e8ef2428df3ee01d0c2a07a6b071297", size = 377092, upload-time = "2026-10-04T16:30:59.984Z" }, + { url = "https://files.pythonhosted.org/packages/90/02/8d7095d73bf9114219be40230baa5df00611e0a82ed9517779ff9c19f82b/rpds_py-2026.9.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b26b03d9d2658ee2fa234f8f4f19f38a09773fe5261028025032e26d4d35af0", size = 400830, upload-time = "2026-10-04T16:31:01.721Z" }, + { url = "https://files.pythonhosted.org/packages/ec/02/8206856f8f363cd042a8315dc86b3912f5dcb6d3c66bbb24b69c2bfb0775/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:be3e47e2d91aa3942ff9bf4077a505226005abfc39b6f7554a91c1b9393986b9", size = 551478, upload-time = "2026-10-04T16:31:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/41/6b/36211f1bb1f0b0313f496d92f5905b74ea107f27cb16fa3355a82f04575e/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:6307a0da524939decb8ca4a3933b8ab62525794411d6984fca6726e732804af6", size = 615173, upload-time = "2026-10-04T16:31:05.281Z" }, + { url = "https://files.pythonhosted.org/packages/35/77/cda0c4a6f055446b692f0ed5692f73707cafd3dff82672ede31b1a9b59de/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:159a7aab5c5e8b112c8830f54717ce56da1252ebdbb526f5be2df2309280b9e7", size = 579653, upload-time = "2026-10-04T16:31:07.065Z" }, + { url = "https://files.pythonhosted.org/packages/74/ec/d8385f446240aed643b9e92a5055cff3015cc04a13c61f73b2883c478ed5/rpds_py-2026.9.1-cp315-cp315-win32.whl", hash = "sha256:dbc2673f9223d420c91145599b3ba45a8a50c207d1976908e5fb5ddb0c9b9429", size = 206498, upload-time = "2026-10-04T16:31:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a5/71b5cd00e0521e3b6b81828baea368c62b6b700ebdd9554cd7d41ddf12fa/rpds_py-2026.9.1-cp315-cp315-win_amd64.whl", hash = "sha256:75c38c50ab9aca840225d9a9a3810bf11d04bd5c1f186cabbb8aee56db3e9b15", size = 223121, upload-time = "2026-10-04T16:31:10.84Z" }, + { url = "https://files.pythonhosted.org/packages/33/58/dba857c3bc8221b31b62eb170a3080f4f191de79f047200389b7ed1b06a7/rpds_py-2026.9.1-cp315-cp315-win_arm64.whl", hash = "sha256:a431156bb41865fc14cd5d79bb9d7bbed83110b0159e34e62ae30951f96c0009", size = 218741, upload-time = "2026-10-04T16:31:12.592Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d0/320ab28ccc1415eeb509d68682b0014fb74690cd49f1c2d29a232475af50/rpds_py-2026.9.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ef0d8c843e2827d6c120ab4687e9423fb1d893db1df27b7c1506615bcb9734a0", size = 349719, upload-time = "2026-10-04T16:31:14.48Z" }, + { url = "https://files.pythonhosted.org/packages/56/88/f5b12f1358f443c08b7ce3cc8391d82d335f4872580e2e097847fd36087a/rpds_py-2026.9.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:45bc6bccf78b20fd834237d18db64965d7ee68ba7f60440a26c7ab71e7b8d51a", size = 343267, upload-time = "2026-10-04T16:31:16.827Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0c/c765b0059d532acb3b9c45d781ccc22f15a96dbe443d00903f643ba9df10/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d55198263bb51f557550c6ed2e6d1cb6a6fed6eb5c9120b741c5926bef8a45d", size = 374555, upload-time = "2026-10-04T16:31:18.931Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8a/cafddfda77564a10cd21184640c3bffda6a2b8d20972fb5dedd5e0166328/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8763f20692da7df39b0afdd1ba3042b004c50a45994f76c2d9a25641f7673db", size = 378346, upload-time = "2026-10-04T16:31:20.75Z" }, + { url = "https://files.pythonhosted.org/packages/b9/01/5e626016eff72c183bf6c96539240cace15d402468647a453ec08415b2fc/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e43d4a1f673e8a1cbd8533e809e02b4bf9d4f2280269bb640436556312121250", size = 492373, upload-time = "2026-10-04T16:31:22.614Z" }, + { url = "https://files.pythonhosted.org/packages/3b/9c/15a2469e9389242f46896b3f0a01d68caea8a5a35c011fcb05ef333aae73/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea394a937f17a54c51239348bdbe2e3518124c8d4a8951ba04a311d3095bd18f", size = 394371, upload-time = "2026-10-04T16:31:24.768Z" }, + { url = "https://files.pythonhosted.org/packages/63/f5/c100ff77e1e6366e947c75969c258fdfc4b7bc5bbfe7351e62ffbf2a1228/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdeaa99ce822dca76cfb1b993e9120c5ea212f2eb66d48950ad63c349668a018", size = 375132, upload-time = "2026-10-04T16:31:26.588Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f4/fe0269c9de253e99c81cabc12b8971a5feaa083debdaff1221e06264d9e3/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:b4f062343e7ad3fa94f2c66e5ae667dee47ee74dd41a9057c4fbe163236a123d", size = 377642, upload-time = "2026-10-04T16:31:28.677Z" }, + { url = "https://files.pythonhosted.org/packages/05/65/b34a7b257baccff8f4a24a722933166d4941d5ebdc9c3f4bc4ffcd5ce4f4/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22ffd29a63d71fb1b81552c21f2c2b734949b7ac751a9be70675a939a900839b", size = 400855, upload-time = "2026-10-04T16:31:30.802Z" }, + { url = "https://files.pythonhosted.org/packages/98/32/844e54176b6071b90b38a564e6940bc6eb8f97b2890dc709c19db9dec0f4/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:08dae4a4095150a7c4545a1fb40b98e1ab1744fbc2770d92c977b9dadaa49ab6", size = 552573, upload-time = "2026-10-04T16:31:32.709Z" }, + { url = "https://files.pythonhosted.org/packages/17/73/6041d20729dffbfdf155c02d65be58bc225a1c1fb548fd87c23ef306138f/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:9a0460d43603d1fd9ef59c30278531e15d78581721ddb538fa560aa7817ea4ad", size = 615840, upload-time = "2026-10-04T16:31:34.565Z" }, + { url = "https://files.pythonhosted.org/packages/af/9e/418094adaee6b056ce199051b255448ed872829051e341b2294c80da0977/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:1c2d1f6da5128eabf34e963d7163a818846075a52568250d006c4c953b40f903", size = 582764, upload-time = "2026-10-04T16:31:36.665Z" }, + { url = "https://files.pythonhosted.org/packages/3d/9b/1698ebf6b840ddfe8b472198abbed6ace35c6e398faeecd6c47dae742a4e/rpds_py-2026.9.1-cp315-cp315t-win32.whl", hash = "sha256:5c6ee90dee3e85e055ddfd502d611643d9b0fd94c818220bda84ec3dacd9b27b", size = 203795, upload-time = "2026-10-04T16:31:38.53Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e2/91f70d804c61f8eac39a417e82aa1024f655ab9e8bdd7393b196242bc41b/rpds_py-2026.9.1-cp315-cp315t-win_amd64.whl", hash = "sha256:fe5ad0664ec772b02c45859041aa17655709cced7a31005817fbbbd988c25567", size = 223037, upload-time = "2026-10-04T16:31:40.468Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ad/f0eba548e297987964ef8088403db875b333963bf8189f3f563b6936b20e/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c0d2cb595a420b34d5086db0add011e26e2c09d6a024afbac4228bf8f863a30", size = 384112, upload-time = "2026-10-04T16:31:42.643Z" }, + { url = "https://files.pythonhosted.org/packages/33/89/891fa4d81f1eae7fe262ecd0aba2c51de94a116c7f3ccfb034fa75f4c537/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3d6ed6a98cfd19155996605474982cc470d7601746a6439078f1a5a3fa8b050", size = 389662, upload-time = "2026-10-04T16:31:44.642Z" }, + { url = "https://files.pythonhosted.org/packages/4f/46/912cf623b2263f9c9c2d04e8508fc38dbe89983faeba5fb36ca4558ae550/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8171b44a054e5c67fd748ada04187f1250bf35b95f85e52ab64bcf3331a923bb", size = 504637, upload-time = "2026-10-04T16:31:46.667Z" }, + { url = "https://files.pythonhosted.org/packages/9b/5c/7f3cfa7c5f01765c9f47c8398210ed0c1eb686c0e99c223cb1c6776d3fb9/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fda1d96e542c37b6c804547dbf489c129fe7c97183a76a5ec275909ba1a063df", size = 402607, upload-time = "2026-10-04T16:31:49.068Z" }, + { url = "https://files.pythonhosted.org/packages/f0/76/2e915d4115ee453c33e6af17bc1df7e22ddc52974e178eeeb92a78c09983/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:270bdcdaac5d5b6f73c5e22e7e135c7f2a50e789f71d9e241d5be8d90026e19a", size = 382762, upload-time = "2026-10-04T16:31:51.24Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e5/844382925d7b84a4074ad79fc2b9d05eb6231ea243b34f247e68e519b606/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:84a6ecc0c940169190d2c23bd969debd48c94dbc855acd60188a68d71d421608", size = 389563, upload-time = "2026-10-04T16:31:53.549Z" }, + { url = "https://files.pythonhosted.org/packages/81/82/d6e3951602dc2e24790ef9d299aa24bf5e2493df5043f2c6da00480cc447/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab4b2fda7c2b542f7f9d886cc6a838c5079d2b76f72e6081411faba11adde2c9", size = 416842, upload-time = "2026-10-04T16:31:55.76Z" }, + { url = "https://files.pythonhosted.org/packages/ea/1c/8d248e4ea671d525ab7daa0703ad81cc2175076fa0ccd7ef088facbd2b01/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:44b32a7c4f0da3d28af31c259e38ddcff096f855e205ed0671d02fcf44f1ea1c", size = 562434, upload-time = "2026-10-04T16:31:57.874Z" }, + { url = "https://files.pythonhosted.org/packages/ad/38/e7ac0db898120d15dea25e3661b1242a40cb3b23d1f4db86c15a01fe0ba1/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:a3dbc5ed9514908d5046107d7b1346bde71eea61de6e0e4919c19354f97e769f", size = 627909, upload-time = "2026-10-04T16:31:59.977Z" }, + { url = "https://files.pythonhosted.org/packages/03/c8/37e555514932cb1ee36c75349187aa882a98dee5d5654c761699ed8a0d27/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6eae33003518fd4cb4f83a218d5371469dd3001aa3b87128c005b07762f7fe5e", size = 593658, upload-time = "2026-10-04T16:32:02.14Z" }, + { url = "https://files.pythonhosted.org/packages/12/5c/5f69a91add94a8a33acea68a2b034a464946a654ff7296af9d957ef0d6a5/rpds_py-2026.9.1-pp311-pypy311_pp80-macosx_10_12_x86_64.whl", hash = "sha256:0483515261947e4e8b8e1375bf7463e7eb6ccfb3d86e7b554d90cd5285f20f32", size = 351769, upload-time = "2026-10-04T16:32:04.675Z" }, + { url = "https://files.pythonhosted.org/packages/41/22/35ea8bf3b2682b90ab687c74e4828418ff12298a5b0b0a0c033f61c86a30/rpds_py-2026.9.1-pp311-pypy311_pp80-macosx_11_0_arm64.whl", hash = "sha256:4cfaf02209061880210819934de2f4f6aa83dc04dafe6770276acc240a56da31", size = 351719, upload-time = "2026-10-04T16:32:06.834Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/a9ba81408369d34c1aca73319c15adc91ed45c1d21e9e8ee4832ffb7fe0b/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdc537c8633d7fd92a82e2e0d2ab74320a3f63d5e59fb9cf08711e08fe151c4", size = 381109, upload-time = "2026-10-04T16:32:08.994Z" }, + { url = "https://files.pythonhosted.org/packages/b3/44/5192a0bed94cec86bd2a5e1cc5a1bb8f7eec3aec907eacd2deb13e87e326/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10e208f2425d973938afcd56e28a7c4be32e27b6a60b5d381f49fb9d8acf9759", size = 388222, upload-time = "2026-10-04T16:32:11.321Z" }, + { url = "https://files.pythonhosted.org/packages/92/cd/5356549711448f18b52f7a11ffbe90f1228774996fbf3c6cd1b18d22abaf/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c0dbbcc19735fe5f8b0a54c07659d154a9e69f47e15d0a6ab7299215daf62cb", size = 500384, upload-time = "2026-10-04T16:32:13.478Z" }, + { url = "https://files.pythonhosted.org/packages/7a/88/ddda9d28adfe33119c75b2e733d4ba7e326f41d7e1b1093951771768ca48/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684fd492fff4fead00587544e059be2bbcb6f93454f21fa2a91b66fc7508be82", size = 401661, upload-time = "2026-10-04T16:32:15.653Z" }, + { url = "https://files.pythonhosted.org/packages/32/c3/bb59ba16a6b4a57995d15b8c04c00f28df3b938c4dcdde48fbe0f73edb0c/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1028417bb44037eb3069c1009bd7b7277212876cda22fbe565b0bca9fab6d2c", size = 380748, upload-time = "2026-10-04T16:32:17.727Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b8/0580faa1c5a32ddc160130dd7ae54d2d007272a89a40a6b5db3e50f9f585/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:492e5e428cbe126221611f47e068f01660352feec4ad18bc0f5ea9b2ae88fb14", size = 385731, upload-time = "2026-10-04T16:32:19.855Z" }, + { url = "https://files.pythonhosted.org/packages/bf/70/f73564642bbe3322c7eeef2c2f258cf040b71c41a430b532e59d04a1b838/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88b5268892fde430d5531f95bc560b6efbbd67c929662c586afd729a96e7461c", size = 412131, upload-time = "2026-10-04T16:32:22.285Z" }, + { url = "https://files.pythonhosted.org/packages/8c/5d/17fff2e1f8f68721a2afb5cb48f7e442c751bb6b4883157c5abaf618cd08/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:01445c8d194aa032a08e944f16567672da1c62dbdbefd8b6d0693032e290cf68", size = 558193, upload-time = "2026-10-04T16:32:24.4Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d0/869ab6fb08531f97aae4a780b4d61b4190d8aef48fe054ee28bcf7114466/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_i686.whl", hash = "sha256:eef6a03b0b6d08d0835ccfa8ec8d1bc70525e3801387567137b50c557695e6da", size = 622448, upload-time = "2026-10-04T16:32:26.844Z" }, + { url = "https://files.pythonhosted.org/packages/ba/a5/9672e532fe02cd3b92c78cfd8743abca939d96853006c63835009a1ecb6f/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6b9bf3135b4ad5981df9a73d71a35272d650a2985ae9c2746357b24d59de2448", size = 591126, upload-time = "2026-10-04T16:32:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/80/ef/3a9f8e4279c7920af561deed4cb7ebebed2794a8f608cf404d5eef14a105/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_10_12_x86_64.whl", hash = "sha256:56c6952a9b15047466d0c2347c446a761d4527f89976156341e68f0ce5cc08b0", size = 357108, upload-time = "2026-10-04T16:32:31.641Z" }, + { url = "https://files.pythonhosted.org/packages/b7/55/4b2fa381a583760aea5c92841e4e928a358e1c6511b129219e9c2826a226/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_11_0_arm64.whl", hash = "sha256:b242c27c8f836305a4a72df9cdd564386ac57b807bd252a063223331c9316b37", size = 346877, upload-time = "2026-10-04T16:32:34.061Z" }, ] [[package]] name = "send2trash" -version = "1.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394, upload-time = "2024-04-07T00:01:09.267Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072, upload-time = "2024-04-07T00:01:07.438Z" }, -] - -[[package]] -name = "setuptools" -version = "80.9.0" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255, upload-time = "2026-01-14T06:27:36.056Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, + { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610, upload-time = "2026-01-14T06:27:35.218Z" }, ] [[package]] @@ -2037,21 +2627,29 @@ wheels = [ ] [[package]] -name = "sniffio" -version = "1.3.1" +name = "soupsieve" +version = "2.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +resolution-markers = [ + "python_full_version < '3.11.5'", +] +sdist = { url = "https://files.pythonhosted.org/packages/71/c3/1b817965ac12dc002d7c9cd7dfffdd7d4fbf9b45763ef2ffe7b86ee94670/soupsieve-2.10.tar.gz", hash = "sha256:49e9380d7d2905463583bafe285e818c7366a9ed7b3aee221c1ac79c905d8bc0", size = 124337, upload-time = "2026-09-24T02:36:35.048Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, + { url = "https://files.pythonhosted.org/packages/66/87/5ed59e1d0290564e2027ed066c52b059892c4637741337fc0967183c8d4d/soupsieve-2.10-py3-none-any.whl", hash = "sha256:8596eb8967d744174820280fa62b4542a2e955bfaccca73ed8a13c6eb8e9b502", size = 38019, upload-time = "2026-09-24T02:36:33.709Z" }, ] [[package]] name = "soupsieve" -version = "2.7" +version = "3.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version >= '3.11.5' and python_full_version < '3.12'", +] +sdist = { url = "https://files.pythonhosted.org/packages/19/63/0b6bae54546aed98d72f12d09df57b19a287f01c84d22047fa2e23772ab9/soupsieve-3.0.4.tar.gz", hash = "sha256:924fab84ae21604c19e175e1f39815eb6fa83ba23836e09e9de180925e5bc4c0", size = 119017, upload-time = "2026-10-22T00:45:26.362Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/07/66/473f7ca0be0b06e38ee8c85ee2db184e3981bd769fac2e7c19c8a8865211/soupsieve-3.0.4-py3-none-any.whl", hash = "sha256:8412826614f9c632227067d0985aeb9f584bd15efc852955430e097a9fe7afbf", size = 42458, upload-time = "2026-10-22T00:45:24.843Z" }, ] [[package]] @@ -2084,14 +2682,14 @@ wheels = [ [[package]] name = "tinycss2" -version = "1.4.0" +version = "1.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, + { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, ] [[package]] @@ -2103,80 +2701,72 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, ] -[[package]] -name = "tomli" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, -] - [[package]] name = "tomlkit" -version = "0.13.3" +version = "0.15.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/72/fc01563df95c189a9f65850096bdc205bc2fe37da6c740cd64afaf18d07e/tomlkit-0.15.2.tar.gz", hash = "sha256:83e32755ba1d20d9340bd069ee97e9f6232ba2346b63ffcba425de01f7e327a6", size = 190522, upload-time = "2026-10-16T04:07:08.166Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/da/46/7d84138a60a8bd796825b2d38ebe92d0d16501ca57d501b7c5d677401bbc/tomlkit-0.15.2-py3-none-any.whl", hash = "sha256:05562412163a3037b94497385fb7f9204c637bc605af7a48199e41cf2272f437", size = 52225, upload-time = "2026-10-16T04:07:09.216Z" }, ] [[package]] name = "tornado" -version = "6.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload-time = "2025-05-22T18:15:38.788Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload-time = "2025-05-22T18:15:20.862Z" }, - { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload-time = "2025-05-22T18:15:22.591Z" }, - { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload-time = "2025-05-22T18:15:24.027Z" }, - { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload-time = "2025-05-22T18:15:25.735Z" }, - { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload-time = "2025-05-22T18:15:27.499Z" }, - { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload-time = "2025-05-22T18:15:29.299Z" }, - { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload-time = "2025-05-22T18:15:31.038Z" }, - { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload-time = "2025-05-22T18:15:32.426Z" }, - { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload-time = "2025-05-22T18:15:34.205Z" }, - { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload-time = "2025-05-22T18:15:36.1Z" }, - { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload-time = "2025-05-22T18:15:37.433Z" }, +version = "6.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/02/5f549b1ad5da6267ed1e1fac2eef69257b1979cc812497002499b7895ff9/tornado-6.6.tar.gz", hash = "sha256:34c4aa916d7f2b2d5cadee2c6850f5a4a7f3d688cbf58399ea9bd3057af4abd5", size = 617998, upload-time = "2026-10-21T15:31:04.733Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/f5/d3e6f76b945f9812842db742d0708a3b6287e850e81be3ca10e290c103c6/tornado-6.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:01abf15429d64f04ccfafc238b191cc2c177108b7a331f4461707ad77198c8c2", size = 528326, upload-time = "2026-10-21T15:30:05.528Z" }, + { url = "https://files.pythonhosted.org/packages/30/69/b20cf3a8bf641ec792a5a6050aa153e8f120604f9c23471142de535113e5/tornado-6.6-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:11bb97c00981eb8254e55bd6a5ad960c983ae343fef8ae3ae5584cd1fb70236a", size = 529544, upload-time = "2026-10-21T15:30:07.126Z" }, + { url = "https://files.pythonhosted.org/packages/0f/f4/d9d8d3ac345aa9df3a132ad03bd443160c2ab24ad4003b4e8d6d5af06371/tornado-6.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e152a3b2d3eae113b836d979823f7bb2320f7e334a84449729964921f374a4c", size = 530523, upload-time = "2026-10-21T15:30:08.478Z" }, + { url = "https://files.pythonhosted.org/packages/ad/82/1296ade1c14dee5a4906e5ca092997622ece7c4dc768c68ed9caaf895d1b/tornado-6.6-cp311-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e912d4c4babd04db6f34b25b748174a4a176debe86c8610beedf1815f9af7fdd", size = 530739, upload-time = "2026-10-21T15:30:09.98Z" }, + { url = "https://files.pythonhosted.org/packages/66/30/6ac1eab66c81af46dafd93c9b24bd311f82e199d9d7b8ce2a64a91b6a200/tornado-6.6-cp311-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33aabe8a03d426cef4e0fe5669f0643cadd983b54957f1a7ac2789ec326e9644", size = 529738, upload-time = "2026-10-21T15:30:11.498Z" }, + { url = "https://files.pythonhosted.org/packages/24/b4/6c1f6aa1fd148e4d0f500a10cd0c9949e7bf385e161ff497c81de5b3ae4f/tornado-6.6-cp311-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9aaf0e1c2fb9f046f30e2036b8d2060666399e8464d0a72769e43c754089567b", size = 527908, upload-time = "2026-10-21T15:30:13.298Z" }, + { url = "https://files.pythonhosted.org/packages/54/5b/67d3d452b1179bc9e265cebd381a56ab4cf2d7b2a54607aedd8d6e1ebc2e/tornado-6.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61fc5513cea97720ab9bf54b04827ac0f4500c63f0b072b963d6145c798b4661", size = 530367, upload-time = "2026-10-21T15:30:15.183Z" }, + { url = "https://files.pythonhosted.org/packages/74/14/4e8e9a14f77bcafb2408634b2d4c8c676ad7a43bf8dac4ee2d48370698f9/tornado-6.6-cp311-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:31e1a0d5cd704d2fe8a008c1cc27a0e2b67269ca263630a27985dddc160b5537", size = 530456, upload-time = "2026-10-21T15:30:16.741Z" }, + { url = "https://files.pythonhosted.org/packages/56/12/e3ddef99a2089ccfc86f32bd3f39caaad87bee4868be1bacbf213a0b07a2/tornado-6.6-cp311-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:74416e41e9bdf70fbc2fb242f6fbbc7a58ec11e59d39f15fc5a421ecb6845118", size = 529610, upload-time = "2026-10-21T15:30:18.031Z" }, + { url = "https://files.pythonhosted.org/packages/35/3d/62a692343d46b37e852e5078e0f6513534d925f70a04580072e3c127b129/tornado-6.6-cp311-abi3-musllinux_1_2_s390x.whl", hash = "sha256:8cdd69104ae9d705b3f04d2563aa96e357043e267a455802daae9a1e633a37c8", size = 529803, upload-time = "2026-10-21T15:30:19.326Z" }, + { url = "https://files.pythonhosted.org/packages/49/04/6c59a9413adfe4810f648a4dd9fdf476f13b0495f9cc25ef856b71f9ce1e/tornado-6.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:fc7c8a3263501fbe97518cd699101bc3c5f499a7dd4f75fc6cbb3bd9ee1db1f1", size = 529751, upload-time = "2026-10-21T15:30:20.826Z" }, + { url = "https://files.pythonhosted.org/packages/31/36/a1b3b84cd347ae43f982d3bf95628de6c6365668dba2543af47c6a1c888e/tornado-6.6-cp311-abi3-win32.whl", hash = "sha256:b54ca69ff93d0374efb083a12a1e9ec2dd2036e8496d197e0e8ef77b8d9135c3", size = 530643, upload-time = "2026-10-21T15:30:22.428Z" }, + { url = "https://files.pythonhosted.org/packages/b7/50/dc813fe35a672e14ee8bed8b5c634eeb343a05c98eb455318a169de24567/tornado-6.6-cp311-abi3-win_amd64.whl", hash = "sha256:48f26ed9d7beb64e5f06adc864524e581ab6d62ba8ff46eaaa1ac2d0e6d753fd", size = 530886, upload-time = "2026-10-21T15:30:23.975Z" }, + { url = "https://files.pythonhosted.org/packages/0d/71/62a9b9e980026d38874740d0a7c162f53eb0563f6a441e3aff84c48db7e8/tornado-6.6-cp311-abi3-win_arm64.whl", hash = "sha256:29114ffd4e4de869d390393df9e9a0f191065aae1a96f38a58d35e464c04a867", size = 530899, upload-time = "2026-10-21T15:30:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4c/633e3568eb574df555d6ddd2dac44b7793a5c26cd63b444e653fcfb1d6ec/tornado-6.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:63fc8d243b52fd8dd9ed4ad02d0df08f2024f9aea632a433a8a6c91075076d44", size = 528432, upload-time = "2026-10-21T15:30:26.578Z" }, + { url = "https://files.pythonhosted.org/packages/37/eb/b525d1870ad28a56f47b664dd8fd3fab4f7ddd237c87c14e97248bf4762f/tornado-6.6-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8d4b85cac795bfc6a7f20ba81871abb8c2ae8fba019061b8a9ae1c2f97e29637", size = 532586, upload-time = "2026-10-21T15:30:28.027Z" }, + { url = "https://files.pythonhosted.org/packages/b7/35/909a33c253352346ca081a27ca66b45c1398468adf784b767597ca773c28/tornado-6.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e035c065edadfa696529d05eebcbeb25154c129b5aee6dbfb697a6abf5d4f697", size = 533641, upload-time = "2026-10-21T15:30:29.318Z" }, + { url = "https://files.pythonhosted.org/packages/6f/64/100202666d6e3d96288ab184827762415456c139798a15c962547f9fabf9/tornado-6.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b94e589ab855090c448b5c0937b3a75f1c1a604b7b36207e8236d209f720b9c", size = 533869, upload-time = "2026-10-21T15:30:30.882Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e0/af3ed62bc15830d60328d5b4a1a9076b35ea0ba142cb17b1c1772cb15c59/tornado-6.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1a394c8c9db9137f2a2b42869d9f7b91398fcf19da120d0dde4c4546172710f7", size = 532767, upload-time = "2026-10-21T15:30:32.273Z" }, + { url = "https://files.pythonhosted.org/packages/24/d7/1e2e1a6932eb62d63324b64dba2f62e6eaf79ad883dd209352c297b7848c/tornado-6.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0215d1df6e4b5e736ddad5adf0af4138cf7437fdd39c77c5e69768e37850a632", size = 530956, upload-time = "2026-10-21T15:30:33.746Z" }, + { url = "https://files.pythonhosted.org/packages/70/65/3b9a0e53d7a4c39f2ebe95486540fa8eeb67bfb6e8c437d603c00d35b128/tornado-6.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4d711790e0a9576ad924d942c4607e4e401d697588ea6f30f6662824008a7add", size = 533372, upload-time = "2026-10-21T15:30:35.085Z" }, + { url = "https://files.pythonhosted.org/packages/44/48/90979cbfaa3ff941324a2605eb794af0f087c670cd99f18a69ab40498073/tornado-6.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:034a66bae0f55421d007803e2385d2a59707d8829b2f026373d42f08256e9922", size = 533425, upload-time = "2026-10-21T15:30:36.425Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c4/ce743a86d91f85c255b77a4282eb5b2716b61e74430eb9d1df8578a539d2/tornado-6.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5cb38483b077129056a94dd415a71d29ab4e42b46da894fee8b4657003f10b21", size = 532545, upload-time = "2026-10-21T15:30:37.789Z" }, + { url = "https://files.pythonhosted.org/packages/02/5e/a82131e35778540fc19139229d02aa8cf2453a8022e202be50c88f0f8ac3/tornado-6.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:46bbbd107efa37777ac4b83601866d19b4dbd5b770a7a9123582633d95959ad3", size = 532700, upload-time = "2026-10-21T15:30:39.336Z" }, + { url = "https://files.pythonhosted.org/packages/3a/09/6dac8c2c677c65d60b3d7dae94176dbfe392f314e7c8e2d709623edd6a26/tornado-6.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b85e9d0263cdbc027b95947c8b873a7bc7fd6a08d16bfb4f5047350b0808e464", size = 532712, upload-time = "2026-10-21T15:30:40.698Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ac/71e5776cbcdc3264e81aa6db28c69717ba50607a9eb8d5b766f11a4b020e/tornado-6.6-cp314-cp314t-win32.whl", hash = "sha256:4276eef0880e5fe4488e6799c2842f59af3b06637e9313ab4fb506f9c9c2d6cb", size = 530491, upload-time = "2026-10-21T15:30:42.115Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0f/0b6a6908a5b5aa8320009dfdb84434b1cf160b577a00456e59ab9e6ea598/tornado-6.6-cp314-cp314t-win_amd64.whl", hash = "sha256:10d4af98c6df09f8429b1340ccaea3a72887b86f695dfb8056bda517c8115a00", size = 530780, upload-time = "2026-10-21T15:30:43.414Z" }, + { url = "https://files.pythonhosted.org/packages/3c/39/c152e1cc5371f75f5f9f0a4f44bf2dc9396be9407d384de7428446fb4651/tornado-6.6-cp314-cp314t-win_arm64.whl", hash = "sha256:b1f0ef20a5278854f5fdac31637bafadb055405df28b7fc945e54add12b172e3", size = 530781, upload-time = "2026-10-21T15:30:44.741Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c5/f96c7d7a8895745bb37dfb6e6107e1ee40ad02a4b162d7d6c143644455ab/tornado-6.6-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:8f8e382da30fe042f27f27a871e21aefc2613870e5a41648de18446c72d6ea59", size = 528446, upload-time = "2026-10-21T15:30:46.112Z" }, + { url = "https://files.pythonhosted.org/packages/c0/dd/ab8f6500d274b9c55b025798eb54e92591bcff27515799bec443bd54e35a/tornado-6.6-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8c7a8a328396c2195454a2ecd9499512441bbce99505544a717e6a87d16ff6f9", size = 532774, upload-time = "2026-10-21T15:30:47.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/23/b78e7d1bf329160b8157284005395421ea941864c16c7f04c3e48c98bcf9/tornado-6.6-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca025bb0da81c294aef26f27427316df1525220820315f4bf32dc1e84a4d2232", size = 533872, upload-time = "2026-10-21T15:30:48.884Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4f/ab66b614ad0bc9a219484be6bc2c002c8de9916a7b6c7b27fe6273838e5c/tornado-6.6-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:59c22ebc905ac2a267f8d9d8a878f86afbcbbde329d75c485f1422fc45a81b83", size = 534027, upload-time = "2026-10-21T15:30:50.157Z" }, + { url = "https://files.pythonhosted.org/packages/da/63/501fa15a36bace2f4b9158228cf922d606403261bf71c960c433ec3ca0a4/tornado-6.6-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f89802bc0bcd15f988d9325b4e6d2171bb04ea68d188732556335e10d3fd00bd", size = 532936, upload-time = "2026-10-21T15:30:51.45Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b7/82d643f635f0300bda98613ca2660b4f3134b6fb594c6fddfa4de706806c/tornado-6.6-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:70043256d5958f9c655066153d23d60ea3e29bf9854f7fb75850e223c477758a", size = 531254, upload-time = "2026-10-21T15:30:52.865Z" }, + { url = "https://files.pythonhosted.org/packages/d4/53/92c40891a94750bc09257310af964bf25c59e3531d6199736c318baa864f/tornado-6.6-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:82b49495e3849d644b841ef33b35491160055997deaa93720ff647ef019421db", size = 533566, upload-time = "2026-10-21T15:30:54.15Z" }, + { url = "https://files.pythonhosted.org/packages/7e/88/b82f5c5efde731b88d839ad99cb6ace2a521f03bb6d7346d2de089c76da8/tornado-6.6-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:07b2bcaa4bf447bdbfb664e4c28344226540db3f0ebccd74886528338a240765", size = 533567, upload-time = "2026-10-21T15:30:55.451Z" }, + { url = "https://files.pythonhosted.org/packages/02/2c/e9a7f5d0fca0bdbcd48b2d9c7884dd0b32669c9945d98bc6d303a80ecfea/tornado-6.6-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:c36b921374c302e54909bae17d9f354061d80e7ae7d8c94f73abbcc217866460", size = 532849, upload-time = "2026-10-21T15:30:56.729Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f5/4ade737340ca6ce9c677ea0c2843591c8ad065d07f0913c28d922c7e078e/tornado-6.6-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:7412d9e37aa9f7048e4b591f520a95f7a097278ffab15f1ddf3f5c2320cf6648", size = 532873, upload-time = "2026-10-21T15:30:58.067Z" }, + { url = "https://files.pythonhosted.org/packages/8e/04/6acdc937d0bb6189ddb34ceded517d7bd1c7b3bded5d4e1b3442160e6b6f/tornado-6.6-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:15bc95112b2d24b0bfaee9a004e3f974da929e33b4244a7f695a22f45b08a5e5", size = 532883, upload-time = "2026-10-21T15:30:59.395Z" }, + { url = "https://files.pythonhosted.org/packages/ab/27/0a766fac6b1cc629d96346329a0485287fd2857c51a887a3a154f2a69938/tornado-6.6-cp315-cp315t-win32.whl", hash = "sha256:f661c21117b875d612371f3eb243d0c69f56d9bdd6aee38b7c24453419dfe554", size = 530488, upload-time = "2026-10-21T15:31:00.77Z" }, + { url = "https://files.pythonhosted.org/packages/5c/80/3e4142570883da27b3f60ae82c638ac96e60997eac684740613557519c96/tornado-6.6-cp315-cp315t-win_amd64.whl", hash = "sha256:ee8853ab35da510dc952879ebd9995c82bc10ffb7925fd87930dc0d6916f4b39", size = 530777, upload-time = "2026-10-21T15:31:02.087Z" }, + { url = "https://files.pythonhosted.org/packages/17/57/4a85c617b6349962320b4afbe1386d5b05fd57218ee8ad6e82e0110ec9ee/tornado-6.6-cp315-cp315t-win_arm64.whl", hash = "sha256:7de62e2dfdf559fd7154d2b9aa58ff3d9cff8304ae0519341feb082618bc2a33", size = 530780, upload-time = "2026-10-21T15:31:03.425Z" }, ] [[package]] name = "traitlets" -version = "5.14.3" +version = "5.16.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/2e/a7fbfe268c8a3b32546930c0297c101d65a4a14c304ad5790a9f478f0e4e/traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1", size = 166137, upload-time = "2026-08-03T08:32:36.848Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/0d785f0bc5e4315a96c989bb476d0fc07ea4f85132550c7b156ca2035d52/traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b", size = 86211, upload-time = "2026-08-03T08:32:34.48Z" }, ] [[package]] @@ -2255,47 +2845,47 @@ wheels = [ [[package]] name = "typer" -version = "0.16.0" +version = "0.27.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, + { name = "annotated-doc" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "rich" }, { name = "shellingham" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload-time = "2025-05-26T14:30:31.824Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload-time = "2025-05-26T14:30:30.523Z" }, ] - -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20250708" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/95/6bdde7607da2e1e99ec1c1672a759d42f26644bbacf939916e086db34870/types_python_dateutil-2.9.0.20250708.tar.gz", hash = "sha256:ccdbd75dab2d6c9696c350579f34cffe2c281e4c5f27a585b2a2438dd1d5c8ab", size = 15834, upload-time = "2025-07-08T03:14:03.382Z" } +sdist = { url = "https://files.pythonhosted.org/packages/03/51/d33db42cc72ffd8c30777547b42d01f0cbf9d95a770457698d0174b3ed71/typer-0.27.3.tar.gz", hash = "sha256:d0396f770a560ab1b0a8504e13b5f254b728cedb05c61cf0359e944e50ce8901", size = 205303, upload-time = "2026-10-06T17:24:16.61Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/72/52/43e70a8e57fefb172c22a21000b03ebcc15e47e97f5cb8495b9c2832efb4/types_python_dateutil-2.9.0.20250708-py3-none-any.whl", hash = "sha256:4d6d0cc1cc4d24a2dc3816024e502564094497b713f7befda4d5bc7a8e3fd21f", size = 17724, upload-time = "2025-07-08T03:14:02.593Z" }, + { url = "https://files.pythonhosted.org/packages/07/ea/2e31b67051e91a133189e9c000c222502ddc6969856416de0d095de4c0b0/typer-0.27.3-py3-none-any.whl", hash = "sha256:e50022f28b82a86313e54501317a1db64bf8f8d036ff8cfe5ca7e47675454aff", size = 123312, upload-time = "2026-10-06T17:24:15.054Z" }, ] [[package]] name = "typing-extensions" -version = "4.14.1" +version = "4.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ] [[package]] name = "typing-inspection" -version = "0.4.1" +version = "0.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/68/f1b440335057bfce71b6e50a9d09445aa2ecbd08359a337976627b8409e7/tzdata-2026.5.tar.gz", hash = "sha256:8cc73c0a0bfca7dbfa59235d60b2eff82231dee33f53d206db1acd9173cfc0a7", size = 200404, upload-time = "2026-10-03T09:23:14.143Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, + { url = "https://files.pythonhosted.org/packages/94/21/1e5995a1c920cce14e4bffae20c665ec10e7ed03ab25e006cd741092b718/tzdata-2026.5-py2.py3-none-any.whl", hash = "sha256:b683bd1b6659ddcd810ff02ad09ba821d4bf1065072805063eb35c49617905ac", size = 347996, upload-time = "2026-10-03T09:23:12.535Z" }, ] [[package]] @@ -2309,73 +2899,100 @@ wheels = [ [[package]] name = "urllib3" -version = "2.5.0" +version = "2.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, ] [[package]] name = "uv" -version = "0.11.25" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4b/8e/2777bf40df3c634f2a522baaa2995d2bd5901461fc5d8730c04c39fa6c75/uv-0.11.25.tar.gz", hash = "sha256:458e731778e7b5cc870710397859c23e766703e7bc0695f23b3eb15080745ba6", size = 4329198, upload-time = "2026-06-27T00:49:00.519Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/a7/dc836daca0db76178cfe4e40ee95fa2c5f96a3d7b3cda0bdde5291aef8b8/uv-0.11.25-py3-none-linux_armv6l.whl", hash = "sha256:d6f965a79fc7539a12139ce981caa0cbf7d9d3bd4ea3daadaf174ab4d7fb6e42", size = 25153689, upload-time = "2026-06-27T00:48:10.708Z" }, - { url = "https://files.pythonhosted.org/packages/9c/97/d60eabb616db232ed0e682c55d858d0980175a92336429c4e0ee82a160e6/uv-0.11.25-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:610650cbaa0a9b18015da39d2c28d736d287a5a124e49296d8fdef5e4022e980", size = 24149272, upload-time = "2026-06-27T00:48:13.917Z" }, - { url = "https://files.pythonhosted.org/packages/ab/fd/9f72373e340c6abcd3eb9257d69b442434b65e90e1f7f53f333abdac11b2/uv-0.11.25-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f7a78fc8d0c5e764e9fa39c99066db47a0bc465b023feed90812e3c0a6b5eb0d", size = 22885453, upload-time = "2026-06-27T00:48:16.641Z" }, - { url = "https://files.pythonhosted.org/packages/ee/c1/7cbb3f6b4a021ce7c1c453d1412d3b4b68d7d7585d15d91a57e9ab0a317e/uv-0.11.25-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:e3480640983e0b8e509eeb67882837e620bdd820f8776948a5f13ebbb4481d04", size = 24935172, upload-time = "2026-06-27T00:48:19.495Z" }, - { url = "https://files.pythonhosted.org/packages/df/d4/862a534ab4aae28ad2c9145ea5af3021eefe225e4e1c983278bb34b53b9e/uv-0.11.25-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:b180b12237b4e04692491fc6796584a9a8bdf4c7332bd2a769caf096b97885d0", size = 24665125, upload-time = "2026-06-27T00:48:22.408Z" }, - { url = "https://files.pythonhosted.org/packages/91/2a/70ef2f2a212d89d23f90e1c8017c080fae93bec21cd9f14795498a6e6f89/uv-0.11.25-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:69d14ffd0a4b050f8a70f64aacb09b8dfdfb1cb30a6351fb17b48f273f95c58c", size = 24653836, upload-time = "2026-06-27T00:48:24.858Z" }, - { url = "https://files.pythonhosted.org/packages/44/2b/a7beea057778f092daa5aeda7aeb3f8bfa78f4a0622245adb449fdbb3d20/uv-0.11.25-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ef11d9967a38109e6e8e3d20d1f743fa08033c32bce274d6ccd9a9abb5d305", size = 26069304, upload-time = "2026-06-27T00:48:28.05Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e8/bb8ab595a27035b565cedd5d601ae2b85cf6aba6f68cd6a97eae88dd7250/uv-0.11.25-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3febca65ec5bc336ddaf7e4f724704f2c894c16839723df14865ee00b4acf38d", size = 26992784, upload-time = "2026-06-27T00:48:30.584Z" }, - { url = "https://files.pythonhosted.org/packages/17/90/bbfa0653e992877e5ea78ab3186fb6a5a122ebef5913b6809ef6d06fcf9b/uv-0.11.25-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:850ba0018ff170c3a9baaf9b5fe8b23393b6b77ee4ea6b2e2315fdb8d7c388f7", size = 26151002, upload-time = "2026-06-27T00:48:33.739Z" }, - { url = "https://files.pythonhosted.org/packages/91/01/f5a01fd777ce501cc59eb71775f3bbacac258a65a64939f07804c2279c98/uv-0.11.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2bc05e17ae3e1f232abf93e7dcfb3b68702dfcde34a00c29cbce7e07d1ecbfb", size = 26334122, upload-time = "2026-06-27T00:48:36.247Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c4/f8b3b6b1bb48a452d98c02909e229f7ae317300618d6dc334c883742339e/uv-0.11.25-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:57fbd47e924242fd347d0c209d95711d8ea61db8d8780962d0f30ccde2c854a3", size = 25055505, upload-time = "2026-06-27T00:48:39.418Z" }, - { url = "https://files.pythonhosted.org/packages/c6/7d/aece221faba22804d8b4f913903358dc2d45193babf2a44a49f79eadd25b/uv-0.11.25-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:f42de9e7d63a28a4fe76a522077813656de38b5acda20b4db63857d260c1ff13", size = 25660097, upload-time = "2026-06-27T00:48:42.398Z" }, - { url = "https://files.pythonhosted.org/packages/d3/7d/b835ed56eab281054efbfbcbbe1249621908c6e4c721a878904cbed2f418/uv-0.11.25-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2c1cfe97dce56c997dfa3214bdb8955b7b34cceea7505520185e22ad99c0eb6b", size = 25759374, upload-time = "2026-06-27T00:48:45.069Z" }, - { url = "https://files.pythonhosted.org/packages/c2/fd/28c990fd18330aa01383bae738be113f4ac5d9d414f92790947326c6781c/uv-0.11.25-py3-none-musllinux_1_1_i686.whl", hash = "sha256:fbff70ae9fa4da9fb6823ae4fdaf77a65c9520e13b6d1d0241ba56e4b121b7aa", size = 25329343, upload-time = "2026-06-27T00:48:47.718Z" }, - { url = "https://files.pythonhosted.org/packages/70/48/16ff9dbe5f308cb547e227971cbcaf3c905797da12a4116b620e2acc09cb/uv-0.11.25-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:41b37e724f41eb4c3794bbdd82ddeebb4b5850d4ada8cccb2906ef9e5aa0f83b", size = 26477125, upload-time = "2026-06-27T00:48:50.251Z" }, - { url = "https://files.pythonhosted.org/packages/f6/8b/4146a55d3ee6b2b67c3dece3ef6be220c443abafc2dc56baa2f74d6b36a8/uv-0.11.25-py3-none-win32.whl", hash = "sha256:86d4759fec9b46f61944d6e9ef1f5eaa2c5fbe2db5ddb59492d9174b08fcf39c", size = 23896598, upload-time = "2026-06-27T00:48:53.01Z" }, - { url = "https://files.pythonhosted.org/packages/64/66/784f9fb457b640dbb96cdd175f4902235b42ffe740dbaee9ea5fc649d8b2/uv-0.11.25-py3-none-win_amd64.whl", hash = "sha256:560b0fbaa6356af533923a349658c21d4f410d16e835787d8a05da451d4ee859", size = 26862205, upload-time = "2026-06-27T00:48:55.667Z" }, - { url = "https://files.pythonhosted.org/packages/85/cb/d7bb121261db0b829f38b1e86b80d8103afd050b8a5c5c9fe4a988d2f1fc/uv-0.11.25-py3-none-win_arm64.whl", hash = "sha256:79f166cd1b84f855e9d2768221d59b403869648289fd884d58ad4299edfb4d9e", size = 25153588, upload-time = "2026-06-27T00:48:58.495Z" }, +version = "0.13.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/f0/7565e80415f841c3500ed69d86516c7676e3b24470a218ab61b1f43071a2/uv-0.13.5.tar.gz", hash = "sha256:979409b8c9a78df140ffb19c53f511b7a73526da8d1d5e36558833055e371c6c", size = 7513309, upload-time = "2026-10-22T01:32:33.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/ff/e30478710f53cf388c892e27e90662aa2acac7a7998bdb18023c595213c1/uv-0.13.5-py3-none-linux_armv6l.whl", hash = "sha256:8d092d07d2389909027c2ed4965ade1bd46bbcecceb26686ff40927684f8c457", size = 18325046, upload-time = "2026-10-22T01:31:37.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/2a/dcae794203261e49564bb9ff7c4b64a093f69ac73476cc8ce54c1deed3a1/uv-0.13.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:337a14829bb499e114989df4f908f134ff37f1fb6c33497541cfb05b28080e39", size = 17335724, upload-time = "2026-10-22T01:31:40.889Z" }, + { url = "https://files.pythonhosted.org/packages/d2/26/9ac45211123244ea68be852775093af487a64debc13621a2de239f8ebe73/uv-0.13.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a42c85fa8156e1e5e2cecdbc77bb818ea1dcf5f78b8e2a8f84c7fe4f16f0702e", size = 14470685, upload-time = "2026-10-22T01:31:43.897Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2e/5bf9acf9d11fb790420e258a875e13bba36bc890858350642aca185efe0e/uv-0.13.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:2386c2dc9b59fc1d39b1c500e4319d71d3268232eb3b38e29cd6775d6269e8d4", size = 17784583, upload-time = "2026-10-22T01:31:46.95Z" }, + { url = "https://files.pythonhosted.org/packages/f3/70/b02fdcbae77346e3ec1310e7de9dde541252e709f6641db3fbd32cd4da79/uv-0.13.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:4f62680fe58c5a83fd539e38f1956c2b577b1f5939c9020aa4c7f0addda2f4ad", size = 17866408, upload-time = "2026-10-22T01:31:50.352Z" }, + { url = "https://files.pythonhosted.org/packages/fd/b9/6663095851e0943e05e47318d7600e567bc172a1e7a26b21b8e6608e8491/uv-0.13.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e03f5717bdaaf5ab4e2df361d2395e36b515946f56ef4bed88801aeb9959fb0", size = 17753574, upload-time = "2026-10-22T01:31:53.502Z" }, + { url = "https://files.pythonhosted.org/packages/e5/84/1bb89a94486b813bbeaa1b8b491e69a25fa864626711944127b186f903de/uv-0.13.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f867c5ec24c563afaae730a13e46cdf74a1a0b64c134286ff99762a96e2abf40", size = 18502087, upload-time = "2026-10-22T01:31:56.748Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a1/b0b0c7247f3bb0f307eae8a28679ecd0d4b0e2757fcf6c87dea6f679a099/uv-0.13.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3fd5db55c20feb672ea457361aba29ab68b9ae69a14d98ad6c138b5f86dcca4", size = 19927049, upload-time = "2026-10-22T01:31:59.831Z" }, + { url = "https://files.pythonhosted.org/packages/b4/44/6bf11de78ce18869849a14178534b900dbe4e310270b2f60df6503c03137/uv-0.13.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e01481ae5212e45ee7c85fad5fc67f06b0ee0329a7c3c289dc529da884b03881", size = 19662743, upload-time = "2026-10-22T01:32:03.258Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ad/3c2a81d66d1839063662e5b6c0002ec31f8ee987dbc5295747627ca6160a/uv-0.13.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa8d26e08e34c29c0c4e820cf3181757086d547240b4f4d31ff1d8bd810ca946", size = 17211825, upload-time = "2026-10-22T01:32:06.393Z" }, + { url = "https://files.pythonhosted.org/packages/4c/92/d83d019c63c1ccc6ff17df2bfe76270412f9766e7e71aa4d4ccbf018683f/uv-0.13.5-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:91e58e304b63b6c91bac5561459ab0c3ea24f17bc01ea9359d69fed72142978f", size = 16654136, upload-time = "2026-10-22T01:32:10.086Z" }, + { url = "https://files.pythonhosted.org/packages/b8/5a/d42f9d93b322ad36647eb3bf516cc528847c240f630f6df213b6221c5262/uv-0.13.5-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:309a74d3c488bfaa3ba7bff759da73193d8781729c0a01274f4940fd32bb5712", size = 17921105, upload-time = "2026-10-22T01:32:13.174Z" }, + { url = "https://files.pythonhosted.org/packages/97/79/c5c2c39c78cf7a1dd6e041b3f7aa2cc4258d351d42dea06f6fee0bde5daa/uv-0.13.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:469cca66de1b17c75b9b9de806a64cffb57cba5e42b1e30d0bba6fa72a146f58", size = 18103266, upload-time = "2026-10-22T01:32:16.302Z" }, + { url = "https://files.pythonhosted.org/packages/01/2f/e5c70a05013077e5ecadb804418ddbab33f7279f96d052f79f565369b2a7/uv-0.13.5-py3-none-musllinux_1_1_i686.whl", hash = "sha256:2386e8dbfe110ff2f8ec8bd344dd18bf39eb9eb54e1edeeb87c3b85c34229cd3", size = 17842061, upload-time = "2026-10-22T01:32:19.208Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b0/7dba2cb636d7f58e0d74e948ad1afc6b7923e84e82de025e9951a68055db/uv-0.13.5-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:d162669e3a7811c584b03690eaa11e796ad1d309aa8229d5dfe3cbcd68a90400", size = 18963145, upload-time = "2026-10-22T01:32:22.362Z" }, + { url = "https://files.pythonhosted.org/packages/00/7c/e38b312abaae1bd59ff5886126f48e9e223fbb9a8edf9e236ede976f67cb/uv-0.13.5-py3-none-win32.whl", hash = "sha256:f4e55a6e2a1089fe74ed50fbdf2df0f6f336ee148ad232b05932db5deee8007e", size = 16240919, upload-time = "2026-10-22T01:32:25.329Z" }, + { url = "https://files.pythonhosted.org/packages/32/ea/771744a784b16aa21d195cb5d5d5a2878d72fa00fc26f11ea3f9646994fe/uv-0.13.5-py3-none-win_amd64.whl", hash = "sha256:1fb29fc46ba12033e2ef95a95ac79d649e71bbb1358419bbbcbd19d86026ef2f", size = 15358650, upload-time = "2026-10-22T01:32:28.22Z" }, + { url = "https://files.pythonhosted.org/packages/52/67/1f31243f75ece410f2db1afdfc9a9f9722fdee2385e4a347c3ca1dee6d13/uv-0.13.5-py3-none-win_arm64.whl", hash = "sha256:0548460d46c8667488b1f089e936f29f0edfb1cc753f9152ffbd8bc84a46aa20", size = 15533668, upload-time = "2026-10-22T01:32:31.335Z" }, ] [[package]] name = "wcwidth" -version = "0.2.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, +version = "0.9.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/01/e5ac23733628a6bbb91913a765fcf55ee8070d8d991bc88fdaaf805052c7/wcwidth-0.9.4.tar.gz", hash = "sha256:fd8d57d3cdfe570e3265c8fab1885c24e34ef40889c0759c0c304a19e9835954", size = 970051, upload-time = "2026-10-24T18:11:44.954Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/b8/d251589a100250b71a7b8e83fedfcabfd8bd60e78cd1e3329372f63bcc93/wcwidth-0.9.4-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b7969c9aa258d536df54c8ac8af5cad0c74a6268c9972e1fb60a5f29feffb66d", size = 612952, upload-time = "2026-10-24T18:10:55.925Z" }, + { url = "https://files.pythonhosted.org/packages/04/e9/dfdca30ca36c472de3e260406dee29fc108499ec590c63b3fe279887ee9d/wcwidth-0.9.4-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:f279f32c8e206a9092fa350e53ca0c2bd8072e45b1c9fd31bb6d476b59b591c4", size = 618904, upload-time = "2026-10-24T18:11:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b6/d7416f38054a107d2fb17c2b73b68723c6c334f69c4e29545fb9e6df81eb/wcwidth-0.9.4-cp310-abi3-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:a1526cd25c6420e5153bb7d764c7509e692215ee3ad9b725db1ad665d47eae09", size = 778780, upload-time = "2026-10-24T18:11:17.299Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5b/42bdf9a4b0e4f9126584af2ec73642de495f3bd8add907430f13c3bb98d2/wcwidth-0.9.4-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:093469e01d881bff3db93ff3f56c364dc87c441ea01f9f41c22de0c0bdf5c6ef", size = 789012, upload-time = "2026-10-24T18:11:07.829Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e8/0485850748dfdba9443f4151c7b2442cfa4987ba6cd871038eb5d6b8eca9/wcwidth-0.9.4-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b185c8b927b23af2721be1783499d1cfa5c028b098b0858951b4ae224477f1c2", size = 785946, upload-time = "2026-10-24T18:11:18.748Z" }, + { url = "https://files.pythonhosted.org/packages/e9/11/dd3d0379c6094524df6585b76ae3d9727161ff29c003177e3661c36437c1/wcwidth-0.9.4-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:17619066f95c10f44d7ae08ee456602456bc66cc9d5e91966ec73d799acebc5f", size = 795348, upload-time = "2026-10-24T18:11:09.931Z" }, + { url = "https://files.pythonhosted.org/packages/3c/48/1b5299983d9ec084be897162b7cc6014622dfe62847224fa3272b6d79ea5/wcwidth-0.9.4-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:b52f265a694dda6b3ad9050c8bd89158ad519109ef7c5eb110b906cc49f25763", size = 793420, upload-time = "2026-10-24T18:11:20.551Z" }, + { url = "https://files.pythonhosted.org/packages/7a/be/e3097d859b075344a7be57774a58d468eafb0ca88e02aad93eb31d69f6ba/wcwidth-0.9.4-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d8905f1390d828d745fdd1904374c90386d902d3cfa9ee88e9875099f75a4e17", size = 796192, upload-time = "2026-10-24T18:11:22.552Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cd/739710c8cf0de461239db5bb6ee678c9a33d30aaa22beff55cc356781818/wcwidth-0.9.4-cp310-abi3-win32.whl", hash = "sha256:4831662c396dd4c59a016ec53c0ac96738006d653a00482777d9a2e2ea323d62", size = 593229, upload-time = "2026-10-24T18:11:35.609Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f1/c123f902bc2ff9e9c2ab66241b8872204df87cbb18ecdf035e120860fedc/wcwidth-0.9.4-cp310-abi3-win_amd64.whl", hash = "sha256:f28d77153303450ee13ebbe888297e75cf532c754555b6cabafc9bdda16c421c", size = 597780, upload-time = "2026-10-24T18:11:36.952Z" }, + { url = "https://files.pythonhosted.org/packages/4b/88/1cb5ddaf5510b918e01aa95fc4b68df91dead784b63e4931037c5673e85f/wcwidth-0.9.4-cp310-abi3-win_arm64.whl", hash = "sha256:2b58fc8cf2de1bf9cdb68b8beaa5be198742414a7c8cd97aa51ec039783ffa49", size = 598786, upload-time = "2026-10-24T18:11:30.886Z" }, + { url = "https://files.pythonhosted.org/packages/b0/cc/46a31c12b4cdad04f546a3c0aca5d000d77aa5069ae88b4db24525cc29c4/wcwidth-0.9.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:87e4101789415a6cf55ec4c53eceeb4782c2654c88692941cb588f19dca1959f", size = 613805, upload-time = "2026-10-24T18:10:58.887Z" }, + { url = "https://files.pythonhosted.org/packages/18/f6/5a8327af9a65153ea9823d6a12fc182f325264050aa25c05a5deadc189c9/wcwidth-0.9.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ab1e5190fb82476e75fbf963e9d59b4fb1c1e1f4ced82069a0c989016aa959f7", size = 619936, upload-time = "2026-10-24T18:11:04.073Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d3/bb8a7f4aa9b915e56e09841b07636ba49c82ec987ad3d2022e1696c038d9/wcwidth-0.9.4-cp314-cp314t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:8f892713ab5795d3abae181e9c02db0eb24de4084f9ee080535369d3d98d7bb5", size = 794563, upload-time = "2026-10-24T18:11:24.4Z" }, + { url = "https://files.pythonhosted.org/packages/12/0c/986acadef534688a57502d484a40e0f30bdca2d39514fe0a311f7d575f70/wcwidth-0.9.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:befbf46467100e43fd8c8cc0c031a0105f13f5418c3be95fdcf0c47214487967", size = 806565, upload-time = "2026-10-24T18:11:14.297Z" }, + { url = "https://files.pythonhosted.org/packages/9b/1d/66a94b9ac07037d7cf2c1f1288867c9932215d467893eaa5ec8d548c7f2f/wcwidth-0.9.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c4b0dd04cca520792100f6110d10be262c94b285a281d1759c551f159214633", size = 802372, upload-time = "2026-10-24T18:11:26.275Z" }, + { url = "https://files.pythonhosted.org/packages/d1/00/1d50b8e8b45a8330b582695bf8196081a609317928a3718cf21b3d14a899/wcwidth-0.9.4-cp314-cp314t-win32.whl", hash = "sha256:14410eb73178cc492aa9bf22f7c12e3bf930e5470b7220cf6f530efbfa2e03f3", size = 598917, upload-time = "2026-10-24T18:11:38.369Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fc/3e39a33fc8f5c4e07611578710275039c9d4a6655e2be7cf3459401a30cc/wcwidth-0.9.4-cp314-cp314t-win_amd64.whl", hash = "sha256:c36954849aafae1092d6f9de9548c5280c1d6841637a27ca288b2241c802c4ab", size = 603536, upload-time = "2026-10-24T18:11:39.922Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8c/b1f399fd2f8449e42978192967ab6df441d7cf894b10117983c36c062b18/wcwidth-0.9.4-cp314-cp314t-win_arm64.whl", hash = "sha256:79e09e9824c88f5e275ca99e921685567a5c5c1bb6165c16e27ddd1adab33a95", size = 605127, upload-time = "2026-10-24T18:11:32.367Z" }, + { url = "https://files.pythonhosted.org/packages/04/46/839780e772e9068580619d4d691348b7a5f9c4fa5ffe501e522eefeb27cc/wcwidth-0.9.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:a8c9ce14c6b4a499e61de6de7e9e456de11be8bc991554e2ab2ed4feb40b9664", size = 613850, upload-time = "2026-10-24T18:11:00.725Z" }, + { url = "https://files.pythonhosted.org/packages/d2/66/b2559c7012bbd4268f5b5c0288cb793c78235d354e306871a55893aa9d1a/wcwidth-0.9.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:d68f09093c9bec9226a52edc47487042ed4f64c5df91d06f00419495071c0279", size = 620207, upload-time = "2026-10-24T18:11:05.975Z" }, + { url = "https://files.pythonhosted.org/packages/d1/fe/7d2c39e28924b2430b20099e36276f14e00e75c7bbe4ba5b1ed44d1d465a/wcwidth-0.9.4-cp315-cp315t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:d76b7c715c5ca0103b28915f699f1020ae21f06f1d22cdd85a7a97f7b1536eed", size = 797056, upload-time = "2026-10-24T18:11:27.911Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d7/f4f9967a411e02b89b74df2f49f44977c4badccf29738f3ae6941619e27c/wcwidth-0.9.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:29c0685f5f5f8815b88308fdcbe2cd12a92996a21a5b1e18352d165174ef7a6d", size = 806169, upload-time = "2026-10-24T18:11:15.724Z" }, + { url = "https://files.pythonhosted.org/packages/ac/bb/e2b40c6522f3aa1222558487dda3551d297e07e245761b4816f6caeebc29/wcwidth-0.9.4-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e05458491759aa42b7b85f36345b3e6df082d6d2d9bf616299668fd598e0209d", size = 803462, upload-time = "2026-10-24T18:11:29.269Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f2/ab69009f2dd0d3772d3e07f025fa046b33c60c195e4f2e5f000297d23547/wcwidth-0.9.4-cp315-cp315t-win32.whl", hash = "sha256:9e5090d253f5df99659cddfd3ed90dd21f6ff51989b0421331a63fb2681cbe27", size = 598931, upload-time = "2026-10-24T18:11:41.659Z" }, + { url = "https://files.pythonhosted.org/packages/63/6f/b321f10c2298e7d16cffc1a5f05f3d7e5231b45f9e68af5ee378e23bb2e5/wcwidth-0.9.4-cp315-cp315t-win_amd64.whl", hash = "sha256:12786620375dc83fabf4b2b2aa52416fef2bc6094522ea29c8a53c75b0dfe9b6", size = 603485, upload-time = "2026-10-24T18:11:43.052Z" }, + { url = "https://files.pythonhosted.org/packages/4e/cc/7eeb28059186cae72a770df79e744f232ef068192a5a588b718473e35bb4/wcwidth-0.9.4-cp315-cp315t-win_arm64.whl", hash = "sha256:2cca7b5d0b9d0ae49068d3ce806e965326a987f555b62eaa322223396e10d01b", size = 605198, upload-time = "2026-10-24T18:11:33.75Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0c/309b1813b230d1dbbd6f2c2ab2bb21ef68992358977605d9ef289bbfedcc/wcwidth-0.9.4-py3-none-any.whl", hash = "sha256:901eace6d2dd25ebb917d0ce5db18e5c537e1504c905cf32f0d006c12098b05d", size = 301806, upload-time = "2026-10-24T18:10:52.651Z" }, ] [[package]] name = "webcolors" -version = "24.11.1" +version = "25.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491, upload-time = "2025-10-31T07:51:03.977Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905, upload-time = "2025-10-31T07:51:01.778Z" }, ] [[package]] name = "webencodings" -version = "0.5.1" +version = "0.6.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/a0/8fd707bcb776a7be556bad06a2ea5fb9bd519df78ef8e26f70ccf0f38bff/webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910", size = 15001, upload-time = "2026-08-15T14:22:57.549Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/77/c6/040cbc72480d789a5f40d63fb484d3106554c4dfa2d2b70ad5022057750f/webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b", size = 8745, upload-time = "2026-08-15T14:22:56.31Z" }, ] [[package]] name = "websocket-client" -version = "1.8.0" +version = "1.9.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/cb/a5abcc2891249f393827c650c6296660ce40374ac22d99ab9aea41f9d2a2/websocket_client-1.9.2.tar.gz", hash = "sha256:0fcb57545848be86992e128218fd96dd87a6769ffdb1a968dff79632b85604d0", size = 84110, upload-time = "2026-08-31T14:08:40.964Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d2/cc4dc1271e464942db7ee278baae2daa99ee77cb2af744025c04da585a3e/websocket_client-1.9.2-py3-none-any.whl", hash = "sha256:e1a673830a9c7bfa47b1cd3d5e4178f4c9651d80a4eab02c9c23a1c3ec6250ce", size = 95786, upload-time = "2026-08-31T14:08:39.899Z" }, ] [[package]] @@ -2386,9 +3003,9 @@ sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b9 [[package]] name = "widgetsnbextension" -version = "4.0.14" +version = "4.0.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428, upload-time = "2025-04-10T13:01:25.628Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/60/bc7a980fc78837d6ef8f5940cca4cadc433364503a4c4d42e2a7a0de3231/widgetsnbextension-4.0.16.tar.gz", hash = "sha256:adeea0ae78f0856ee4945f413299801b82a0a01416303301f39a704282a37b73", size = 1111094, upload-time = "2026-08-18T08:52:55.859Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload-time = "2025-04-10T13:01:23.086Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/40e17e20046b7bc820d29d09ae84ec157ec8dd6e6f6cd722626292c31b2e/widgetsnbextension-4.0.16-py3-none-any.whl", hash = "sha256:a31a8774885b96fe825462f5d6496166f0c7cae111195b6465c801d230eb5a4e", size = 2225148, upload-time = "2026-08-18T08:52:53.736Z" }, ] From cb8690e2ec2554b13f34e2791cc0ddc6f253a27a Mon Sep 17 00:00:00 2001 From: lambertpw Date: Sun, 25 Oct 2026 20:40:02 -0400 Subject: [PATCH 21/21] Lock codeanalyzer-go without upgrading other dependencies --- uv.lock | 2441 +++++++++++++++++++++---------------------------------- 1 file changed, 919 insertions(+), 1522 deletions(-) diff --git a/uv.lock b/uv.lock index f7b11d84..e0e728a9 100644 --- a/uv.lock +++ b/uv.lock @@ -2,50 +2,40 @@ version = 1 revision = 3 requires-python = ">=3.11" resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version >= '3.11.5' and python_full_version < '3.12'", - "python_full_version < '3.11.5'", -] - -[[package]] -name = "annotated-doc" -version = "0.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, + "python_full_version >= '3.12'", + "python_full_version < '3.12'", ] [[package]] name = "annotated-types" -version = "0.8.0" +version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] [[package]] name = "anyio" -version = "4.15.1" +version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.15'" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/12/b8/4bd346e22b28902df4d651910f5242c28d84e4a5c2435ca5c3f797ed7e2e/anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101", size = 132079, upload-time = "2026-09-05T10:42:37.923Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" }, ] [[package]] name = "appnope" -version = "1.0.0" +version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/f7/a82489c2b6ebe32d3e2831895ae19c77861f0eadf3bb16034484d965dbb2/appnope-1.0.0.tar.gz", hash = "sha256:685db59cb6043c3c2e528adc0b3bce3a5f8d09bcf7492c6ea650d1b7421f3c49", size = 5454, upload-time = "2026-08-20T21:36:13.748Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/c7/6b687cb0f83d2a51017d47953f2ee430ffad6fec2a8ebc964e0718a33eb1/appnope-1.0.0-py3-none-any.whl", hash = "sha256:6fe0c04218aab65c54c4ff81638cdbf848d89f5653b74d68638a137f200dd16e", size = 4158, upload-time = "2026-08-20T21:36:12.444Z" }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, ] [[package]] @@ -62,62 +52,36 @@ wheels = [ [[package]] name = "argon2-cffi-bindings" -version = "26.1.0" +version = "21.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/43/bb8b6e8708d49a5ab36781333af092d9f483b198a2710d01281204640055/argon2_cffi_bindings-26.1.0.tar.gz", hash = "sha256:63505c71542a44b68b1e38060450fb006404170da375feb31af153e7f9c6205d", size = 1790807, upload-time = "2026-08-20T07:44:22.492Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/d2/0ae991f1b2181e5be49007c574710a800ad36c2978683addb3e67c474e55/argon2_cffi_bindings-26.1.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:21ca0396fe5ec995dd54431c32698189666f9224810acfa752e50d2bd94d9df2", size = 25521, upload-time = "2026-08-20T07:32:43.019Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e4/ad91d8297638aa2258aad4501c306aca99480dfe76ccd638173fa3702db9/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78de2d65e0b9ea7ce9d1b1c3e87297b2d7305a02c266ee2a2d6910daddd7ee69", size = 27177, upload-time = "2026-08-20T07:32:44.158Z" }, - { url = "https://files.pythonhosted.org/packages/6f/86/5363df11b86d02cf3662208e7406496327649cc90eb365bf6f4e8a54a41f/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27f1821903e2ceadcb88ec2b45ef190897b7682449c772f4d9b53e42c520cf29", size = 26597, upload-time = "2026-08-20T07:32:45.172Z" }, - { url = "https://files.pythonhosted.org/packages/f4/b5/a14dcc592652347dad23ee93b278a4da5d2a25c9ed3ebd10d68eea823a4f/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d88e5f7e60f28ae0b0cc6b2f16c43e87cd642a196a86f85e0d8bb6fe016fc16d", size = 27403, upload-time = "2026-08-20T07:32:46.13Z" }, - { url = "https://files.pythonhosted.org/packages/b3/81/b4a20d4902af7f796390bf9245ff83c5217dfa7367efa1d14986956c482b/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:34b7d9c24a4165a2c61cc8ae11d44d48c9ce2830fb536cb7914e11fdd9962728", size = 27132, upload-time = "2026-08-20T07:32:47.13Z" }, - { url = "https://files.pythonhosted.org/packages/7e/1b/c8de358af07b1c490e0fcb863ef98e46ddb486e45567aca5a60bd68d9daa/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:224865cbbcb7a2bd1356741dff12b0134df726b6d44bb7b500df8e303cbd9e81", size = 27588, upload-time = "2026-08-20T07:32:48.087Z" }, - { url = "https://files.pythonhosted.org/packages/48/2f/7ee62a6e79f9309f9d9982d301b22a00010adb580c05c8109b94d7b33de0/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ffff613aaa9ce6236766e2fc6dc560bb5abde7a2e2416e3db1f9ae395a2b4dd4", size = 26785, upload-time = "2026-08-20T07:32:48.977Z" }, - { url = "https://files.pythonhosted.org/packages/e9/10/960d0ee93d4897741bcaf4799c697dae2d81499f66fd1ed042a7dd54c1f4/argon2_cffi_bindings-26.1.0-cp310-abi3-win32.whl", hash = "sha256:a86c069c91a747a2c4e5c51473590aeb48172fff9b2130d23729a42d98665ecb", size = 23898, upload-time = "2026-08-20T07:32:50.114Z" }, - { url = "https://files.pythonhosted.org/packages/6d/3a/0cc14a05810e6add9bce5e87693334baa2222de5f647fa31781885b6573f/argon2_cffi_bindings-26.1.0-cp310-abi3-win_amd64.whl", hash = "sha256:2c36ff87b5dfaa477d0bd51e9d7f6abdae7c8955d2983c97419085d842154b3e", size = 25730, upload-time = "2026-08-20T07:32:51.091Z" }, - { url = "https://files.pythonhosted.org/packages/4e/db/d83cf2af140547f0b9cdaece05b2dc2dcbf991be4667331d073eff771435/argon2_cffi_bindings-26.1.0-cp310-abi3-win_arm64.whl", hash = "sha256:f9c4420a7a864fe1b86ce35befc95b8e39fb852493b81cf798671ddc265de638", size = 24478, upload-time = "2026-08-20T07:32:52.111Z" }, - { url = "https://files.pythonhosted.org/packages/bb/5f/f652055e18d2627e2eed94c7f31a792127cfe38df786635395d742321674/argon2_cffi_bindings-26.1.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:af11ac37a7c53dc16cb7950a6190851b0870fe218b6c60c0bb7ac355234e3083", size = 15434, upload-time = "2026-08-20T07:32:53.143Z" }, - { url = "https://files.pythonhosted.org/packages/76/38/de696045960f5b846d428c0fb6c130ed3da87aac2af209b05c193815404c/argon2_cffi_bindings-26.1.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:db0fcd827ca61622a01b220aadfbece01939acf53888f2cb98cd93e9b1e2c97e", size = 15449, upload-time = "2026-08-20T07:32:54.075Z" }, - { url = "https://files.pythonhosted.org/packages/91/0a/c25af768f6b75a5a71e31207f87c540656b2808c015260444a22763221ad/argon2_cffi_bindings-26.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:28524438cd3e723f25412f63d4fd516ff5bae9ae5aa56acbe2a1404398a0cf31", size = 25683, upload-time = "2026-08-20T07:32:55.05Z" }, - { url = "https://files.pythonhosted.org/packages/a8/7e/be212c751ab0bcea7f646615f933bf262e8e50b3f7bef32f861d0a2d066b/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac82fc756a446b6ccd7139ce70efa9d8bbe541e7ad579a12dcb52764b7175c5f", size = 27311, upload-time = "2026-08-20T07:32:56.166Z" }, - { url = "https://files.pythonhosted.org/packages/a6/ee/f84b28e4afd13d3cac36c1d8fa8c239d2dc2c51cd978d02ee5d5ad98d9bb/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6a4e68eed961a8de6928d1c17ff3dc2a547e0e923c17f8f1cd79fb7bc9502f98", size = 26771, upload-time = "2026-08-20T07:32:57.206Z" }, - { url = "https://files.pythonhosted.org/packages/21/c3/95c07a023691ecd529da9cb6a8f0779e13ebc1bdfaa86d145fdc1c6e7e79/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:151dfaad9de753f4af2a7854e707e4784f2acc434340ade64239c5b104b2d605", size = 27568, upload-time = "2026-08-20T07:32:58.361Z" }, - { url = "https://files.pythonhosted.org/packages/e6/31/3a18e31406d8694b4d6a31573c3e572fff6bed318bb744453eb653766d22/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:061a6919145bbf282ebf1f9c59d3135d4833c25313c8595c0d68cf7712ddfce2", size = 27280, upload-time = "2026-08-20T07:32:59.343Z" }, - { url = "https://files.pythonhosted.org/packages/0b/39/d4be4577e178b2397aa5b5575c8a309bf0da2afe05fe0c72c8f398662d63/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:62ff20cd130c956c7c9144d5fe35228f98b51c579b2439e988b27ef93e16c02a", size = 27776, upload-time = "2026-08-20T07:33:00.325Z" }, - { url = "https://files.pythonhosted.org/packages/71/47/78f4dd96f7411339f723b96fe24039c1bd5835102b8a5ba71ac4ec712ac7/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:19423e5d7ac1cc354baab59eaabf18db2ec04ef6593b5abe5a34f323c4a8f87a", size = 26932, upload-time = "2026-08-20T07:33:01.272Z" }, - { url = "https://files.pythonhosted.org/packages/3b/cd/96bfd37434cc0a848a9066c291d84b28846c4c9ea289ed9866b1164d622b/argon2_cffi_bindings-26.1.0-cp314-cp314t-win32.whl", hash = "sha256:4f84cdd868978d7b7350a566c254042d44216d9e37f241f3a6d3b1dfebeede35", size = 24878, upload-time = "2026-08-20T07:33:02.189Z" }, - { url = "https://files.pythonhosted.org/packages/f1/42/d8b6810abd9b1bd2f47ebbccf460da59c9f32e94888bea4f7b137d998797/argon2_cffi_bindings-26.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2b741888c93147444fdfc851abd81cc207f37f7f7da42062a00deb3888e57da8", size = 26656, upload-time = "2026-08-20T07:33:03.222Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d1/095d95eaf2ed1d9f77268cf3291bde148c6cd56121f8db2c74c1ba618a0e/argon2_cffi_bindings-26.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:6ab674f668d5962a3a4136ae0812519b0f1586874263723a32181d60d64137e1", size = 25378, upload-time = "2026-08-20T07:33:04.332Z" }, - { url = "https://files.pythonhosted.org/packages/66/cb/214092c39c4dbcb72cf98b12234ddac2221f8fe2c0acf29c6a70fa83be53/argon2_cffi_bindings-26.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:1d98e33bd8bd67d7206c124e200bf2229c4cfa8c9c19f7b44a897f0fc71837eb", size = 25683, upload-time = "2026-08-20T07:33:05.337Z" }, - { url = "https://files.pythonhosted.org/packages/83/e5/02015b83e9b05ccb85ff2ced424cf6e83a12d3810bc7f66d679a92b69ffb/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ccaf0a46cbb380f1fd102a874e32aa629fd3cb0c0e94f4943fa1f6d5edc5dac6", size = 27310, upload-time = "2026-08-20T07:33:06.344Z" }, - { url = "https://files.pythonhosted.org/packages/c3/4a/85e612787d0796878b3b4f6bd53dcd5484b6fe7b64cc6fc7b6e6a04cf835/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0c3103fcff20183e593459cfea6e012281c0e76ae3ed8b5565ad1b92eac3990", size = 26771, upload-time = "2026-08-20T07:33:07.429Z" }, - { url = "https://files.pythonhosted.org/packages/f6/84/ccb003b6f9969820e87656398f4d49c857def71a85ca1588a0e809afd7ce/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c49e853a3bef9dd10329f31f702e7fa9b5c58229ff9c2ff6d069efaf09177c08", size = 27569, upload-time = "2026-08-20T07:33:08.598Z" }, - { url = "https://files.pythonhosted.org/packages/88/07/c26b76debf0998ee08fbe947ab2058ac5de37d4b9d46b06c17abaa6c4ce9/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:6376d4b3aca039375ca8bf92f770da0ec424a1ce3a37077a8d3c557411aa56ca", size = 27279, upload-time = "2026-08-20T07:33:09.518Z" }, - { url = "https://files.pythonhosted.org/packages/ee/0d/ead6ddc029f91bc9b9390686dad3c808ab08100d348f6266b5f93f8970ee/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:9bacedc04b0402837586a17f0919e3dfdd95291f441f1f56bd80ec274c2840a1", size = 27774, upload-time = "2026-08-20T07:33:10.728Z" }, - { url = "https://files.pythonhosted.org/packages/7d/47/c108530d9eb86036b78d3af4de28b83b4a2d9a70512bd10ff8e59966aab4/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:76ae29acace5d33355344612844d588e19deaaba4639d8bb01601e4b1418ef36", size = 26933, upload-time = "2026-08-20T07:33:11.661Z" }, - { url = "https://files.pythonhosted.org/packages/a9/02/0bfc59e781c89acf64c31c388aade9d9d1c1ea38aa1ba1292fe07f607fe9/argon2_cffi_bindings-26.1.0-cp315-cp315t-win32.whl", hash = "sha256:df612391feca41c44d20118f3b88d1b86419465cd1f5496859f715ca60ec2210", size = 24875, upload-time = "2026-08-20T07:33:12.616Z" }, - { url = "https://files.pythonhosted.org/packages/61/c7/c3e46068cddffccecb8ad94d71135e9bf62bbc789589e7dfadc7c6f59214/argon2_cffi_bindings-26.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:1a0a29ed86960e44eaace7e081bdfab4f08b012fd96ec8edba71e2ad020939e4", size = 26655, upload-time = "2026-08-20T07:33:13.521Z" }, - { url = "https://files.pythonhosted.org/packages/f4/ca/18b9c8c45fecf34b9100ec6d7946057f14a158f2eaa20ea123a3e82351cb/argon2_cffi_bindings-26.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d157ddfab1e8b21f2f1dedda9c09645d98b5ed0b667b0626be600a345d426440", size = 25376, upload-time = "2026-08-20T07:33:14.491Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b9/97f0370f99611b14efd384918613dd5cbda75f28d9bb1b677aacfeaa17df/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:19b562b1de4b9052ef1214a2821c44b6e6f22945daa102c32ae4eff929d8b6d8", size = 23055, upload-time = "2026-08-20T07:33:19.716Z" }, - { url = "https://files.pythonhosted.org/packages/ae/70/7eb3fe7bf00103cbbb569c51aef150661f22b734a782673a600ff0f52309/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49d525938467d52c923a890153c99087c9d5a937d1f6b585dbdba34ec82e397a", size = 24869, upload-time = "2026-08-20T07:33:20.671Z" }, - { url = "https://files.pythonhosted.org/packages/5b/4b/9d5919c6cb1f15df7406af0f99b048bd93936f112e3e8f4c8077bc2a9110/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1b0bcac4d490a237e18cf91f57352920c29f77f2fa39efd0813fb81298bf17ba", size = 24216, upload-time = "2026-08-20T07:33:21.653Z" }, - { url = "https://files.pythonhosted.org/packages/a3/34/32109943bace7729233cc4ee78530baa306d8cc3c6501a64ba8cb3b58129/argon2_cffi_bindings-26.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:0cc40f7b4050bb93eb67de95d2d759322fc7ce4930b9d645581ecf4913ec651e", size = 23584, upload-time = "2026-08-20T07:33:22.613Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911, upload-time = "2021-12-01T08:52:55.68Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658, upload-time = "2021-12-01T09:09:17.016Z" }, + { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583, upload-time = "2021-12-01T09:09:19.546Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168, upload-time = "2021-12-01T09:09:21.445Z" }, + { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709, upload-time = "2021-12-01T09:09:18.182Z" }, + { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613, upload-time = "2021-12-01T09:09:22.741Z" }, + { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583, upload-time = "2021-12-01T09:09:24.177Z" }, + { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475, upload-time = "2021-12-01T09:09:26.673Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698, upload-time = "2021-12-01T09:09:27.87Z" }, + { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817, upload-time = "2021-12-01T09:09:30.267Z" }, + { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104, upload-time = "2021-12-01T09:09:31.335Z" }, ] [[package]] name = "arrow" -version = "1.4.0" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, - { name = "tzdata" }, + { name = "types-python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931, upload-time = "2025-10-18T17:46:46.761Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960, upload-time = "2023-09-30T22:11:18.25Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797, upload-time = "2025-10-18T17:46:45.663Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419, upload-time = "2023-09-30T22:11:16.072Z" }, ] [[package]] @@ -140,57 +104,56 @@ wheels = [ [[package]] name = "asttokens" -version = "3.0.2" +version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, ] [[package]] name = "async-lru" -version = "2.4.0" +version = "2.0.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8f/43/9d22679e8dd0ed965182cca990d32c68b150730cce8046ad61b3179b5b7a/async_lru-2.4.0.tar.gz", hash = "sha256:b0b0077d9b7596615b3c12d0aad4f6aeccaaa0ac75ceae472608ede89e764c08", size = 22927, upload-time = "2026-10-12T18:12:54.276Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380, upload-time = "2025-03-16T17:25:36.919Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/0b/6a817103fb78faca4970c686a61065047da7226aba0d7cae6d4299b20c59/async_lru-2.4.0-py3-none-any.whl", hash = "sha256:1b46a96419ef91fe11431d58db98d792c9b4250001427191a40faf1031934212", size = 10045, upload-time = "2026-10-12T18:12:53.091Z" }, + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069, upload-time = "2025-03-16T17:25:35.422Z" }, ] [[package]] name = "attrs" -version = "26.1.0" +version = "25.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, ] [[package]] name = "babel" -version = "2.18.0" +version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, ] [[package]] name = "beautifulsoup4" -version = "4.15.0" +version = "4.13.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "soupsieve", version = "2.10", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11.5'" }, - { name = "soupsieve", version = "3.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11.5'" }, + { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, ] [[package]] name = "black" -version = "25.12.0" +version = "25.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -198,43 +161,34 @@ dependencies = [ { name = "packaging" }, { name = "pathspec" }, { name = "platformdirs" }, - { name = "pytokens" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c4/d9/07b458a3f1c525ac392b5edc6b191ff140b596f9d77092429417a54e249d/black-25.12.0.tar.gz", hash = "sha256:8d3dd9cea14bff7ddc0eb243c811cdb1a011ebb4800a5f0335a01a68654796a7", size = 659264, upload-time = "2025-12-08T01:40:52.501Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/ad/7ac0d0e1e0612788dbc48e62aef8a8e8feffac7eb3d787db4e43b8462fa8/black-25.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0cfa263e85caea2cff57d8f917f9f51adae8e20b610e2b23de35b5b11ce691a", size = 1877003, upload-time = "2025-12-08T01:43:29.967Z" }, - { url = "https://files.pythonhosted.org/packages/e8/dd/a237e9f565f3617a88b49284b59cbca2a4f56ebe68676c1aad0ce36a54a7/black-25.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a2f578ae20c19c50a382286ba78bfbeafdf788579b053d8e4980afb079ab9be", size = 1712639, upload-time = "2025-12-08T01:52:46.756Z" }, - { url = "https://files.pythonhosted.org/packages/12/80/e187079df1ea4c12a0c63282ddd8b81d5107db6d642f7d7b75a6bcd6fc21/black-25.12.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e1b65634b0e471d07ff86ec338819e2ef860689859ef4501ab7ac290431f9b", size = 1758143, upload-time = "2025-12-08T01:45:29.137Z" }, - { url = "https://files.pythonhosted.org/packages/93/b5/3096ccee4f29dc2c3aac57274326c4d2d929a77e629f695f544e159bfae4/black-25.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a3fa71e3b8dd9f7c6ac4d818345237dfb4175ed3bf37cd5a581dbc4c034f1ec5", size = 1420698, upload-time = "2025-12-08T01:45:53.379Z" }, - { url = "https://files.pythonhosted.org/packages/7e/39/f81c0ffbc25ffbe61c7d0385bf277e62ffc3e52f5ee668d7369d9854fadf/black-25.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:51e267458f7e650afed8445dc7edb3187143003d52a1b710c7321aef22aa9655", size = 1229317, upload-time = "2025-12-08T01:46:35.606Z" }, - { url = "https://files.pythonhosted.org/packages/d1/bd/26083f805115db17fda9877b3c7321d08c647df39d0df4c4ca8f8450593e/black-25.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:31f96b7c98c1ddaeb07dc0f56c652e25bdedaac76d5b68a059d998b57c55594a", size = 1924178, upload-time = "2025-12-08T01:49:51.048Z" }, - { url = "https://files.pythonhosted.org/packages/89/6b/ea00d6651561e2bdd9231c4177f4f2ae19cc13a0b0574f47602a7519b6ca/black-25.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05dd459a19e218078a1f98178c13f861fe6a9a5f88fc969ca4d9b49eb1809783", size = 1742643, upload-time = "2025-12-08T01:49:59.09Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f3/360fa4182e36e9875fabcf3a9717db9d27a8d11870f21cff97725c54f35b/black-25.12.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1f68c5eff61f226934be6b5b80296cf6939e5d2f0c2f7d543ea08b204bfaf59", size = 1800158, upload-time = "2025-12-08T01:44:27.301Z" }, - { url = "https://files.pythonhosted.org/packages/f8/08/2c64830cb6616278067e040acca21d4f79727b23077633953081c9445d61/black-25.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:274f940c147ddab4442d316b27f9e332ca586d39c85ecf59ebdea82cc9ee8892", size = 1426197, upload-time = "2025-12-08T01:45:51.198Z" }, - { url = "https://files.pythonhosted.org/packages/d4/60/a93f55fd9b9816b7432cf6842f0e3000fdd5b7869492a04b9011a133ee37/black-25.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:169506ba91ef21e2e0591563deda7f00030cb466e747c4b09cb0a9dae5db2f43", size = 1237266, upload-time = "2025-12-08T01:45:10.556Z" }, - { url = "https://files.pythonhosted.org/packages/c8/52/c551e36bc95495d2aa1a37d50566267aa47608c81a53f91daa809e03293f/black-25.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a05ddeb656534c3e27a05a29196c962877c83fa5503db89e68857d1161ad08a5", size = 1923809, upload-time = "2025-12-08T01:46:55.126Z" }, - { url = "https://files.pythonhosted.org/packages/a0/f7/aac9b014140ee56d247e707af8db0aae2e9efc28d4a8aba92d0abd7ae9d1/black-25.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9ec77439ef3e34896995503865a85732c94396edcc739f302c5673a2315e1e7f", size = 1742384, upload-time = "2025-12-08T01:49:37.022Z" }, - { url = "https://files.pythonhosted.org/packages/74/98/38aaa018b2ab06a863974c12b14a6266badc192b20603a81b738c47e902e/black-25.12.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e509c858adf63aa61d908061b52e580c40eae0dfa72415fa47ac01b12e29baf", size = 1798761, upload-time = "2025-12-08T01:46:05.386Z" }, - { url = "https://files.pythonhosted.org/packages/16/3a/a8ac542125f61574a3f015b521ca83b47321ed19bb63fe6d7560f348bfe1/black-25.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:252678f07f5bac4ff0d0e9b261fbb029fa530cfa206d0a636a34ab445ef8ca9d", size = 1429180, upload-time = "2025-12-08T01:45:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2d/bdc466a3db9145e946762d52cd55b1385509d9f9004fec1c97bdc8debbfb/black-25.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bc5b1c09fe3c931ddd20ee548511c64ebf964ada7e6f0763d443947fd1c603ce", size = 1239350, upload-time = "2025-12-08T01:46:09.458Z" }, - { url = "https://files.pythonhosted.org/packages/35/46/1d8f2542210c502e2ae1060b2e09e47af6a5e5963cb78e22ec1a11170b28/black-25.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:0a0953b134f9335c2434864a643c842c44fba562155c738a2a37a4d61f00cad5", size = 1917015, upload-time = "2025-12-08T01:53:27.987Z" }, - { url = "https://files.pythonhosted.org/packages/41/37/68accadf977672beb8e2c64e080f568c74159c1aaa6414b4cd2aef2d7906/black-25.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2355bbb6c3b76062870942d8cc450d4f8ac71f9c93c40122762c8784df49543f", size = 1741830, upload-time = "2025-12-08T01:54:36.861Z" }, - { url = "https://files.pythonhosted.org/packages/ac/76/03608a9d8f0faad47a3af3a3c8c53af3367f6c0dd2d23a84710456c7ac56/black-25.12.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9678bd991cc793e81d19aeeae57966ee02909877cb65838ccffef24c3ebac08f", size = 1791450, upload-time = "2025-12-08T01:44:52.581Z" }, - { url = "https://files.pythonhosted.org/packages/06/99/b2a4bd7dfaea7964974f947e1c76d6886d65fe5d24f687df2d85406b2609/black-25.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:97596189949a8aad13ad12fcbb4ae89330039b96ad6742e6f6b45e75ad5cfd83", size = 1452042, upload-time = "2025-12-08T01:46:13.188Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7c/d9825de75ae5dd7795d007681b752275ea85a1c5d83269b4b9c754c2aaab/black-25.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:778285d9ea197f34704e3791ea9404cd6d07595745907dd2ce3da7a13627b29b", size = 1267446, upload-time = "2025-12-08T01:46:14.497Z" }, - { url = "https://files.pythonhosted.org/packages/68/11/21331aed19145a952ad28fca2756a1433ee9308079bd03bd898e903a2e53/black-25.12.0-py3-none-any.whl", hash = "sha256:48ceb36c16dbc84062740049eef990bb2ce07598272e673c17d1a7720c71c828", size = 206191, upload-time = "2025-12-08T01:40:50.963Z" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449, upload-time = "2025-01-29T04:15:40.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/4f/87f596aca05c3ce5b94b8663dbfe242a12843caaa82dd3f85f1ffdc3f177/black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0", size = 1614372, upload-time = "2025-01-29T05:37:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/e7/d0/2c34c36190b741c59c901e56ab7f6e54dad8df05a6272a9747ecef7c6036/black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299", size = 1442865, upload-time = "2025-01-29T05:37:14.309Z" }, + { url = "https://files.pythonhosted.org/packages/21/d4/7518c72262468430ead45cf22bd86c883a6448b9eb43672765d69a8f1248/black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096", size = 1749699, upload-time = "2025-01-29T04:18:17.688Z" }, + { url = "https://files.pythonhosted.org/packages/58/db/4f5beb989b547f79096e035c4981ceb36ac2b552d0ac5f2620e941501c99/black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2", size = 1428028, upload-time = "2025-01-29T04:18:51.711Z" }, + { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988, upload-time = "2025-01-29T05:37:16.707Z" }, + { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985, upload-time = "2025-01-29T05:37:18.273Z" }, + { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816, upload-time = "2025-01-29T04:18:33.823Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860, upload-time = "2025-01-29T04:19:12.944Z" }, + { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673, upload-time = "2025-01-29T05:37:20.574Z" }, + { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190, upload-time = "2025-01-29T05:37:22.106Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926, upload-time = "2025-01-29T04:18:58.564Z" }, + { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613, upload-time = "2025-01-29T04:19:27.63Z" }, + { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" }, ] [[package]] name = "bleach" -version = "6.4.0" +version = "6.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/48/3c/e12ac860709702bd5ebeb9b56a4fe334f1001246ee1b8f2b7ee28912df7d/bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452", size = 204857, upload-time = "2026-06-05T13:01:13.734Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081", size = 165109, upload-time = "2026-06-05T13:01:12.504Z" }, + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, ] [package.optional-dependencies] @@ -244,256 +198,104 @@ css = [ [[package]] name = "certifi" -version = "2026.10.23" +version = "2025.7.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, + { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" }, ] [[package]] name = "cffi" -version = "2.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/70/d2/16d99a0c4948febc0ebd133a13b2f688ff7f8cb04da971e1128872ce0c03/cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12", size = 183838, upload-time = "2026-08-03T21:19:29.637Z" }, - { url = "https://files.pythonhosted.org/packages/cd/95/31b535a9f0220ae9f357de4a08d57ce89cb417653c2fd9f075f50822a388/cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1", size = 184168, upload-time = "2026-08-03T21:19:30.764Z" }, - { url = "https://files.pythonhosted.org/packages/ad/5a/4707a0dc1f203f5dde5a907b0d4e3c25d71120241048bd5bc6f1bb9d4e71/cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0", size = 211805, upload-time = "2026-08-03T21:19:31.867Z" }, - { url = "https://files.pythonhosted.org/packages/ad/66/c19feabb28485b6e0bbaaafa90837a1ef5d302e90f2178bd33f17a49879b/cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813", size = 218716, upload-time = "2026-08-03T21:19:32.896Z" }, - { url = "https://files.pythonhosted.org/packages/a7/92/500760486c8baab49a7a8a58ba7fc3355ec3974b454b8a09e528efde9e1d/cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990", size = 205569, upload-time = "2026-08-03T21:19:34.142Z" }, - { url = "https://files.pythonhosted.org/packages/a5/a7/a67c733254d6e7373f7822f8082d8d6beade791e0cf12a7611f376fa61c7/cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af", size = 204907, upload-time = "2026-08-03T21:19:35.174Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a4/4399daaf8f7dfee9d7c3327fdb0426ee041cc63edc358b93911ceb2bfc7a/cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632", size = 217807, upload-time = "2026-08-03T21:19:36.286Z" }, - { url = "https://files.pythonhosted.org/packages/28/f7/dabe6da2466ecbd82dc62e7342dc6b1065dad990c06f00f0ede9ebf2a0ed/cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd", size = 221252, upload-time = "2026-08-03T21:19:37.416Z" }, - { url = "https://files.pythonhosted.org/packages/ce/87/616202d8e51342c07d2534c510111c4cc37201775ce8f60802c9335d1edd/cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a", size = 214214, upload-time = "2026-08-03T21:19:38.507Z" }, - { url = "https://files.pythonhosted.org/packages/b4/c6/ab025d75d2c26c19b087c0124e75ee31cb65032f4fe345d356d8c507ab97/cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa", size = 219408, upload-time = "2026-08-03T21:19:39.809Z" }, - { url = "https://files.pythonhosted.org/packages/db/e2/7e8109f65445bdc673a7b54f02c677de462db75674220fd1335efc8eb598/cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3", size = 174470, upload-time = "2026-08-03T21:19:41.246Z" }, - { url = "https://files.pythonhosted.org/packages/73/c0/77ba02423c2f7d7091143c45cd49e0e6575c4c1967394bb542bd923a9b74/cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0", size = 185096, upload-time = "2026-08-03T21:19:42.615Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/9f1f85f9672ceda4984dc6c4f8824e8558992a2972c3d3c81fb8eb28d4ba/cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455", size = 179941, upload-time = "2026-08-03T21:19:43.747Z" }, - { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, - { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, - { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, - { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, - { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, - { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, - { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, - { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, - { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, - { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, - { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, - { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, - { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, - { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, - { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, - { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, - { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, - { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, - { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, - { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, - { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, - { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, - { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, - { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, - { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, - { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, - { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, - { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, - { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, - { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, - { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, - { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, - { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, - { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, - { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, - { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, - { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, - { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, - { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, - { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, - { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, - { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, - { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, - { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, - { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, - { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, - { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, - { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, - { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, - { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, - { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, - { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, - { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, - { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, - { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, - { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, - { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, - { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, - { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, - { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, - { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, - { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, - { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, - { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, - { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, - { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, - { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, - { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, ] [[package]] name = "charset-normalizer" -version = "3.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/33/1c/f41d4e74c28ab327ff3acd36053f7ea506c55872d7a90b0fa71aa3ab0c89/charset_normalizer-3.5.2.tar.gz", hash = "sha256:39de2a259fc954455c57274dc94c79d5842774e1247a016aff30bc0efed0f4ef", size = 172659, upload-time = "2026-09-30T04:39:23.398Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/67/6a0b94a7960d5e1b5eacd2fb529f3fccc47db4644f7f0a7cfdcfc3be578a/charset_normalizer-3.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d21b8b13c7592db2ac5e544a6d83187b995257472b0c9e8351b6d507ae37ed6", size = 370642, upload-time = "2026-09-30T04:35:06.91Z" }, - { url = "https://files.pythonhosted.org/packages/fb/94/01009e13b94041599004edf32e56e382c24e570f60f79bab8efe45cfe1eb/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d760fe2a4d7c3b226cb9026d6a842868d52a7901bd98420e1baf14e80da85cf5", size = 259280, upload-time = "2026-09-30T04:35:08.448Z" }, - { url = "https://files.pythonhosted.org/packages/66/85/3b5358f60a13210f0b67d3755c168ef758701b021e655d88d4da28554467/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9790464842f85f437dbbb54417eda1e0e6bfc52dd8d22d6fd1c994b73b2dc74", size = 245335, upload-time = "2026-09-30T04:35:10.104Z" }, - { url = "https://files.pythonhosted.org/packages/74/75/77c1c479b09ecd751d1e767b251ea5c14d4d50ff757bf404afab2692f600/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4685902cf26edf013ed7a3da0f426ebba7a00ebb9541386d835afbf002c11cab", size = 291707, upload-time = "2026-09-30T04:35:11.575Z" }, - { url = "https://files.pythonhosted.org/packages/0b/0d/363f78cacb70f58f15f4b083961bbd9d292f335d3f5c66fc4f1cfe69cb90/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4495c5002a7b28557e7e222e77e0b661183e432b7d6d2e788101e3f240e05b8c", size = 286747, upload-time = "2026-09-30T04:35:13.022Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ed/cf505d3011ffceb12c2067a7a5d3cfe92b875d4d44bb0ff0d69375e2c184/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:211d5a3eb6af8f513b8d4ca19a8c1b7accab1b5f0d3175f9826b03c1a920dc1f", size = 269972, upload-time = "2026-09-30T04:35:14.606Z" }, - { url = "https://files.pythonhosted.org/packages/15/d8/f0a93a431d170e7ca681d4f6650fee3de934d18560e474e7267eb4b0f987/charset_normalizer-3.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef4fcbf3327382cd4c9f540babd61248208af7b93eec4de397b4d5f58a09e288", size = 269339, upload-time = "2026-09-30T04:35:16.087Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/9b2bd1c5b7af02462c9752d33994834ff972a96b4c483eefde9e594488e2/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd16aabe4a02a297c23417aa17ac6299dbd8c49f673bcd645b4929b11f5a4400", size = 261683, upload-time = "2026-09-30T04:35:17.488Z" }, - { url = "https://files.pythonhosted.org/packages/76/a5/cac540ab0fd61f3fec88ad3dbb64509e71424593d73cfdfff5ab3e4db279/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fb9e68df06293761f9fe66ade60a9bc6d0f5e42b8acf2939a9158af86ab0e5bd", size = 248143, upload-time = "2026-09-30T04:35:18.849Z" }, - { url = "https://files.pythonhosted.org/packages/71/7a/ff467301deef2089fad87f72df9e000a26a78fec7acbb18e1999371b8369/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:59f63901b0031c3136cf64704dcb21de0bbae62ce2c9529bc39d27665463de37", size = 292358, upload-time = "2026-09-30T04:35:20.326Z" }, - { url = "https://files.pythonhosted.org/packages/ad/77/22d7e785d1e210afc2e2f58600dd1799d17a35665faf84383f002826c5f8/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:304d5463e65a35d7bb0850550e0780395395f6fcf452f04db7d5ca7cecc425ac", size = 268766, upload-time = "2026-09-30T04:35:21.72Z" }, - { url = "https://files.pythonhosted.org/packages/ae/91/e8e946267f1c2d9e2bd651726e2fbd2addf02c4d36cea5069e32ca9d7bb5/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9cf9b1a857e25c4baceeb3624e92a56df3668f398c4acba74e174d81fb4d1d3a", size = 287432, upload-time = "2026-09-30T04:35:23.273Z" }, - { url = "https://files.pythonhosted.org/packages/4e/88/7561d8a88d555e7df6623abe7c0070b4baf47549b9408783a2ae0a1a6cf7/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:114e4d0c92d618409ed82a99e22b5c5e768fe995f2973f78265f4524f49d4640", size = 272470, upload-time = "2026-09-30T04:35:24.655Z" }, - { url = "https://files.pythonhosted.org/packages/35/7e/578c702301ec036f01455f30744a08d2b42f6ab35b9b2d4bf8cae0ef2a80/charset_normalizer-3.5.2-cp311-cp311-win32.whl", hash = "sha256:2625388c6c754520c37abaf3b41eb34d1cc4a373f457898f08606c8e362b891d", size = 186688, upload-time = "2026-09-30T04:35:26.225Z" }, - { url = "https://files.pythonhosted.org/packages/e8/fc/fdf8cf52ff21cd5bf158f20978991cf985325842f74283eb6df26c8a39d8/charset_normalizer-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:87e50a3e7cb90af586b6c5faf23e302a970415ac73bd7bd90a515a04b427ef96", size = 214932, upload-time = "2026-09-30T04:35:27.796Z" }, - { url = "https://files.pythonhosted.org/packages/97/66/3e45a506d8110b632541faf9a9470185aa9878f1ed44020f31346c1c5e5b/charset_normalizer-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:254eb48b9fa5ee9898a3c445825a1f340fe53712a098904b39b0bddba8ea3cb1", size = 202828, upload-time = "2026-09-30T04:35:29.259Z" }, - { url = "https://files.pythonhosted.org/packages/e7/c8/693809898870237d82785a03f3b2b58fe4c9f14669f84a7d4e623c92a59e/charset_normalizer-3.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed2a239c0ea213acc1908150a3037257083c7c083128f1a4cec2ec4b97dca491", size = 367780, upload-time = "2026-09-30T04:35:30.888Z" }, - { url = "https://files.pythonhosted.org/packages/c9/87/2fea8c13dc24b3ca9c6f803a5b2dfdeae73eb4f9e12c7885ed908ff0433c/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b91363207bd9dc966a691e959bb47f64b30f7ac4b072be9968b366982f7db77c", size = 246730, upload-time = "2026-09-30T04:35:32.286Z" }, - { url = "https://files.pythonhosted.org/packages/a8/9e/09efac30b937722f46d3110ba30b875b24b2e3a266ed746cc4e376a94d80/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:38a873987f3be698494da8b2e3085e29da02da7b633dce73e79c699a113d7bf0", size = 237707, upload-time = "2026-09-30T04:35:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/9e/18/70d76670b13686237863a379928d60bd10e021f17d243ab3d7014c4a5f4e/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:355ad8011081dec5412240c087a9a0c9d4d5039f3ed11a3f13e18c2b29b56c51", size = 273050, upload-time = "2026-09-30T04:35:35.138Z" }, - { url = "https://files.pythonhosted.org/packages/54/e2/77a8b09d5adc013ed07b95b01b8b8fa5441c4e810e83ee7e4aae2fa4d91a/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ee21e28f0430bd6dc9086c6e525d5e818a44a5ad19720c8a0ef766792f3eb5e5", size = 270345, upload-time = "2026-09-30T04:35:36.502Z" }, - { url = "https://files.pythonhosted.org/packages/7f/c5/38806a25ab5e65fc178f39affeda20858efafede2fce1ffc2556cfc9fe73/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3d31298449090ab8d47b7b1b2a555ff73cac7ed438a08b7ac160980c7ebed649", size = 257601, upload-time = "2026-09-30T04:35:37.919Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8d/213565184708fdb263ae55e2c04ee1ff748129dd65d48ed0e3502da9c85a/charset_normalizer-3.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5cde776b7cc66e4f6c99612cea4aa7269aa65863f7a15841b2c264f103822f4e", size = 252222, upload-time = "2026-09-30T04:35:39.544Z" }, - { url = "https://files.pythonhosted.org/packages/7e/24/76d2cefc25472531e4c5c7dfff68865eb1c39b78482f0fdc15b46f047830/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae4f5fea5b8b8ccff88238cc8569303e5ee95efae67fa62922a311397a71f346", size = 248482, upload-time = "2026-09-30T04:35:41.088Z" }, - { url = "https://files.pythonhosted.org/packages/7d/dc/65a801b66ab4c197e22c433ab25e7ac24324ac6f45a2269aca42cce309bf/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f7d486c83842422badd511868fd8a9a20e9407ace71564b6af47ce7e60a336c1", size = 241206, upload-time = "2026-09-30T04:35:42.59Z" }, - { url = "https://files.pythonhosted.org/packages/a7/95/ca9b5eabde673002c6f1e7ada1b223916fe18f6d661da7aabd4d643718f1/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:11a4d68a6ecda3292cb1e50239e111543ba5d709bb62a6b4ea1afcfa729d8875", size = 273190, upload-time = "2026-09-30T04:35:44.347Z" }, - { url = "https://files.pythonhosted.org/packages/2d/8b/803b4d2a3f6e1740f63f1e87b04d14b42f3d4fdfe6ed7d4db2d34102b14f/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d6734d2ef8a50fbf8445c139477da401f50d62a0606bf00e20ec6d87773fefb1", size = 253527, upload-time = "2026-09-30T04:35:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/a9/55/93c0e5dbd085ae0471346026abbe7e0db9ea2d6fea74e51f0b5a46f233a7/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a815775b6c38d4e0ff7bcffbeba67feded90202bb6a226b8dd35f1c855217413", size = 271285, upload-time = "2026-09-30T04:35:47.49Z" }, - { url = "https://files.pythonhosted.org/packages/95/69/0dbd0e0b9b16cfa816cdfcb3e2e3854a1f680dc07fb1245ea125e7448060/charset_normalizer-3.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:23851fb4e1b85ed3f6c2a27b777cdfe2e19fb5b38429a8faf38c7542b7665869", size = 260010, upload-time = "2026-09-30T04:35:48.996Z" }, - { url = "https://files.pythonhosted.org/packages/58/9d/e7b88e7b1bf403590c3b573277b5e1e488c68c7a6fbacca310a2c324e90c/charset_normalizer-3.5.2-cp312-cp312-win32.whl", hash = "sha256:db19d07e2e0129e974a0e65d0064fc222a446cd5122c2fd4184d2af9fc734a9e", size = 184125, upload-time = "2026-09-30T04:35:50.777Z" }, - { url = "https://files.pythonhosted.org/packages/eb/e6/e6e083884cbcfd49c64865af05027fe7011be7b2d9179524f099a1b611f3/charset_normalizer-3.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:780fbe7cab297b81dad9fb8dc5eb003c0468ffb0d9e5f65068c53a34661a96bc", size = 207486, upload-time = "2026-09-30T04:35:52.194Z" }, - { url = "https://files.pythonhosted.org/packages/c4/e3/017aea0911ada7405a825c7d937eb3a13009664e2f5b38e8c4bbf2abf894/charset_normalizer-3.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:e2af3aad578aa6bd1384bcf4750fc285e5a9de53f40b7d41e5a0bf748edeb2b3", size = 196734, upload-time = "2026-09-30T04:35:53.636Z" }, - { url = "https://files.pythonhosted.org/packages/c5/34/68292d68512768591aaff07c59bb53ee31341c87759433a859c4641a50c2/charset_normalizer-3.5.2-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:ed905975ab14056a2e5eb1c376cb2e1ebc5396baf84163939c518556fccde9f5", size = 225946, upload-time = "2026-09-30T04:35:55.313Z" }, - { url = "https://files.pythonhosted.org/packages/e3/80/bee0b01b90ccd5322ae1d0abb33fab1bd95b7c2eadaf02aeccf22e04ee83/charset_normalizer-3.5.2-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a66c3bc5ab1f0ff2164fc9965ddd611ff0802173f4b9d24554c563f6ab7e1d6e", size = 238619, upload-time = "2026-09-30T04:35:56.863Z" }, - { url = "https://files.pythonhosted.org/packages/78/6e/60ce52a85a7fd631ae8482ae6d74521014ca2f255892679484dc04d7ef56/charset_normalizer-3.5.2-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2374b62878abb00cd8309b32af6c0b715cd02dec0ca74ef12e5069bdc64144a", size = 206701, upload-time = "2026-09-30T04:35:58.639Z" }, - { url = "https://files.pythonhosted.org/packages/36/8c/71aafad23f971afc84c2b295bc0c560739ce1dac558aad9fec22e39f3639/charset_normalizer-3.5.2-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d376bbd28b3a8999db1a103b3b388aee6f1ddeb3e51bc2172993efdcd86e064d", size = 210506, upload-time = "2026-09-30T04:36:00.147Z" }, - { url = "https://files.pythonhosted.org/packages/91/da/3c5a7798c046df7d2d68ad653cf5b6c5a8bfee225055a843c6f2f42aac1a/charset_normalizer-3.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6045373d5a89a5ec71afde535db987ca28e76dfa276c2d4c818265b375d4b055", size = 366626, upload-time = "2026-09-30T04:36:01.77Z" }, - { url = "https://files.pythonhosted.org/packages/e1/16/710ac3de2ee354e2bd1a9c94efe45a2d27b5c6ad39b2d6a905be2c094b6c/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:849df64e889b2e17230d58410a03dba311a65b163508fd33679b2b737d4b7858", size = 244624, upload-time = "2026-09-30T04:36:03.389Z" }, - { url = "https://files.pythonhosted.org/packages/d6/39/45c7439f5b63d24f7d5b2a1d760f34af7628782d7144b4cc8ded45c2d4bc/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:15c44f7edfd477b06f517a5cc317fc1707edb9de2c865f43d4b6513907473234", size = 235731, upload-time = "2026-09-30T04:36:04.987Z" }, - { url = "https://files.pythonhosted.org/packages/4d/34/38f3154785ce92e9f56eb226f4d35bdfae6b008480dd055f58837a89c810/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a89012d6d5476ee112d20d998570ed58df2260a852afb1758809cd6900411d21", size = 270352, upload-time = "2026-09-30T04:36:06.412Z" }, - { url = "https://files.pythonhosted.org/packages/04/f3/859f74e7babc977705026b30593b3be04049632a522fb7000f83c033d747/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0c951d5e6dd9c2ff60609476752bee49da4206adde960ebc247766937f72e718", size = 267393, upload-time = "2026-09-30T04:36:07.865Z" }, - { url = "https://files.pythonhosted.org/packages/4b/85/41d27f234b82e47c167a5f6c0f62501dc0c640585ff4aba79e08a390336a/charset_normalizer-3.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7218e8f32b0956cfcd048fd42d9d5779809745ca1d86113ca56f66e7ae1549c4", size = 254660, upload-time = "2026-09-30T04:36:09.248Z" }, - { url = "https://files.pythonhosted.org/packages/58/ca/5d1a997587febe5b26d8daffe363b5c1a091cece19828eec6502fd09c5ef/charset_normalizer-3.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19a731138fc27d5682277d3b9df22855cea1239bce7fcec5f78f42ef2d1f3c3", size = 249996, upload-time = "2026-09-30T04:36:10.73Z" }, - { url = "https://files.pythonhosted.org/packages/b3/1f/d1e78246f7ed60c8c8d606b4ac27f66ce49cc3e95f24893ccbeba9f77302/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62603db9a7caa0802eaa28c1c46fecd7b3a263a774069c24c3c28c302448721c", size = 247028, upload-time = "2026-09-30T04:36:12.294Z" }, - { url = "https://files.pythonhosted.org/packages/8e/37/eba316edd4f0c4d3a5d945924c4eeeae59abac4056aa815d8a4268f863a2/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b6856554c4f44d79fc2307d5768854310a8f0096e501c75637542c82292b0429", size = 240562, upload-time = "2026-09-30T04:36:13.887Z" }, - { url = "https://files.pythonhosted.org/packages/c8/8e/aaa037d40ca9ef045977f1a661048b1aa33f223adfce3452fe9be9f79d14/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1bc0baf5ef96b6ede57d47f4b8fe4d9d84019c3bfcbeb20a41edc6a6ee341f1f", size = 271699, upload-time = "2026-09-30T04:36:15.41Z" }, - { url = "https://files.pythonhosted.org/packages/26/19/1c1c9f75974adf523b87f34b8a2adc5a435cd65916812bcbd0dfa45f9a29/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:56bc200a365efb37383b7852e4cc5898d3b2da5987289b543956cf8cad71018a", size = 252030, upload-time = "2026-09-30T04:36:16.839Z" }, - { url = "https://files.pythonhosted.org/packages/bc/90/0660ef18e18df0a4d2a1a0edff7dfbba42d4e50ef2425557a5bb7051f77b/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2c9ad19a6cfcd5ea5c0d41161d22f9df1dcc277e9bef2751391334546a314c00", size = 268565, upload-time = "2026-09-30T04:36:18.468Z" }, - { url = "https://files.pythonhosted.org/packages/79/ba/57adc269824e8658f1a0f97a9e514c247445a9632b3419b97e0ba37f16dc/charset_normalizer-3.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e243bd13217235fc7290c621941c3f5cc8b66e4872495be821d7436ba2fb838d", size = 257627, upload-time = "2026-09-30T04:36:19.938Z" }, - { url = "https://files.pythonhosted.org/packages/9a/85/33abd4315c052d3d4f54c92b1ee49bfbc0dc7115a981e462a793b6d2ab87/charset_normalizer-3.5.2-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:a090bb2c68df85450502e3e20d665e3a5af9c65a84d6508ed477badd49166fd3", size = 143407, upload-time = "2026-09-30T04:36:21.376Z" }, - { url = "https://files.pythonhosted.org/packages/4f/de/6435e18d1aaa5d910b896d551411c96af1f42a0c56c29afc2016c61ccc2e/charset_normalizer-3.5.2-cp313-cp313-win32.whl", hash = "sha256:2b7b3bbfb4fe8ef40600792d762fbaa9057559f9d3fad209525b7a22b99e91fd", size = 183207, upload-time = "2026-09-30T04:36:22.776Z" }, - { url = "https://files.pythonhosted.org/packages/9c/76/b8ec57f4e9ee3253541abf95e4a462c0175fe8032dcd070f1f2421240942/charset_normalizer-3.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:78456a747de8dc58360ffa581f30a002baf5aa28cb262536545e91f113ed7639", size = 206489, upload-time = "2026-09-30T04:36:24.306Z" }, - { url = "https://files.pythonhosted.org/packages/3e/60/c647c6ae47480221e875ea5d743ff94946f7416e3c69415ab772928e8d32/charset_normalizer-3.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:11912e4bb14baae7c5d8791aa55ba0a3a03ec6729073307b0f57270abaa713d3", size = 195501, upload-time = "2026-09-30T04:36:25.846Z" }, - { url = "https://files.pythonhosted.org/packages/58/ca/7aa91362a2f77ac8e9e28a9b902a74f7d0e11a851ef0d27a74308da8cd90/charset_normalizer-3.5.2-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:1afb975bd5d68d5ce9f6b6d44fdf2f7e34b895a35e95708a7a91b20a3b51d187", size = 226010, upload-time = "2026-09-30T04:36:27.669Z" }, - { url = "https://files.pythonhosted.org/packages/a8/cf/ac8878d0322cf88a1aad4c7b147db32ca0bd806eb0060957b2e31486dbe6/charset_normalizer-3.5.2-cp314-cp314-android_24_x86_64.whl", hash = "sha256:bbbfc8e28816f19d7c0f1816664980c0a9875d01b27cdf8eedddb639d9e108ad", size = 239266, upload-time = "2026-09-30T04:36:29.434Z" }, - { url = "https://files.pythonhosted.org/packages/c9/6d/9a08d7e0b29b7208e2c6c01dc56c8e0520e7c7beadbbfb024b58fd69c8a5/charset_normalizer-3.5.2-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7967d08cf06dee78443b874f98c98036f624f3a4e73e11f9f64f5be4d25393cf", size = 206783, upload-time = "2026-09-30T04:36:30.872Z" }, - { url = "https://files.pythonhosted.org/packages/82/44/b0aa350280e6ff5a5492d17cf10460dd39d5ee848f872f7ba2df10607f60/charset_normalizer-3.5.2-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c2b5031f63e331e3839b40aed2dd6f191e9c07edbde303e7876846ea1946995", size = 210449, upload-time = "2026-09-30T04:36:32.625Z" }, - { url = "https://files.pythonhosted.org/packages/7c/8a/40db9aa9f5907bb0e6f8b6d64064bf8852fb33d4b813ff9414911df7647c/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fcff63213e8e6e47770541a4607175404f47cbb3ebea7b6058cc82d524a0e424", size = 367815, upload-time = "2026-09-30T04:36:34.197Z" }, - { url = "https://files.pythonhosted.org/packages/7f/72/9c5e7707b57c8ddfa9ddf7b0b1d009d7fbab9e9e887d5b721060f37e307d/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d86d6fc60743dc916eb79e2eb1ec4818e21e427731543af40a3021851174a13", size = 247095, upload-time = "2026-09-30T04:36:35.803Z" }, - { url = "https://files.pythonhosted.org/packages/83/09/71e453691e927de4ddf792770cfaab3f49d494e222f66ea5e404bbd5e39c/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a881931aa470808df94a8c380eed2bbbc76cd9dc622310f99665658c821eb6d", size = 233942, upload-time = "2026-09-30T04:36:37.407Z" }, - { url = "https://files.pythonhosted.org/packages/9f/86/85c84e4da8b27dd409577d9437926ff581c5f9d3c66038dc68c1a526de51/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8024d00c3faf3fc0c16e07a69f4405e8eac7cc0ab15f65fe6cf43827c4cf72b4", size = 273762, upload-time = "2026-09-30T04:36:38.904Z" }, - { url = "https://files.pythonhosted.org/packages/92/08/564955a4b5f2ccb410ab480bbe8c6a18063ff27f2d35458731c4a5335df9/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4d48f2d08b9de5864e2c8744d4461b862fb149a18274abc8b698c45975573438", size = 269514, upload-time = "2026-09-30T04:36:40.469Z" }, - { url = "https://files.pythonhosted.org/packages/18/24/bad3ac4271589df29cf5ce2f5ae490518a5739358052bd0d61209e6fea54/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34276fd796040bf0993ab33a369aa572e6979c7aab225a88893667ad8eac8f7a", size = 255056, upload-time = "2026-09-30T04:36:42.02Z" }, - { url = "https://files.pythonhosted.org/packages/d6/3e/350d89ad49916b86554d6f5f2d03ec1152148f87e5ff735106c6a03b1a36/charset_normalizer-3.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0521c5665880b33d603717defa76c094048900010897909952397feb3039da56", size = 251311, upload-time = "2026-09-30T04:36:43.577Z" }, - { url = "https://files.pythonhosted.org/packages/56/5b/4970a2d154df502e133402906dd04e3ae7cada7b3011283c88d0479a2585/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:eff0ac9dbe711a4aee69bf04a83896aa9b85f19641264053a9f6d48573abb7dd", size = 250190, upload-time = "2026-09-30T04:36:45.185Z" }, - { url = "https://files.pythonhosted.org/packages/88/8c/f1a91bddc8fb47c2889e29ea7ea49a194eb0d9868675d786806519c00d76/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:1503bccbeb36d5527790c3930327704c39af22de3112f1b1666a9f3ce15ee204", size = 237098, upload-time = "2026-09-30T04:36:46.689Z" }, - { url = "https://files.pythonhosted.org/packages/24/0e/bb5dace3cc7e79068425386a6589c19b5a2ab5fefc2a46abea6919683332/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:52aa6992700996af31f375de0c6bacd402b0097fe40b53c426b9f51a90ebabc7", size = 274228, upload-time = "2026-09-30T04:36:48.31Z" }, - { url = "https://files.pythonhosted.org/packages/9d/79/b849ad523017ea9f5a45581bbebed91439e0cf42fd2860a6f64e358eb5a6/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e09a3942ecbdee5cce73ea9d42da82b81b72ac1bf031ce069b93b5adf4eac8cd", size = 252401, upload-time = "2026-09-30T04:36:50.091Z" }, - { url = "https://files.pythonhosted.org/packages/89/8c/75469d690cf47200bce8f6cad7655724fc23148e147abfc5ce78b5f65863/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c7c9ab723cde841fefb34efbad91e87f00a674b1fe1cd0784fde742bf2c154dc", size = 271846, upload-time = "2026-09-30T04:36:51.719Z" }, - { url = "https://files.pythonhosted.org/packages/26/cd/6d52d3c7437cdcf2e310ce9f28f282e733d4ef60ed19105d1819c356255f/charset_normalizer-3.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ddc7dacc8ece3a182e7f15cb862d1fd616b46d076cb1ae9dd232b2c38b655874", size = 258151, upload-time = "2026-09-30T04:36:53.234Z" }, - { url = "https://files.pythonhosted.org/packages/f7/4c/070b38bdb5f49a70199fce923ec0726a49536a63ab262abbfcaaf351110b/charset_normalizer-3.5.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:ee43c17b173d46a3212baa6ead3ae258eeabdae48c263a01ccf0218c366dd655", size = 143570, upload-time = "2026-09-30T04:36:54.816Z" }, - { url = "https://files.pythonhosted.org/packages/81/84/9ebfc8ed6c8c4fcd8e726ff6bf220cc8deb3966e31dce9be8dd8aa017e64/charset_normalizer-3.5.2-cp314-cp314-win32.whl", hash = "sha256:4f87960d57feabfb618e4e0af6e7371645fa26a277860739d6e5d6e0012c92f0", size = 186412, upload-time = "2026-09-30T04:36:56.643Z" }, - { url = "https://files.pythonhosted.org/packages/d1/78/5ed86f743d4bc350db307e7636419a0a5ee1d91806d30c7f667bd5c80dae/charset_normalizer-3.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:e4e81e09c1578b8df602e3db08b0b3ea0a6947ad612f52bf8dc5ea8d47691f0c", size = 210965, upload-time = "2026-09-30T04:36:58.205Z" }, - { url = "https://files.pythonhosted.org/packages/53/94/a3a7698e9b1a395e1eb99ccd9a324be9347973bff4e72db2a06496d7cd27/charset_normalizer-3.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:80d02b6f04e92601a081dd97b23d3128033098bff5d35d392ddcc0476ea11253", size = 200406, upload-time = "2026-09-30T04:36:59.764Z" }, - { url = "https://files.pythonhosted.org/packages/c1/48/c5dd00d5ef7791f02666de250a5bb6071e29b7e133cf4b835800b6d3bc27/charset_normalizer-3.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:dca9ab98072a5a54ebacebdc45f53e645336b320c667410b061be1ca588ae709", size = 396871, upload-time = "2026-09-30T04:37:01.543Z" }, - { url = "https://files.pythonhosted.org/packages/12/c8/8379554b42e8368161d898476686947a0fdbd3e8865170d7909dcabfdee8/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0aa869112ef88429ae17820d99c3dd9504c9e9c671d3c246f3d7442cb051084", size = 249711, upload-time = "2026-09-30T04:37:03.111Z" }, - { url = "https://files.pythonhosted.org/packages/4a/eb/2ddb1035d17320caa9f41682935123a9a250277b261c3efc86b2d2a21343/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c0afc6800ba57ccc350374c5bd6150419915d95ce93cdbab2d783d75eaf30ecb", size = 231146, upload-time = "2026-09-30T04:37:04.721Z" }, - { url = "https://files.pythonhosted.org/packages/4a/24/2ecb4bde104322cd7859d6594fcfa74649f8d90b3221c9feecbef149875b/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7dcd882da75ef9adf94903b1e3b9419e8aa8fb4c7396822b834b9ef7fb96954f", size = 271552, upload-time = "2026-09-30T04:37:06.295Z" }, - { url = "https://files.pythonhosted.org/packages/3f/98/9d5f6ebc3aee9fef5d30b4aff11fb2ab7a1222b4064f8ef2c7c87cde217a/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2e06a3a98f916dd41d27f3105e02e7a40181c98c94b9158733d03a6f80506c09", size = 269810, upload-time = "2026-09-30T04:37:07.905Z" }, - { url = "https://files.pythonhosted.org/packages/09/e1/a3b06a10461b1b7628853c934c644e03bc28e42767116afb52f19a56519b/charset_normalizer-3.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6bd128f206a7752ae1f2ab6c61bf8a24ba28913a10df8b14c2637b973ff97a80", size = 259845, upload-time = "2026-09-30T04:37:09.554Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d3/6f561f74a296cf27d61775a1dc665ad13f3bff6a798810ca05907f37a7c4/charset_normalizer-3.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c8f3d67aeaf55f017982b73683f0e7342ba2f6635a78f69ce89ebb26aa411e5c", size = 252825, upload-time = "2026-09-30T04:37:11.274Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/69e13ca3b18f43e0eafcd34c04a45b732ae22a43b54a5fc9e119103356eb/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fe9753dfee015c570d73df76f899f18444d41388bffcde097deba51c4fadbb9f", size = 252659, upload-time = "2026-09-30T04:37:12.941Z" }, - { url = "https://files.pythonhosted.org/packages/73/a9/ace29806a0dae18939919c76ba526472d83214afa101105fabff2cf30625/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:92888bb3187c5ba50500b00b3b310c9f2c651709d28036077680cb5255450a03", size = 238819, upload-time = "2026-09-30T04:37:14.659Z" }, - { url = "https://files.pythonhosted.org/packages/f8/c1/6116d52a2e3311ec80f21f5fb5e17b27405f10b9608af8f6e69516841a1b/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d008d90a7f2471519aef0c90dfbe73b3e6e4d5e66ac48e19154c17e89e98b604", size = 272973, upload-time = "2026-09-30T04:37:16.346Z" }, - { url = "https://files.pythonhosted.org/packages/19/aa/9955c7e93bba10a9c7e8f7a5031b7ced66f3a1883a55c00712b8d5850ff3/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31f3930700408d211f13378ccbe1c40845d8da54bd0681fac3a9b5aae81c7aa8", size = 253692, upload-time = "2026-09-30T04:37:18.212Z" }, - { url = "https://files.pythonhosted.org/packages/bb/33/2a6ae7fdc1b10cb581cef91addd8cdfc5f40d50abb5702309369d5834579/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:2a925889534b3748302dae5dead07cc13480de1dac3aea80a941b729b471ef93", size = 268757, upload-time = "2026-09-30T04:37:19.877Z" }, - { url = "https://files.pythonhosted.org/packages/a2/22/80992720a0282cd39bba1db35868e6b9c22f41281160143a836544bc1d8a/charset_normalizer-3.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f5ec61164adcec446f8969a3358ec3f9b26bbda3b9213e5586d219afa8df2915", size = 262220, upload-time = "2026-09-30T04:37:21.583Z" }, - { url = "https://files.pythonhosted.org/packages/92/9f/181fd07e1bffea1d95cd80c84ac537354f50699c22cfc4d3c02b6fc16208/charset_normalizer-3.5.2-cp314-cp314t-win32.whl", hash = "sha256:598a11a2c7ebaa5334bf698bf29568c9c390abac6a154d8170fedecd1cea38c5", size = 197797, upload-time = "2026-09-30T04:37:23.235Z" }, - { url = "https://files.pythonhosted.org/packages/49/1c/25d8415ec1c4f2f41f1680435e4c87cfb378ff2f677d950946f2a45d0632/charset_normalizer-3.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:7fdde2c9fd9e3eca40631e024664cf2584272cc8f96308cbe5fdfc930f51d8bc", size = 222765, upload-time = "2026-09-30T04:37:24.891Z" }, - { url = "https://files.pythonhosted.org/packages/3e/b4/46b48f013dadfc0d0d33b375438e31bdf5a989dc68389c6bf627054d4df9/charset_normalizer-3.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d1befeed746d247c81127bb14de9dc3d30edb6e5976d34f83f86ed262b1d9105", size = 210985, upload-time = "2026-09-30T04:37:26.634Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e9/34e597dee616d0b8ee4b34d29399e85c2204ade174157a48505d42baa4ff/charset_normalizer-3.5.2-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:87475fabc8d9996fd9c27debb395e642e8c838d78a00b6e932227a0e06b81e26", size = 367676, upload-time = "2026-09-30T04:37:28.329Z" }, - { url = "https://files.pythonhosted.org/packages/60/9f/a5d1c91c0263745e2cd344c5a4415d787c575501ab1d449f1148ac6b495d/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9409a8bf35cf78353942504b24a57de3d75b708997a1e4bd8db71ac8633ce364", size = 248414, upload-time = "2026-09-30T04:37:30.167Z" }, - { url = "https://files.pythonhosted.org/packages/26/79/e697f77464748a3ee3cf490c83d592459400d4898380d66c38366b03080c/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:498dc3188ca05a68231ac3fdbfc7f57eb67e1343c30e0fea17f8218c1599b253", size = 244775, upload-time = "2026-09-30T04:37:31.964Z" }, - { url = "https://files.pythonhosted.org/packages/ca/87/3d42a42e18ea066e2513936fd678a00696e77878b5ae04528976abdbcb83/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e242bb1c5e76e97dfa9e7f209a71e93a01d7f19ffdd5cfbb2e2d55b4f08f8ab0", size = 273877, upload-time = "2026-09-30T04:37:33.661Z" }, - { url = "https://files.pythonhosted.org/packages/c3/76/8a28136f3938ba9836f84280ce0c4d61ed1cf15a036b2034900c62634162/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def79fa35ef0cef8d2accec024f4fdc7ead3012ff02f5215c783f39f03ef8cfc", size = 269455, upload-time = "2026-09-30T04:37:35.573Z" }, - { url = "https://files.pythonhosted.org/packages/a0/a1/4fbf5d0f0f1b2a080474c1cf9a2f12c4c6531bb0e8ba591055e846d2b4e9/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df041de8887954562c9b261cba85ca0e9ded74048daf125f45edcfaa4832229", size = 257336, upload-time = "2026-09-30T04:37:37.397Z" }, - { url = "https://files.pythonhosted.org/packages/ba/a2/8b50aa320adb880ad579518e6f718f24944804b42a88b83d267d5d444125/charset_normalizer-3.5.2-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04851f73ae72b8413dddadb16a49dfee95263553741fd42d546f7d66907e6be5", size = 257584, upload-time = "2026-09-30T04:37:39.522Z" }, - { url = "https://files.pythonhosted.org/packages/a5/57/50e3fed84e175f40349bd0da7a4fce94c87f0378f52d74f511d89e0bdc20/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:183b88127acdb4fabe59d951ab424faf1af7b63cdbb5f776186c1ea2ffcaed98", size = 251854, upload-time = "2026-09-30T04:37:41.23Z" }, - { url = "https://files.pythonhosted.org/packages/d6/54/f7fbb3493c9f49091213b9c2d6dd65800696f1ce1a3f196a4205f50417b1/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:16fa0eccf81304b79c5cd87f9271c3b85dd9dd99245e4422ae9c0dd45e0f99d3", size = 248767, upload-time = "2026-09-30T04:37:42.883Z" }, - { url = "https://files.pythonhosted.org/packages/d9/37/b3a6385acc5a1e45b39ae9c90bfb9cf838a09b9dd37ef2740ab4c6b4a2eb/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:7441d755b7ab94f8d4eb3e43ec05482d760842fd263d003a99102d742cd835e2", size = 274479, upload-time = "2026-09-30T04:37:44.658Z" }, - { url = "https://files.pythonhosted.org/packages/89/44/809913e2cfd279e635a9294fdbbfb1b1dc62a8189d473d561f649fce98d8/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:ca403d7e4798f525fdfc78e258820419cbbd0f0ecbab9de7840e3c017cf6b8cf", size = 258310, upload-time = "2026-09-30T04:37:46.529Z" }, - { url = "https://files.pythonhosted.org/packages/af/a2/f28400ab13359d91bd39179df8e149376b9bf36588e739a3a4f9de2b84b2/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:df29a0a7107f7011e77f4eebdddec4c7331e24d787a0b21a46d63bdf7445da95", size = 271100, upload-time = "2026-09-30T04:37:48.399Z" }, - { url = "https://files.pythonhosted.org/packages/e9/89/9bab37955edf0adb3b66f8a3a6617d9f2f487e0d56f295a6a286cb640aa6/charset_normalizer-3.5.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f3c96f633825733f735c5a9cf21d21a257d8e1edf0b1cee0a064b9c424ca0f7d", size = 259936, upload-time = "2026-09-30T04:37:50.023Z" }, - { url = "https://files.pythonhosted.org/packages/23/b5/4459e08d45a679f903d50fea08bc52cfa728cca4d7bd02c757b5e5abda2e/charset_normalizer-3.5.2-cp315-cp315-win32.whl", hash = "sha256:281cb91036248400f4cc957495cccd44c275c2e0c5854f7e45ac5cf7dc193847", size = 186301, upload-time = "2026-09-30T04:37:51.722Z" }, - { url = "https://files.pythonhosted.org/packages/98/e8/55d5fd3935b4bce6da4fe0df61898e8c82653e317e677bd58aceb9c60f13/charset_normalizer-3.5.2-cp315-cp315-win_amd64.whl", hash = "sha256:89b53f3cda69831909888e0494f4fa0bcd3537e3e138dabeb620bd6ad946bae8", size = 210858, upload-time = "2026-09-30T04:37:53.427Z" }, - { url = "https://files.pythonhosted.org/packages/a9/5b/974423c2fd8e524c7a7f64318c1e02240ef954912fa2b4d70344107b9c68/charset_normalizer-3.5.2-cp315-cp315-win_arm64.whl", hash = "sha256:6be488a102b8cf28d0391d8c4ba7748938ae28b78ad901f8585520fca33ead1a", size = 200309, upload-time = "2026-09-30T04:37:55.015Z" }, - { url = "https://files.pythonhosted.org/packages/ee/f9/00ee0195db1013d8f7c416fd770fbeb560bb46eb2e36b054d05cb56f6cfa/charset_normalizer-3.5.2-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:915563965d418f986e7e145accc592eae9e1a1be3566ff98a05d7a9ec42a76e1", size = 395343, upload-time = "2026-09-30T04:37:56.743Z" }, - { url = "https://files.pythonhosted.org/packages/04/3a/c00b50e94c964cf934c7899cd47c97952fc11dad71cc5884b3c61795b09b/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:65cd72beeeca9d3aaea1201e5923859f308f952f9c71de93f06063c79f0f7a3b", size = 250114, upload-time = "2026-09-30T04:37:58.607Z" }, - { url = "https://files.pythonhosted.org/packages/50/27/d102dc880bbcffd0479ab64dfc1fb96777a854355a55e2bda72a71efadcb/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b7fd005a73d9e657273b7a10dc71a9e03c8fb9ee6999798d6918ce095b81ac7f", size = 239997, upload-time = "2026-09-30T04:38:00.511Z" }, - { url = "https://files.pythonhosted.org/packages/a5/4a/bf7ef45794dd293fab5f98a9309817977fbb845b9998f171b8cc5d8437a3/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e54da4baf05720032d527874d40b65fa4d7e5c6c6a43d0c3adbeffcaf275a2b3", size = 272313, upload-time = "2026-09-30T04:38:02.509Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ee/008a2837737991474c5754bb3191010007663860979701990982a502cbaf/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:124fbf1a8ff966d87ae05bb8bd45a71f966055ed8bba320d0c7cf450bc5f4d0e", size = 269986, upload-time = "2026-09-30T04:38:04.435Z" }, - { url = "https://files.pythonhosted.org/packages/93/ad/bd74a283940dc910c5b14f8e4f80a248082bc9c0fcbe1f54530cb6d9cc5e/charset_normalizer-3.5.2-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28b4f0d66fb834ff90f28209ac7bce77868c45d8c93e26f906709d9b7c2e1af9", size = 260202, upload-time = "2026-09-30T04:38:06.549Z" }, - { url = "https://files.pythonhosted.org/packages/8a/7b/ed341c66f69f688723501fac752be3d63c7159ca0d0d4174fc611e5710bb/charset_normalizer-3.5.2-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:58ca3755ee7ff7f59b57789ec9833c9de9ea275405cdd240eda1f193112e398a", size = 259083, upload-time = "2026-09-30T04:38:08.311Z" }, - { url = "https://files.pythonhosted.org/packages/cc/9d/e41588b777965e5031a43128a1e96173ebb35ac75fc53ec3b517e7c21cd4/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:443eae2bf318abeaf6f15d785138f71fd6de770e99a92158b8b814265e079115", size = 253081, upload-time = "2026-09-30T04:38:10.402Z" }, - { url = "https://files.pythonhosted.org/packages/81/35/b761eb6d8c1eb218b9b42b9b4d5ac902afdc399fb6dac6f9a9aac7bda589/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:58f361dcbab699cf8f42db3f47c8e7fd1036f138c23a5d08de9fde5f425a730c", size = 248712, upload-time = "2026-09-30T04:38:12.317Z" }, - { url = "https://files.pythonhosted.org/packages/4d/2c/147169a041b747759f37405c0a97157e8e92de967968373101ff14915cba/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:1b4cbc7c3491ccb4aa17fcd8165649d01cf39f76de1696da8631b5f71b85401d", size = 274176, upload-time = "2026-09-30T04:38:14.138Z" }, - { url = "https://files.pythonhosted.org/packages/f0/2d/0ff8db0d373ba8538db686db11cd7e8912031490b9e4f383b41912e8d594/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:ba0b1d2620edf869789c3879223f52bf2afc5d31b3cb47cc57b3a12c05e2aa9d", size = 259413, upload-time = "2026-09-30T04:38:15.841Z" }, - { url = "https://files.pythonhosted.org/packages/8a/8e/b4a085fb47c9d3a7e43576a4784fdd8fe23f907514a972de8086edaf7a48/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:5e2b6b57e9733d39f0c9fd3185efa6b8e29652c4cd8fe94180272cf6ed9a78c4", size = 269434, upload-time = "2026-09-30T04:38:17.626Z" }, - { url = "https://files.pythonhosted.org/packages/83/1c/d8d8d7322a7c3eecdf3237a4a419cf41d2eaad8e006ce7dfdd9d4c8fa2eb/charset_normalizer-3.5.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:51cf45226a9b588d0d2b4880c62d686934b63ab0bd79ca23ab0e9762eb27441b", size = 262716, upload-time = "2026-09-30T04:38:19.214Z" }, - { url = "https://files.pythonhosted.org/packages/a0/16/0e4c6ba9b44e97a2da150e52d331e8f9c968b21b358fbffa6c856cebcd89/charset_normalizer-3.5.2-cp315-cp315t-win32.whl", hash = "sha256:5fb29fb8cd1a46c27a1bf9613ad5ec2599310d46b4025d9556404a6b6a292800", size = 197159, upload-time = "2026-09-30T04:38:21.037Z" }, - { url = "https://files.pythonhosted.org/packages/be/33/e90bc2b1374f7f36ef106f56620de5a783907e19ca857efe2277e31cac3e/charset_normalizer-3.5.2-cp315-cp315t-win_amd64.whl", hash = "sha256:a192e2c40070d92c3ccf777e3a5c4ff515573cd2bb7ed0c537fdadbbec5bbf21", size = 221322, upload-time = "2026-09-30T04:38:22.886Z" }, - { url = "https://files.pythonhosted.org/packages/66/89/dfa6dcb08c200b7830ab56439e8c1890f2971d51aafbb3937894a2e7fcfc/charset_normalizer-3.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:749e97e1b32313717a565abbe321bc2190bc8b35f1a67e4cdbc7c56c8d8ffe58", size = 209192, upload-time = "2026-09-30T04:38:24.648Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ab/176fbfd5b64939c55d652366aa5b9ef1d767af207a3aa6ebeb0d226c484d/charset_normalizer-3.5.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:4275811936e2f06feff5e598fb42a1b7ae852da8e39605211892b56b81a34efd", size = 331815, upload-time = "2026-09-30T04:38:26.216Z" }, - { url = "https://files.pythonhosted.org/packages/7e/84/371eac6b30bdbcbf2d632a1a01809103459216fcaae61b8b8d922c1bfb8a/charset_normalizer-3.5.2-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1c50fe28bbc2ced33386f298650d91218076c05420e6cbd790b913adc41659e7", size = 253276, upload-time = "2026-09-30T04:38:28.032Z" }, - { url = "https://files.pythonhosted.org/packages/43/6f/c4fbae58febff71709c51bc7e18fdfa55341dc382704740f9f0cbf03817b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d19fbd981a488e22cd04883659ca6b08f50b5974f9fd7c95655ef6a043e5893f", size = 241239, upload-time = "2026-09-30T04:38:29.732Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/458c3f42164a07d0c5210798e9e704b39e540a6793b05aba67f3a35243a9/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0fed1d06615f022ee3b13caf5e8b180cfea32bb2c5aded8a9d44277afc040f93", size = 231121, upload-time = "2026-09-30T04:38:31.462Z" }, - { url = "https://files.pythonhosted.org/packages/09/54/ab9e89367076f6331bb6c65c4bf14a5361fa5191cb6561bf534f18504e1b/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:838dcc90063569a0448120554591a1d6c4a4ffe11babf048908793154ab86ade", size = 260350, upload-time = "2026-09-30T04:38:33.239Z" }, - { url = "https://files.pythonhosted.org/packages/7c/c1/061431ecc688d9d76602502cb57cc01e691e682c18f1beb45f9673b5bbd2/charset_normalizer-3.5.2-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ce45c6627b22c47e390bc91a41c3d13032192e699fa0bea96e9671b373d69b0", size = 255430, upload-time = "2026-09-30T04:38:34.865Z" }, - { url = "https://files.pythonhosted.org/packages/8d/1f/20c8949f0676f7ab811abdeb7f4d7f1cbc6e61ff20bef08b44edeb092bc8/charset_normalizer-3.5.2-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0774bf9bf620249fee3e0b8b9fd3065de213be30f3aa94ce2494b3b638949e26", size = 250612, upload-time = "2026-09-30T04:38:36.649Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9e/46f2fa4c431fc98c4ae76a8cb5bdca54e0341e3cfc3fcfd8e82740250818/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1db38f4c5496827c1a501846d64d14c3b80c7e6714e406cd7dc36a9899fa1011", size = 242083, upload-time = "2026-09-30T04:38:38.26Z" }, - { url = "https://files.pythonhosted.org/packages/bd/39/559be29a0c0f086e0bba6922babd38916cc5e0b58ced4de13ee01ea05508/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:304d8e4d493af723536393eee0c689eb7813f4a474c8b479dee63f1fdd98f621", size = 232738, upload-time = "2026-09-30T04:38:39.81Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6c/387b0e4f756a282831c1d9fc6aeb6c51ca4507ca202767c8de15ce9b12e2/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:9b7f416ff0978e2f2249330527f0ad6fa02f4932e6199692d3b52da2048c19e4", size = 260703, upload-time = "2026-09-30T04:38:41.346Z" }, - { url = "https://files.pythonhosted.org/packages/96/92/1fdf015f09ef449f50d3ac4b67c90887c9c318b727daa95cc4f866e6521d/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:01077390b03f7988f11d700a2194e69b119741a86b1a638b1db88891e3eced8e", size = 247622, upload-time = "2026-09-30T04:38:42.937Z" }, - { url = "https://files.pythonhosted.org/packages/dc/3c/8e7b8a5671ad5d433669fb2a76f1a0164df2d9b1718b0206bc2a16d840cc/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:7e841fb9010836c992c9f12fcbd43a831de93a5f726fc1ccd8ca1d0268c5014c", size = 257500, upload-time = "2026-09-30T04:38:44.604Z" }, - { url = "https://files.pythonhosted.org/packages/b4/f0/45b579df5cabc1d5d53ea1cc35e8437d3ca768c0acccc7041517cb6fbb32/charset_normalizer-3.5.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9cae88599c7219005d879f98e5ed53341e9a122af585e1091200358a3003d2a0", size = 255100, upload-time = "2026-09-30T04:38:46.289Z" }, - { url = "https://files.pythonhosted.org/packages/31/68/fdec18a343f5fb3f310588dd478b09ac4799e0b187dbade3a8cd776f03ef/charset_normalizer-3.5.2-cp37-abi3-win32.whl", hash = "sha256:01b0c0d2262a9e28e8484a278c7e1b5d650e3ac8cf2683d2967e25899f208bdf", size = 174499, upload-time = "2026-09-30T04:38:47.999Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8a/b618149cc5207943a0242068d7a27897f56a62947b5a039085f2a22029f8/charset_normalizer-3.5.2-cp37-abi3-win_amd64.whl", hash = "sha256:9f56f72050826f63dcee7a7f55b0a77168cb3bfc553fd405e7f8f9ece75a4036", size = 200092, upload-time = "2026-09-30T04:38:49.707Z" }, - { url = "https://files.pythonhosted.org/packages/03/cf/4c66866fa9e2b1c78e3c911516d1de497a677b7ac60f1eceda74ce777ca3/charset_normalizer-3.5.2-cp37-abi3-win_arm64.whl", hash = "sha256:40ab6bffa02ae10a0581e6c198be7d2d8ca5c2a0c64e4ed3465d766df457573e", size = 294363, upload-time = "2026-09-30T04:38:51.312Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ad/d07d7862a62ffa6d79d68074d14823243dd235a77c45262acbf6adeb28bf/charset_normalizer-3.5.2-py3-none-any.whl", hash = "sha256:b6b751274acb69d77b3323d6b7dbaa3c7fdfc1eb829b7eb61d262f32e1af9685", size = 68872, upload-time = "2026-09-30T04:39:21.828Z" }, +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, + { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, + { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, + { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, + { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, + { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, ] [[package]] @@ -504,8 +306,7 @@ dependencies = [ { name = "codeanalyzer-go" }, { name = "codeanalyzer-python" }, { name = "codeanalyzer-typescript" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, - { name = "networkx", version = "3.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "networkx" }, { name = "pydantic" }, { name = "requests" }, { name = "rich" }, @@ -587,11 +388,14 @@ test = [ [[package]] name = "click" -version = "8.5.0" +version = "8.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, ] [[package]] @@ -624,8 +428,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astor" }, { name = "jedi" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, - { name = "networkx", version = "3.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "networkx" }, { name = "packaging" }, { name = "parso" }, { name = "pydantic" }, @@ -665,175 +468,103 @@ wheels = [ [[package]] name = "comm" -version = "0.2.3" +version = "0.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload-time = "2024-03-12T16:53:41.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" }, ] [[package]] name = "coverage" -version = "7.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d2/79/e78bd8f75a9b8e32233ce92d4607f0a21ce88a9156cace2884e7175a82f5/coverage-7.17.0.tar.gz", hash = "sha256:cc010a0a7fbdd9bb8bdfd0d3f04a5151275860213cbd7e2b876b29778489c712", size = 991021, upload-time = "2026-10-22T16:06:50.009Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/25/79a66272edd250031aeee6db87d500a0bf76390d0d5f8c2f431fe354715f/coverage-7.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:99a7b390cbccc6bf029ca4da3f0f607c218bb4085e9cd6b58a90d14ca12993c3", size = 225837, upload-time = "2026-10-22T16:03:55.622Z" }, - { url = "https://files.pythonhosted.org/packages/52/a6/f5f6fefb2fc1305363927edad1d0a60ce6ef80d6c1a74a79e825f0f670eb/coverage-7.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f72640e02a470b57b15cd655820133f6892760209283a363a60e2df932d5f0fe", size = 226257, upload-time = "2026-10-22T16:03:57.164Z" }, - { url = "https://files.pythonhosted.org/packages/28/61/72889bac8eb44c51f8043edb227df551dfdca1fc4819a6c6d67b3f69427b/coverage-7.17.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2dc9233f39149b5a4f4aba17a4b6bc5cca22e52cfc4b06fdb07d014439b8b2ea", size = 258282, upload-time = "2026-10-22T16:03:58.521Z" }, - { url = "https://files.pythonhosted.org/packages/f4/e4/03e4a5644df9b73de0d44d1b82acd18b06c42b5abc3f1433be8363fa983d/coverage-7.17.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e8113d3852e9377421a61de1917df27b3abb25404a4ecf69f9e64612c4345b5", size = 260506, upload-time = "2026-10-22T16:04:00.116Z" }, - { url = "https://files.pythonhosted.org/packages/6f/4e/949022286df7e59e8633a3a7e6635e0e6b53af7d57074cb0bf8f500373fb/coverage-7.17.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86a39539d10d666bb819c16c94d7edfc1aa2e0531b937f7c549b83d15177c6e", size = 262600, upload-time = "2026-10-22T16:04:01.49Z" }, - { url = "https://files.pythonhosted.org/packages/27/cf/7d67f60df081006315699b7edb9402c1b47142caf1383f4e56ae8ff1a501/coverage-7.17.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:559f748446ee799803686b5784e3deb54c70d655ac386a860e06b11672504ba7", size = 264609, upload-time = "2026-10-22T16:04:03.286Z" }, - { url = "https://files.pythonhosted.org/packages/e1/e0/9293d94afbc099990a085e88229a51c79b00828aba0f2adda32dc4cc16d1/coverage-7.17.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34d65c9e8e257f48a654908005046fbf1bc48d9540ae3776ad08c0acd010e10c", size = 258382, upload-time = "2026-10-22T16:04:04.804Z" }, - { url = "https://files.pythonhosted.org/packages/24/c8/bcd28efedf262c074dae76f61098739eb02b15f3f716f80cc86f9885b8a9/coverage-7.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b7fa0997b8eba7378ac66f31ec7f70164490353ab79b9667d37c0d365e50177", size = 260299, upload-time = "2026-10-22T16:04:06.291Z" }, - { url = "https://files.pythonhosted.org/packages/b8/dc/503f55e5e2200933403c90d619d9f779b5060ddd338b1bdc63cd235592cb/coverage-7.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6ae0453a3390e67f7bfbe34417bbdf5b4ebfc21db23fb446a0a41115eeeca6ca", size = 258314, upload-time = "2026-10-22T16:04:07.729Z" }, - { url = "https://files.pythonhosted.org/packages/bb/b1/f1a57c36077cc516240636f7eff0d1427939ed795f096dd2c7769213a56c/coverage-7.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:96151262832f3c230ebae23b2d6911ad549e1738465946c97004913ff06112ba", size = 262239, upload-time = "2026-10-22T16:04:09.116Z" }, - { url = "https://files.pythonhosted.org/packages/a8/4f/c2e59d4a132936c7c207b9b69ab99c0f27b14c3c93266e9922aa3b562b37/coverage-7.17.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:cd7397de6cc782f00fe5ac1d75e9b306bcfa49c8b6b8dd6ed1f7709393ad40b3", size = 257841, upload-time = "2026-10-22T16:04:10.509Z" }, - { url = "https://files.pythonhosted.org/packages/05/04/50742c0ee8b6c85826ff11737c93ed957fea4c9acf4b4b99804bdac1dd84/coverage-7.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9d1fdf82c6fea57b5e9dada509f9ce9638c8334664e2c98c7f6f1ccf3d143ad2", size = 259039, upload-time = "2026-10-22T16:04:11.916Z" }, - { url = "https://files.pythonhosted.org/packages/8e/cd/83ad4bbbfcb6d045a33c14cdca313f6c9275737c67f3b7300222e3239a37/coverage-7.17.0-cp311-cp311-win32.whl", hash = "sha256:38c86e5d74bbfd88a393fa3f91257c1225c63aa6db6d5918de3e49ab04f91c6e", size = 227687, upload-time = "2026-10-22T16:04:13.537Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c8/dcc5a7effa79707eb8a61e699b141cff7c9b46036771274cfb48ea7b765f/coverage-7.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:2ed3097c6817bc1a7fc8ae0a6131db74aa1150d863cccc308237ff362d3226b2", size = 228290, upload-time = "2026-10-22T16:04:14.899Z" }, - { url = "https://files.pythonhosted.org/packages/d1/58/a8553e0dcd38d8136df63964638d2b588e0a4a916bff1bca996244fda693/coverage-7.17.0-cp311-cp311-win_arm64.whl", hash = "sha256:6052e878b628abcd38fa5f2b64abebc686eed4e2267da42434017a9c6d24f241", size = 228199, upload-time = "2026-10-22T16:04:16.351Z" }, - { url = "https://files.pythonhosted.org/packages/0a/25/989fd3b495c4274ac0cf54cb6664326415e60183a7f8a73dd9bbb0b11e34/coverage-7.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0cfdc938ca3319d873d1f1252e60620a39aee4ebf9dbd7cc58238109ebda9c51", size = 225938, upload-time = "2026-10-22T16:04:18.113Z" }, - { url = "https://files.pythonhosted.org/packages/db/cb/14726426bf3241657facbf0f7df7babd8f7d3fcf8e4609b7929f9dceecbc/coverage-7.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d523da3c2e4bca49417768bcdb1a443c5b359dc44b8b93a3102e118fce912c40", size = 226166, upload-time = "2026-10-22T16:04:19.524Z" }, - { url = "https://files.pythonhosted.org/packages/8e/97/f95ed32cd3cfbe261a3598e694cb770cefc7b2d13ff013418d6f70a44dde/coverage-7.17.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:adbf3450c0f3f2b2854e282a8758f2b3eddf787eeff24ec9c9bc2cbc38328cc1", size = 258462, upload-time = "2026-10-22T16:04:21.079Z" }, - { url = "https://files.pythonhosted.org/packages/91/ac/eb4c31f741509a9ef48cf6f28385e98e9de0785599282252eee252ff8af7/coverage-7.17.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:85932227e9dd38e62cd29c17fefdfecfb919eead6af1e3259522d03cf85de983", size = 261789, upload-time = "2026-10-22T16:04:23.037Z" }, - { url = "https://files.pythonhosted.org/packages/e8/3e/d9cd006d1a3cc5deab07beb29b86cb4a10dd84d66b330820363fb8d310d6/coverage-7.17.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30f5477aac9c9e4a0a641c55f8f8fddd7f3bd91176c912c50f40ffced96b4034", size = 262322, upload-time = "2026-10-22T16:04:24.94Z" }, - { url = "https://files.pythonhosted.org/packages/c0/3a/4c872c6ae0762b09cdb8e856891bb3f584848cb60b6dda2bacb85fe2f3f0/coverage-7.17.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0b8bb651a4406fb6a983a905309fec1783443c65e1771b41e92740a0f4a1176b", size = 264600, upload-time = "2026-10-22T16:04:26.444Z" }, - { url = "https://files.pythonhosted.org/packages/df/98/1d41a2373fa98b423bcd70adb91d75e38eafb417955426dbb920b10016f3/coverage-7.17.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0edeb6594f080c8de1263cccb239cb316ef77aeb959e2e0f38f2953fcc72a49e", size = 258678, upload-time = "2026-10-22T16:04:27.832Z" }, - { url = "https://files.pythonhosted.org/packages/92/6a/fe04b5e63e76506daa63d90bdfb00a53767fe5df18546b437d6226918d6b/coverage-7.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da94ec0484e84fce5c7bf8d0f54b97767a90d992653a129b35634699d516e0a5", size = 260210, upload-time = "2026-10-22T16:04:29.275Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c3/5c5a78dc19dd4799be9c6ec022316fb25ababaeacfaf0f52f24c56a57b43/coverage-7.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a25cc5e8c23a590815c6a7aa43624234d25cb23b21b484adb8a0daed59860db5", size = 258375, upload-time = "2026-10-22T16:04:30.647Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e7/4c1d8eaff4d756fefd15d58c4953a78ab656782fd0e32c5a3465dba61aa0/coverage-7.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:db645c81cf4d6bcb392ea1894aad65d55d1588a8472c834b25ca575da3029a56", size = 262422, upload-time = "2026-10-22T16:04:32.053Z" }, - { url = "https://files.pythonhosted.org/packages/a6/2a/0b17c3e2e7b6ff1a5d92eb58915c0d1026668928f961d14dac73cf1b6096/coverage-7.17.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:6a80a11b90c4a03df1502304cf24ff953255b6b5d076ef79066ecf88baaff31f", size = 257875, upload-time = "2026-10-22T16:04:33.824Z" }, - { url = "https://files.pythonhosted.org/packages/d3/2d/eb0cbde0535342df0d17a667163030a3afb67e5eb9e3ad94af9540041584/coverage-7.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e4eaf11d6b0f2147f46cfbf06fe7edcca6f095d0120da00ddc2458995ee869fc", size = 260361, upload-time = "2026-10-22T16:04:35.661Z" }, - { url = "https://files.pythonhosted.org/packages/2e/47/1be2a6db7eb655d0a1d899217c3f2469f9121cbbeddac35c1c8173b1482e/coverage-7.17.0-cp312-cp312-win32.whl", hash = "sha256:912a29f338798541d795e2e25903c6fe7a99dee70a40fe4706a9a124649b523e", size = 227747, upload-time = "2026-10-22T16:04:37.102Z" }, - { url = "https://files.pythonhosted.org/packages/11/c5/201c894c57de81875d8b8cc527ba222aa350e8cfb183eb3f6df45d06ad8e/coverage-7.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:88a1a9fb0075b83389dd9b403bb3fce976031b3c2aa0e05e3e57143cf639de69", size = 228325, upload-time = "2026-10-22T16:04:38.989Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5d/196095339b19758cf83f507fb598bc42820ae124745feb3084662729e17a/coverage-7.17.0-cp312-cp312-win_arm64.whl", hash = "sha256:2c680e838ff9e68d491158625ca2c1ddb17d78d791bba96a31f8b839b4990438", size = 228131, upload-time = "2026-10-22T16:04:40.654Z" }, - { url = "https://files.pythonhosted.org/packages/54/e6/1f01afbc9f4fa8ca5e1fa6fdf537a5c58b5765d1b4167ee284cddb9acc72/coverage-7.17.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:84538c040f4e6214f663459d89372ce4e6b2bbdd9d397ef0dca7b3ecd56b8eb2", size = 227080, upload-time = "2026-10-22T16:04:42.325Z" }, - { url = "https://files.pythonhosted.org/packages/92/7a/bdb7e6260c4a211389aeac9b89dc31662ebe122153ad0ecfd156897912df/coverage-7.17.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:6abfb6a4cf1cb1b67bc8fccdde177e2d2b781d0d34449e7078156547025140e5", size = 227152, upload-time = "2026-10-22T16:04:43.737Z" }, - { url = "https://files.pythonhosted.org/packages/37/4e/276e7d5b3cfb124871bdb544c27b004a8b4e270e6bf8e7414149c54b5e5b/coverage-7.17.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ef65e96f0fc1a7c8b7644c7011d47a8228555e7888ac4d6246f715a7f3d7c398", size = 225397, upload-time = "2026-10-22T16:04:45.292Z" }, - { url = "https://files.pythonhosted.org/packages/b3/7d/dac073db12f3c131598a6693253aded581e4d7d622a89864f11bfb0ca2f5/coverage-7.17.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:55939ea4c097fda2edabf80fac5e49bef15597b950a9f29fc56292a895245feb", size = 225705, upload-time = "2026-10-22T16:04:46.603Z" }, - { url = "https://files.pythonhosted.org/packages/00/45/877b0a9248e921080ae91d115c13192d17e308f5aee86bcc7f7bc2a54ed1/coverage-7.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bfb6f868af552c0ceb2d19220b8cbcc2be096ca26163ac30e682a13041433429", size = 225828, upload-time = "2026-10-22T16:04:48.065Z" }, - { url = "https://files.pythonhosted.org/packages/4f/f5/2c48d47abec0e4590b302920334be5ee3854f96bbd22524feabb8d92b220/coverage-7.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8d823d66afd59566030539c49c7a6acaf3083996682be2dda760c63555842094", size = 226088, upload-time = "2026-10-22T16:04:49.513Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a0/ec0442f3f372c7fd742f49b3022edd392f79e37a0048e1fa333f56d01ec3/coverage-7.17.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:50678474e714c684b82c108e63fbb8f1bcf1266d8293a49980f1d08526f093b5", size = 257257, upload-time = "2026-10-22T16:04:50.982Z" }, - { url = "https://files.pythonhosted.org/packages/92/e2/eb0927ba93809f76eee69fa1e47999825fc7dbbabc3e0e1a2744f2677acb/coverage-7.17.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:045c1eeb19fb4eae949850a761102fffb3a5f638b97f977912f95843e54f6669", size = 260165, upload-time = "2026-10-22T16:04:52.409Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a2/8d4c6055efb32099b15c9cc33d007b8aabebc4832f372a3274de5ba0afc5/coverage-7.17.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfb12891a773cbc2132349c77c690a045a882fe3f98b4bda50dfabb01893f9bd", size = 261098, upload-time = "2026-10-22T16:04:53.763Z" }, - { url = "https://files.pythonhosted.org/packages/2c/1e/93412288688a7b03f152a734c8ef086e395108a0a6a746985d3967e220f2/coverage-7.17.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3067608b4429629f640c1b23d2f69b05d2fd45e00ebb6ee9e8fad220a6c11722", size = 263164, upload-time = "2026-10-22T16:04:55.386Z" }, - { url = "https://files.pythonhosted.org/packages/3c/20/7eb8d805c4f1a212245cef20181dfbf39535357985073d49730ee9cf08d4/coverage-7.17.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1762e85cbbe3b5ff9c6dcbcc1b89d5c72320094292b7b9572bf882c85e428b7", size = 257287, upload-time = "2026-10-22T16:04:56.976Z" }, - { url = "https://files.pythonhosted.org/packages/1a/c1/1df29630b4ed17e135c76390afcc6bd273c3dc5ba2a21a76813a600fe98c/coverage-7.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62bb77987d3f72a0aaa77c567ee7f9806bc2e748c8f46fafbe1fdb90dd148398", size = 259256, upload-time = "2026-10-22T16:04:58.545Z" }, - { url = "https://files.pythonhosted.org/packages/a1/79/2365d1008d28aafe468a450a24c6c63363de794b5140223d67685cd0e205/coverage-7.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6cc31f27240d4e080437e3b8229d92f1d809c9a4f233607385373b73974e183e", size = 257178, upload-time = "2026-10-22T16:05:00.103Z" }, - { url = "https://files.pythonhosted.org/packages/c0/9f/f002952d295d772688dffce0d991e3822795b1e3aad158073712a5a5e86e/coverage-7.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61cde5222f1933d476647c5a25ed1a8678b7703098cb5a15f4a0aa39967d8c28", size = 261275, upload-time = "2026-10-22T16:05:01.462Z" }, - { url = "https://files.pythonhosted.org/packages/40/fe/f9e15fbb426be97cd679ee5d359151e046f103bcd76b5092c318c26ed596/coverage-7.17.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:11f5f7fb2d97a0fe865f5e7bad4eb0619b957637f676bc088d13844adf26ba95", size = 257029, upload-time = "2026-10-22T16:05:02.8Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4a/3c398f38694387334ff4c9f71afc8e15b4fa7db7bc0bea4d5b6032eb0df0/coverage-7.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e09612b1b82c9df1d2b6c85dee88d5aad3e73d77a8ec0b16ac6a7322cbdf5d9", size = 259109, upload-time = "2026-10-22T16:05:04.241Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a9/908a3cf1a2335aec1c788682a06c2f742a62a4f987033f080de1c5fd1997/coverage-7.17.0-cp313-cp313-win32.whl", hash = "sha256:bd3e9eb493631ff1ca34bf5efac25b5c66724f837bf6182c4fc771c55946423d", size = 227691, upload-time = "2026-10-22T16:05:05.636Z" }, - { url = "https://files.pythonhosted.org/packages/13/f7/8cdd7bfd8a63b3e6b133fc395ecfc7b1cb6f561926e7e2ad050de85b83e7/coverage-7.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1fc9a7cea899c51d8a53e66c2f082a3d9e461ece32418d3ef0a0b90c32bfd3d", size = 228418, upload-time = "2026-10-22T16:05:07.057Z" }, - { url = "https://files.pythonhosted.org/packages/09/cf/0b3fc57f735cd3831ca13d0be5312a5477d5934066683c5d34018cab7541/coverage-7.17.0-cp313-cp313-win_arm64.whl", hash = "sha256:e65a1e61a68493fbfbe44d8bec71b3231d81b9917f62d3dafe0e105072147e83", size = 228142, upload-time = "2026-10-22T16:05:08.435Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e1/722462fe79912ebebc101497bd16c42413cde2dbae771017f1ec0acb84c2/coverage-7.17.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:dc5936491e306f2f6f095bd5fba593de11eb0375cee787ca1f245c3a333a523a", size = 227197, upload-time = "2026-10-22T16:05:09.846Z" }, - { url = "https://files.pythonhosted.org/packages/b7/74/826b9c09f2ebfea803bccb391d935688a25309bff8e819fc446bc629c108/coverage-7.17.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:968c5fb6e0c83cab752d79a70209648ce4d90cae815c60fa229b59e264601062", size = 227314, upload-time = "2026-10-22T16:05:11.422Z" }, - { url = "https://files.pythonhosted.org/packages/6d/19/c8514d7f5e0659a96ff2bc7377119dca6d420e2761c5fc69ae37618734f8/coverage-7.17.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:12cb8a20ad904a5811e6660d829a586b216e5254b9b34b76dde8a4d65d827dc6", size = 225477, upload-time = "2026-10-22T16:05:12.761Z" }, - { url = "https://files.pythonhosted.org/packages/81/74/ef9433ce599f07d8633b4ce6e6d6921505c4ef3f7f9006f8eb66e2c278cf/coverage-7.17.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:bb5ca66937c55bc85d1a5e9c5900a3e4693a8edf2280a9b3672b7b2661a84b95", size = 225787, upload-time = "2026-10-22T16:05:14.394Z" }, - { url = "https://files.pythonhosted.org/packages/d8/66/26e58981940e8b3944c6a9941bec5c7f50840e7009a046712e3f3bcd9e6a/coverage-7.17.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5cc15faaf318ee5040d835a62c75bc6f122d837274f3b5efd47bf9fbd4ac5b85", size = 226019, upload-time = "2026-10-22T16:05:15.798Z" }, - { url = "https://files.pythonhosted.org/packages/e9/63/fe175310815cc8357b83b773c9b4c20943c269f217dd825a37c4b4bfe324/coverage-7.17.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7d6d9d396c8b7bcaf76d774a10140b218111484e54c73a5f2a1b75655381748e", size = 226169, upload-time = "2026-10-22T16:05:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b0/ac84761f5b4bd226696b0ec4606903d2ef7208abda0aec06c14a4218def4/coverage-7.17.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:42e6f170d1ac04b7eb3363310a6c41cdfd82c1fe6bf9ffbc4a86f380bdf091c7", size = 258092, upload-time = "2026-10-22T16:05:18.691Z" }, - { url = "https://files.pythonhosted.org/packages/e9/58/d8bdd65a661913bc12eaaa3e59742b2cb8b94f2e7f78e62184f0a58ca493/coverage-7.17.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:acdb5f3c96046efff9dc6c572a6acb2b8d0da09372d7b9a9ed7249cf7d17434f", size = 261096, upload-time = "2026-10-22T16:05:20.089Z" }, - { url = "https://files.pythonhosted.org/packages/7b/15/5d82e2f0a75ea149e0a6412e137e1d610538772fdfd7199737db7fe234da/coverage-7.17.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3393209f6894713161ee82a9b0e673e58237e0f9733c6638e7a6c0c620ef0b33", size = 262080, upload-time = "2026-10-22T16:05:21.568Z" }, - { url = "https://files.pythonhosted.org/packages/0f/cc/e3ebfd295d1dd47c7bc84a17d73f150465a37ab388dd68fe82b495dc79a0/coverage-7.17.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9494d9e99389d39e6a96227749af898d8924ff591cb63944f8a98e68582bf0e", size = 264558, upload-time = "2026-10-22T16:05:22.906Z" }, - { url = "https://files.pythonhosted.org/packages/e0/9d/e2adff76d6544bbc6df7366d74967923c2de37ba889a006bfb875bf5857b/coverage-7.17.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:032d4c2db4c677eb71d43f2f8b80bf64e9346f7a3f7b6ebb13f1782f3cc6c274", size = 257855, upload-time = "2026-10-22T16:05:24.343Z" }, - { url = "https://files.pythonhosted.org/packages/d9/fd/ecd1e9cddf1c36b5d03c438568b1f53e63db84bb3656539d71b454484c7d/coverage-7.17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4343a9378b964eb3cb80fa90406385de91c7e982a769ca9314d848f93bc0d3f2", size = 259933, upload-time = "2026-10-22T16:05:25.79Z" }, - { url = "https://files.pythonhosted.org/packages/40/b6/e17a19dccdbcad494c64691f71c1dba3e55c30625bc29ffbb88ac5a0aa8b/coverage-7.17.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:b609df3d6d900464207532c5170a65c6ede8d2e0b91f151f90008a866395cd76", size = 257972, upload-time = "2026-10-22T16:05:27.185Z" }, - { url = "https://files.pythonhosted.org/packages/6a/0d/37dac534709a3fa43a937c8b0604839bb44b8670b83d143a4b78fec20d1e/coverage-7.17.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a01ef92caeedfa4f2ad171a3a8e6fece4565de871d8bca428151bf9929f41048", size = 262271, upload-time = "2026-10-22T16:05:28.619Z" }, - { url = "https://files.pythonhosted.org/packages/cb/17/7c05186925b4d64a46c271dfd944e3f0c1ad89db9095c31a6df157a75df2/coverage-7.17.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a3914e2c98c34b94c26d2add3d2a61ccfd3534fc4eaa879ee290bdbb5184ba6c", size = 257604, upload-time = "2026-10-22T16:05:30.07Z" }, - { url = "https://files.pythonhosted.org/packages/95/65/c241cdee66a0ff86c68f6d37328e735d10e3d30cd6ff66f356039eb688d2/coverage-7.17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8a72b26dc5c9a9422e45472b1d67ba5caf273c524c8668cc04b23062663755e", size = 259714, upload-time = "2026-10-22T16:05:31.402Z" }, - { url = "https://files.pythonhosted.org/packages/db/09/e93233fe2405574ce0a31ed201c0cba3a860e085db5d2828bf12b7dc0790/coverage-7.17.0-cp314-cp314-win32.whl", hash = "sha256:03baf0688e14a5a44ffd1eefa8928dfc92b14565e521174e072b31b971aa1657", size = 227914, upload-time = "2026-10-22T16:05:32.78Z" }, - { url = "https://files.pythonhosted.org/packages/d7/77/04979eb217edb94b94afabb4bcc179f60c746f68d3fd0b12688ba9195730/coverage-7.17.0-cp314-cp314-win_amd64.whl", hash = "sha256:3a4459b0f389dd1e51aac3dbfc4ca35b30cae7dc99caa3c0a086d1997a985709", size = 228543, upload-time = "2026-10-22T16:05:34.118Z" }, - { url = "https://files.pythonhosted.org/packages/a0/38/155f2f2c6769f8c43eca8a5e581443faa0908828650090b97103b4a41376/coverage-7.17.0-cp314-cp314-win_arm64.whl", hash = "sha256:a32ee5831b15ba239bef5d272ae586ca8acea4a661b5f2941f5a0d380e518b23", size = 228396, upload-time = "2026-10-22T16:05:35.951Z" }, - { url = "https://files.pythonhosted.org/packages/52/55/d6751572d9445485c4c5a51ec6ae11caa5c11b7ef2448cdccc884f7f54d9/coverage-7.17.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9c083e253e96fdeeaf48133fe836cac86ace2db215d235700e7f7532420a200c", size = 226486, upload-time = "2026-10-22T16:05:37.363Z" }, - { url = "https://files.pythonhosted.org/packages/2f/a8/82d37760e537bfdb9fdee285fa1e1b45bc153293d23e2331c7befedd1990/coverage-7.17.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b88fb4d4d7608cbcebdc7ff7dbffc2115e3b81d6c33a79147cd79d54fcb080f4", size = 226861, upload-time = "2026-10-22T16:05:38.777Z" }, - { url = "https://files.pythonhosted.org/packages/24/96/70ec00a9db6d7bdd3f914eba12057360769f5cb78a98456e71fe1937deb5/coverage-7.17.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2bf3ee38a40c0570c316b9e7507c472469586906a20f289705898528c31aaea8", size = 266849, upload-time = "2026-10-22T16:05:40.285Z" }, - { url = "https://files.pythonhosted.org/packages/77/d8/d99be3bfbb208512f039c80b31e404138a86678fc929a17acd5b7135a6ae/coverage-7.17.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7c570293f001ea91598b90e90cb9b98fddee833e90bbede432cbd218331ccd8e", size = 269402, upload-time = "2026-10-22T16:05:41.585Z" }, - { url = "https://files.pythonhosted.org/packages/82/50/6cbe8b5a5060edbd21ce8109c4e900f8b7656e8b72ede6dc4d82dc0b8bfb/coverage-7.17.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:791f9ee09814dd30d9562b4f4eb037a371485ec1c830b53999d2320d20c4e764", size = 272025, upload-time = "2026-10-22T16:05:42.921Z" }, - { url = "https://files.pythonhosted.org/packages/bd/05/d3633add01e5518dfdacfdbd1be41cb5c581412dd8bccd663edf6ef7fec8/coverage-7.17.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c7c5672ecf1b497de7a0b37743bef40e3b58e3207e9fe2ed6682cb0420836a88", size = 273515, upload-time = "2026-10-22T16:05:44.324Z" }, - { url = "https://files.pythonhosted.org/packages/57/d9/b83387780271bf9ea9f96a3aeb01c1c302c4494a927923c4fa70cd170a3f/coverage-7.17.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:337f87e62e1c5f43c8198d879f677c342d152f84d3f157add12558853cbb8eaf", size = 266725, upload-time = "2026-10-22T16:05:45.713Z" }, - { url = "https://files.pythonhosted.org/packages/e4/be/8e80b29764ae3f4d70d44952eee3f3927eb36897490fe799e400adb7f5da/coverage-7.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c8a58baa8eb6154c6645eadcc19b6c089deab78c24a612a83206f2a8a5992a7c", size = 269312, upload-time = "2026-10-22T16:05:47.054Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c9/e702f588fe8d83ca844f133270ad0a49bf650c8cf260551ff6f11a6b6bbf/coverage-7.17.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fb5745048ee20f796b0e3ab61831049e749acff188563e2af32f58ede957ac1b", size = 266740, upload-time = "2026-10-22T16:05:48.343Z" }, - { url = "https://files.pythonhosted.org/packages/8a/11/ee13ad14b714d75ef07c490b6e43969574a8b8b8c6d67bc741fcbacbf9c3/coverage-7.17.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:7b5abcae74750302ac4bc77351eaee87c450e4abd3b6225eacde3858e260f8b2", size = 271036, upload-time = "2026-10-22T16:05:49.727Z" }, - { url = "https://files.pythonhosted.org/packages/e2/bc/854e8912c11c54aaf416e74602000589c6efbbe1f251dc90202fdabddcb6/coverage-7.17.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4e153f0bd6509dbf837fd585f489b3328bfd98f2a718a0b15ae63032148b285c", size = 266158, upload-time = "2026-10-22T16:05:51.141Z" }, - { url = "https://files.pythonhosted.org/packages/a8/dd/96432830ddf63bc42654de54eee77a0cd6949cc65769bda06f353323f23a/coverage-7.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e42a835271922fe7bf98c7a05c78d4032f4e52bf5b07fafa1eadfdfc2f0ad22f", size = 268088, upload-time = "2026-10-22T16:05:52.92Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ee/230c6ec065a6629d41cc89323ceb54d37e2650c104f70fc108f4ee7c5051/coverage-7.17.0-cp314-cp314t-win32.whl", hash = "sha256:5900055351ec89fdffb34b27898815106529ded29a9496464c1ebd6313fd40fa", size = 228229, upload-time = "2026-10-22T16:05:54.255Z" }, - { url = "https://files.pythonhosted.org/packages/f0/1d/23eb6aadcb3c00764ff2961c0ff55f5dfa2543856d932b949bbc04fa68e9/coverage-7.17.0-cp314-cp314t-win_amd64.whl", hash = "sha256:5ee9c8bd13a59e301dc2aefe7aa8384633406808de051b1982775667094eb673", size = 229154, upload-time = "2026-10-22T16:05:55.682Z" }, - { url = "https://files.pythonhosted.org/packages/3e/f1/7df117e8e016b7a3ee459e833b3456f3610505afefd071f8727702d98439/coverage-7.17.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a9cb9a0fb58e6fff5442969af36094ecd6976f4907f179e33b27e15355d8f74", size = 228726, upload-time = "2026-10-22T16:05:57.179Z" }, - { url = "https://files.pythonhosted.org/packages/9f/a1/f9c24911755f91e6f451ca2e2c1804fbcbe9fecbc3310e341bbbbfa1d85b/coverage-7.17.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:adabc1079ba844b096799ba8638d8df434aca1613f95bb7d5791af320cf05559", size = 227196, upload-time = "2026-10-22T16:05:58.543Z" }, - { url = "https://files.pythonhosted.org/packages/b0/a5/2b665b40c626e6bb40e5e8e23d91170b48b5f2f57186f46b07f2fac42386/coverage-7.17.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:6b4593d2871c4c801656dd5861e759f8f5156febd6b6061b02f6a72d64618b7b", size = 227315, upload-time = "2026-10-22T16:06:00.409Z" }, - { url = "https://files.pythonhosted.org/packages/3d/8c/22b518d61b930b8a4d62905d046c76a03675ef19b466462011dfb16439a3/coverage-7.17.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:c2c48a36bb970b7265b196032bfd4237c0b373f2b25ef7012d7e905b5b35c19c", size = 225490, upload-time = "2026-10-22T16:06:01.743Z" }, - { url = "https://files.pythonhosted.org/packages/08/5b/d3b141455944e030cd4987f055f8c84a44a1a0b28d81ae93389f44051691/coverage-7.17.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f8bc2cd4c6aa58be1ca243fb8cddb6c3c42031fe4403991ad9cf2b3baed03d9f", size = 225797, upload-time = "2026-10-22T16:06:03.423Z" }, - { url = "https://files.pythonhosted.org/packages/03/24/aab2156983f7022361352640c583d08f0238e4cd7463eb921172001b4cfe/coverage-7.17.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:cbf0b83ce927de6053279ba61342d9f8892afde1385fcba9144cd05d4023d109", size = 226025, upload-time = "2026-10-22T16:06:04.76Z" }, - { url = "https://files.pythonhosted.org/packages/87/db/94697b9ccf4ec94cdad07bf94e2a21b9702247cb212d2d5f18d2b9c3d0de/coverage-7.17.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:66efc0fb99cee34626fc17d3adac9c3cd816bfdad563bb1e983c3ef432f566d4", size = 226193, upload-time = "2026-10-22T16:06:06.167Z" }, - { url = "https://files.pythonhosted.org/packages/a0/fd/db1c4ade4219831d590fff5aa5b7d9ceaf84586e8e60da6fff71b6182251/coverage-7.17.0-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:58a304efdf2253fb2ea03d45d0a04cc174a92a0cd5279c28c5bb893ce7410968", size = 258046, upload-time = "2026-10-22T16:06:07.51Z" }, - { url = "https://files.pythonhosted.org/packages/95/ee/84ed138990ed752abd73db4adffc1842d6152017d8e21809cc109a413fda/coverage-7.17.0-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aed06129a9f530a948928260d7d2d81c47261355b0127e3c782251b38958463c", size = 261735, upload-time = "2026-10-22T16:06:08.861Z" }, - { url = "https://files.pythonhosted.org/packages/64/ad/c1e4367bbd1e7d562d6bc979c82b542f2040544e95a8cd995b694caf0e1a/coverage-7.17.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6cdb47a9be2d3313829bed1d296086287682a3ee901ff987b3432b45705b771", size = 262819, upload-time = "2026-10-22T16:06:10.49Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3a/e8e8509b0940403eab15d86f70022790a01fce3e971a161919c544953f7a/coverage-7.17.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:804fbaf81d09b34e2f8b1159d01e211a50713d743d32fd9b2ca6cf0ae507a66f", size = 265194, upload-time = "2026-10-22T16:06:11.847Z" }, - { url = "https://files.pythonhosted.org/packages/1f/77/d64bbdbb734b1059ebcde2b5df567f142a9948079e51af9b0abf8c9ec17b/coverage-7.17.0-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b2afebb96da9a1bbca142f8cc12320c14e5c215e0a49cded4f191f5a31506a28", size = 258410, upload-time = "2026-10-22T16:06:13.234Z" }, - { url = "https://files.pythonhosted.org/packages/e2/29/7cf81f08a254532c074eb52cfe6b12bb753d08f2997269c9fac8de359541/coverage-7.17.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:bd04fd23206be9ad3de13b0b39313094fafa66a1f6baf70f5471c004a9fac47d", size = 260697, upload-time = "2026-10-22T16:06:14.595Z" }, - { url = "https://files.pythonhosted.org/packages/7f/56/bacea6dee2d5ccb31ab0cfffcee87ca7efa80ff048840209c8013aeaf02e/coverage-7.17.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:5ebfbc87836529a31d25c2dec1262c38eea852ec1c46c0f690a515a7339d9c5b", size = 258649, upload-time = "2026-10-22T16:06:16.265Z" }, - { url = "https://files.pythonhosted.org/packages/a4/97/fd8a6a63740f9ee177c53b59e2f4d0752369bb0fd154086a1e69aa1fb255/coverage-7.17.0-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:a59c3b470ac3b2432af3598a996affbeb10236cd899a005c1c4e517fcff8b592", size = 262989, upload-time = "2026-10-22T16:06:17.85Z" }, - { url = "https://files.pythonhosted.org/packages/c1/37/7cd3d3520d45db3788456452b65446182c08f2a7c276f40c9dd11966be02/coverage-7.17.0-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:7fef12cec4b96f59e09761cbd4fc9bdf4788062d1ae435b920241fc16c8a9549", size = 257955, upload-time = "2026-10-22T16:06:19.563Z" }, - { url = "https://files.pythonhosted.org/packages/c1/b9/80343a55e07d854927a915cc21a52e350ae1db9ead33f0248507b960785f/coverage-7.17.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:a14e8d69464da9cbe1dc29e7116dbd37296d1d51a695327c478e250349085089", size = 260512, upload-time = "2026-10-22T16:06:21.055Z" }, - { url = "https://files.pythonhosted.org/packages/f3/32/e4c816f0cb3efdc6392bb276ff88359729f9dec605bdd3c1c7a44776f759/coverage-7.17.0-cp315-cp315-win32.whl", hash = "sha256:9a66074231799d8884d267234d49f60c90b43a945dfe069646b72f3058cd4e67", size = 227913, upload-time = "2026-10-22T16:06:22.407Z" }, - { url = "https://files.pythonhosted.org/packages/43/14/283120142ac281834808584249b89957de997c28573ddd65ae106b622121/coverage-7.17.0-cp315-cp315-win_amd64.whl", hash = "sha256:79cf71e5f9a48877ccfed5baa2c72f45af4feeaa596249e23eb15b473134830e", size = 228532, upload-time = "2026-10-22T16:06:23.756Z" }, - { url = "https://files.pythonhosted.org/packages/b9/bc/83dbc6c3bd58042afaefcb0cfd7d7a2e3076989a2f3d9bc6e6edac819784/coverage-7.17.0-cp315-cp315-win_arm64.whl", hash = "sha256:09e563b49c81cd0a33734e926d7a4a6ef1778d74304cde2dcc3aff8b30ea1036", size = 228393, upload-time = "2026-10-22T16:06:25.163Z" }, - { url = "https://files.pythonhosted.org/packages/00/ed/9463d1cb1766a2570343a372c2871c7fb4d561e5051f029399f4d57ce947/coverage-7.17.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:a5e2e0625dfc789af0b2e10acfc106b352f314fffbd19e6392a7961c8cbe5d9a", size = 226481, upload-time = "2026-10-22T16:06:26.563Z" }, - { url = "https://files.pythonhosted.org/packages/ae/59/6536c7fa87be13236b4184fc395f14d18f622a5b8ef7448a6bfdf5f24ec0/coverage-7.17.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:194562ab1eff0d85aee8a17ce4c5c0bc1ebf70a629a7145257123156ad100fd6", size = 226876, upload-time = "2026-10-22T16:06:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/b0/bc/4ffae6038f78382c9ab6a4969cb5fc01d50b083d119851085807629abe88/coverage-7.17.0-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:85682ca89bc4601125dcdff23fa70e6274e13c9ad502fba845e6c274ab2c6569", size = 267241, upload-time = "2026-10-22T16:06:29.356Z" }, - { url = "https://files.pythonhosted.org/packages/c0/60/cae4b708b4217d33ebf66b9c57f8910a257346b3eaf054a78d73605ddc4c/coverage-7.17.0-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0d0fac604a962ff546beb038cba9a5a09d88e6e3f01612fb46f7bd4fe5dc8dca", size = 270079, upload-time = "2026-10-22T16:06:30.736Z" }, - { url = "https://files.pythonhosted.org/packages/a9/84/1225ab04e55a6a2e483e903a5eb0f8f081cb5325df833594534aa288d91c/coverage-7.17.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72edd4f9483ae30cd1ba4f230687840ef7b58a16afb1c9e81131fd6d64655f36", size = 272775, upload-time = "2026-10-22T16:06:32.247Z" }, - { url = "https://files.pythonhosted.org/packages/94/ad/567f8dd9246a553aa8753732c41f0e0654e98e9a617d6282e64eae0e6aa8/coverage-7.17.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:91e487ad07c511da77b574820141a7c2da09bc2a4b4090b5be2424295d100697", size = 274110, upload-time = "2026-10-22T16:06:33.859Z" }, - { url = "https://files.pythonhosted.org/packages/66/5f/e0ee76895df40601e4aedffb6b8e71ea48e276a629fb4488b92cffffca14/coverage-7.17.0-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1cabb31531002fef5197de5df3c84730aef01e750e25154b9813a2583435aba2", size = 267775, upload-time = "2026-10-22T16:06:35.193Z" }, - { url = "https://files.pythonhosted.org/packages/19/6d/d19c6e45e940e5b9ba697b7be9a8e63cef73d90bdea45b670a59df466717/coverage-7.17.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:c9ac886242bbd50fb35a2242ba79555a99891e657da33f98b7ca968e3488a350", size = 270268, upload-time = "2026-10-22T16:06:36.597Z" }, - { url = "https://files.pythonhosted.org/packages/27/a3/b2731bb7aef2db800b330603675c3fa58a6497a05d5b5f8625f3b6285f68/coverage-7.17.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:d45cdc495671fc99268ff3653e0da4244972e9fc0e1fc3ea9de18781ad28963a", size = 267298, upload-time = "2026-10-22T16:06:37.973Z" }, - { url = "https://files.pythonhosted.org/packages/50/75/d0c90a81b6b6607933109914dc8b0ef0a5f4cacf9482ca868ae773ee5d0b/coverage-7.17.0-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:12961f738d717a046d4bf3f8d1727eb3ebe2ed5478ff96cd6233d4dfc39323d3", size = 271899, upload-time = "2026-10-22T16:06:39.389Z" }, - { url = "https://files.pythonhosted.org/packages/64/1e/f038f3a2614e9ef839a40a184713aca40b8ed79e626ab5cdc388771045df/coverage-7.17.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:1ee0a982b0e1230b3edf768a7dd022bd2377303763895327ac62deb5efacee03", size = 267380, upload-time = "2026-10-22T16:06:40.97Z" }, - { url = "https://files.pythonhosted.org/packages/c9/30/8d636e639b2d8b1934128573402a7caf66c8cfbc794fa02061d84f115c34/coverage-7.17.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:460679f53893081edb94eeed011d26be37228ba649b853fd2aed7e4394fb1f35", size = 268993, upload-time = "2026-10-22T16:06:42.361Z" }, - { url = "https://files.pythonhosted.org/packages/73/7a/219f6b391cb0636242d06c390a8add5af91afa3e92afd0380dbedd34f487/coverage-7.17.0-cp315-cp315t-win32.whl", hash = "sha256:600e121e412cd6bdb52ec105b95c6a04da0c9710d1534f6e64a42db667907802", size = 228216, upload-time = "2026-10-22T16:06:43.714Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3f/514d294319c5eac11494394545de209079f33993e14526c220eab29b2a96/coverage-7.17.0-cp315-cp315t-win_amd64.whl", hash = "sha256:c3e11b81faafb1f063248735c3e2c5c4183fc1db2c7f46782170dd7760dffcbc", size = 229146, upload-time = "2026-10-22T16:06:45.262Z" }, - { url = "https://files.pythonhosted.org/packages/f6/82/c0d8bb0a67df838fc7bc6f4060ffc404fd1154fd18e624d83e6abc41aeef/coverage-7.17.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d472ee1c64868a917a47f02ffb4ac8c22b477f7589d57a3eb0c58b1ad4f0137c", size = 228716, upload-time = "2026-10-22T16:06:47.097Z" }, - { url = "https://files.pythonhosted.org/packages/c9/17/48032919343afa2906112d458aceda2043afdb24a2ee8eb4c60904d8ddf1/coverage-7.17.0-py3-none-any.whl", hash = "sha256:bac487dce0d2aff28ddf1a533a916f771416eee0e493960f611e49037b878e9d", size = 217383, upload-time = "2026-10-22T16:06:48.471Z" }, +version = "7.9.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/b7/c0465ca253df10a9e8dae0692a4ae6e9726d245390aaef92360e1d6d3832/coverage-7.9.2.tar.gz", hash = "sha256:997024fa51e3290264ffd7492ec97d0690293ccd2b45a6cd7d82d945a4a80c8b", size = 813556, upload-time = "2025-07-03T10:54:15.101Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/40/916786453bcfafa4c788abee4ccd6f592b5b5eca0cd61a32a4e5a7ef6e02/coverage-7.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7a56a2964a9687b6aba5b5ced6971af308ef6f79a91043c05dd4ee3ebc3e9ba", size = 212152, upload-time = "2025-07-03T10:52:53.562Z" }, + { url = "https://files.pythonhosted.org/packages/9f/66/cc13bae303284b546a030762957322bbbff1ee6b6cb8dc70a40f8a78512f/coverage-7.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:123d589f32c11d9be7fe2e66d823a236fe759b0096f5db3fb1b75b2fa414a4fa", size = 212540, upload-time = "2025-07-03T10:52:55.196Z" }, + { url = "https://files.pythonhosted.org/packages/0f/3c/d56a764b2e5a3d43257c36af4a62c379df44636817bb5f89265de4bf8bd7/coverage-7.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:333b2e0ca576a7dbd66e85ab402e35c03b0b22f525eed82681c4b866e2e2653a", size = 245097, upload-time = "2025-07-03T10:52:56.509Z" }, + { url = "https://files.pythonhosted.org/packages/b1/46/bd064ea8b3c94eb4ca5d90e34d15b806cba091ffb2b8e89a0d7066c45791/coverage-7.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:326802760da234baf9f2f85a39e4a4b5861b94f6c8d95251f699e4f73b1835dc", size = 242812, upload-time = "2025-07-03T10:52:57.842Z" }, + { url = "https://files.pythonhosted.org/packages/43/02/d91992c2b29bc7afb729463bc918ebe5f361be7f1daae93375a5759d1e28/coverage-7.9.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e7be4cfec248df38ce40968c95d3952fbffd57b400d4b9bb580f28179556d2", size = 244617, upload-time = "2025-07-03T10:52:59.239Z" }, + { url = "https://files.pythonhosted.org/packages/b7/4f/8fadff6bf56595a16d2d6e33415841b0163ac660873ed9a4e9046194f779/coverage-7.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0b4a4cb73b9f2b891c1788711408ef9707666501ba23684387277ededab1097c", size = 244263, upload-time = "2025-07-03T10:53:00.601Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d2/e0be7446a2bba11739edb9f9ba4eff30b30d8257370e237418eb44a14d11/coverage-7.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2c8937fa16c8c9fbbd9f118588756e7bcdc7e16a470766a9aef912dd3f117dbd", size = 242314, upload-time = "2025-07-03T10:53:01.932Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7d/dcbac9345000121b8b57a3094c2dfcf1ccc52d8a14a40c1d4bc89f936f80/coverage-7.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42da2280c4d30c57a9b578bafd1d4494fa6c056d4c419d9689e66d775539be74", size = 242904, upload-time = "2025-07-03T10:53:03.478Z" }, + { url = "https://files.pythonhosted.org/packages/41/58/11e8db0a0c0510cf31bbbdc8caf5d74a358b696302a45948d7c768dfd1cf/coverage-7.9.2-cp311-cp311-win32.whl", hash = "sha256:14fa8d3da147f5fdf9d298cacc18791818f3f1a9f542c8958b80c228320e90c6", size = 214553, upload-time = "2025-07-03T10:53:05.174Z" }, + { url = "https://files.pythonhosted.org/packages/3a/7d/751794ec8907a15e257136e48dc1021b1f671220ecccfd6c4eaf30802714/coverage-7.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:549cab4892fc82004f9739963163fd3aac7a7b0df430669b75b86d293d2df2a7", size = 215441, upload-time = "2025-07-03T10:53:06.472Z" }, + { url = "https://files.pythonhosted.org/packages/62/5b/34abcedf7b946c1c9e15b44f326cb5b0da852885312b30e916f674913428/coverage-7.9.2-cp311-cp311-win_arm64.whl", hash = "sha256:c2667a2b913e307f06aa4e5677f01a9746cd08e4b35e14ebcde6420a9ebb4c62", size = 213873, upload-time = "2025-07-03T10:53:07.699Z" }, + { url = "https://files.pythonhosted.org/packages/53/d7/7deefc6fd4f0f1d4c58051f4004e366afc9e7ab60217ac393f247a1de70a/coverage-7.9.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae9eb07f1cfacd9cfe8eaee6f4ff4b8a289a668c39c165cd0c8548484920ffc0", size = 212344, upload-time = "2025-07-03T10:53:09.3Z" }, + { url = "https://files.pythonhosted.org/packages/95/0c/ee03c95d32be4d519e6a02e601267769ce2e9a91fc8faa1b540e3626c680/coverage-7.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ce85551f9a1119f02adc46d3014b5ee3f765deac166acf20dbb851ceb79b6f3", size = 212580, upload-time = "2025-07-03T10:53:11.52Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9f/826fa4b544b27620086211b87a52ca67592622e1f3af9e0a62c87aea153a/coverage-7.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8f6389ac977c5fb322e0e38885fbbf901743f79d47f50db706e7644dcdcb6e1", size = 246383, upload-time = "2025-07-03T10:53:13.134Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b3/4477aafe2a546427b58b9c540665feff874f4db651f4d3cb21b308b3a6d2/coverage-7.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d9eae8cdfcd58fe7893b88993723583a6ce4dfbfd9f29e001922544f95615", size = 243400, upload-time = "2025-07-03T10:53:14.614Z" }, + { url = "https://files.pythonhosted.org/packages/f8/c2/efffa43778490c226d9d434827702f2dfbc8041d79101a795f11cbb2cf1e/coverage-7.9.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fae939811e14e53ed8a9818dad51d434a41ee09df9305663735f2e2d2d7d959b", size = 245591, upload-time = "2025-07-03T10:53:15.872Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e7/a59888e882c9a5f0192d8627a30ae57910d5d449c80229b55e7643c078c4/coverage-7.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:31991156251ec202c798501e0a42bbdf2169dcb0f137b1f5c0f4267f3fc68ef9", size = 245402, upload-time = "2025-07-03T10:53:17.124Z" }, + { url = "https://files.pythonhosted.org/packages/92/a5/72fcd653ae3d214927edc100ce67440ed8a0a1e3576b8d5e6d066ed239db/coverage-7.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d0d67963f9cbfc7c7f96d4ac74ed60ecbebd2ea6eeb51887af0f8dce205e545f", size = 243583, upload-time = "2025-07-03T10:53:18.781Z" }, + { url = "https://files.pythonhosted.org/packages/5c/f5/84e70e4df28f4a131d580d7d510aa1ffd95037293da66fd20d446090a13b/coverage-7.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:49b752a2858b10580969ec6af6f090a9a440a64a301ac1528d7ca5f7ed497f4d", size = 244815, upload-time = "2025-07-03T10:53:20.168Z" }, + { url = "https://files.pythonhosted.org/packages/39/e7/d73d7cbdbd09fdcf4642655ae843ad403d9cbda55d725721965f3580a314/coverage-7.9.2-cp312-cp312-win32.whl", hash = "sha256:88d7598b8ee130f32f8a43198ee02edd16d7f77692fa056cb779616bbea1b355", size = 214719, upload-time = "2025-07-03T10:53:21.521Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d6/7486dcc3474e2e6ad26a2af2db7e7c162ccd889c4c68fa14ea8ec189c9e9/coverage-7.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:9dfb070f830739ee49d7c83e4941cc767e503e4394fdecb3b54bfdac1d7662c0", size = 215509, upload-time = "2025-07-03T10:53:22.853Z" }, + { url = "https://files.pythonhosted.org/packages/b7/34/0439f1ae2593b0346164d907cdf96a529b40b7721a45fdcf8b03c95fcd90/coverage-7.9.2-cp312-cp312-win_arm64.whl", hash = "sha256:4e2c058aef613e79df00e86b6d42a641c877211384ce5bd07585ed7ba71ab31b", size = 213910, upload-time = "2025-07-03T10:53:24.472Z" }, + { url = "https://files.pythonhosted.org/packages/94/9d/7a8edf7acbcaa5e5c489a646226bed9591ee1c5e6a84733c0140e9ce1ae1/coverage-7.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:985abe7f242e0d7bba228ab01070fde1d6c8fa12f142e43debe9ed1dde686038", size = 212367, upload-time = "2025-07-03T10:53:25.811Z" }, + { url = "https://files.pythonhosted.org/packages/e8/9e/5cd6f130150712301f7e40fb5865c1bc27b97689ec57297e568d972eec3c/coverage-7.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c3939264a76d44fde7f213924021ed31f55ef28111a19649fec90c0f109e6d", size = 212632, upload-time = "2025-07-03T10:53:27.075Z" }, + { url = "https://files.pythonhosted.org/packages/a8/de/6287a2c2036f9fd991c61cefa8c64e57390e30c894ad3aa52fac4c1e14a8/coverage-7.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae5d563e970dbe04382f736ec214ef48103d1b875967c89d83c6e3f21706d5b3", size = 245793, upload-time = "2025-07-03T10:53:28.408Z" }, + { url = "https://files.pythonhosted.org/packages/06/cc/9b5a9961d8160e3cb0b558c71f8051fe08aa2dd4b502ee937225da564ed1/coverage-7.9.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdd612e59baed2a93c8843c9a7cb902260f181370f1d772f4842987535071d14", size = 243006, upload-time = "2025-07-03T10:53:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/49/d9/4616b787d9f597d6443f5588619c1c9f659e1f5fc9eebf63699eb6d34b78/coverage-7.9.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:256ea87cb2a1ed992bcdfc349d8042dcea1b80436f4ddf6e246d6bee4b5d73b6", size = 244990, upload-time = "2025-07-03T10:53:31.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/83/801cdc10f137b2d02b005a761661649ffa60eb173dcdaeb77f571e4dc192/coverage-7.9.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f44ae036b63c8ea432f610534a2668b0c3aee810e7037ab9d8ff6883de480f5b", size = 245157, upload-time = "2025-07-03T10:53:32.717Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a4/41911ed7e9d3ceb0ffb019e7635468df7499f5cc3edca5f7dfc078e9c5ec/coverage-7.9.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82d76ad87c932935417a19b10cfe7abb15fd3f923cfe47dbdaa74ef4e503752d", size = 243128, upload-time = "2025-07-03T10:53:34.009Z" }, + { url = "https://files.pythonhosted.org/packages/10/41/344543b71d31ac9cb00a664d5d0c9ef134a0fe87cb7d8430003b20fa0b7d/coverage-7.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:619317bb86de4193debc712b9e59d5cffd91dc1d178627ab2a77b9870deb2868", size = 244511, upload-time = "2025-07-03T10:53:35.434Z" }, + { url = "https://files.pythonhosted.org/packages/d5/81/3b68c77e4812105e2a060f6946ba9e6f898ddcdc0d2bfc8b4b152a9ae522/coverage-7.9.2-cp313-cp313-win32.whl", hash = "sha256:0a07757de9feb1dfafd16ab651e0f628fd7ce551604d1bf23e47e1ddca93f08a", size = 214765, upload-time = "2025-07-03T10:53:36.787Z" }, + { url = "https://files.pythonhosted.org/packages/06/a2/7fac400f6a346bb1a4004eb2a76fbff0e242cd48926a2ce37a22a6a1d917/coverage-7.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:115db3d1f4d3f35f5bb021e270edd85011934ff97c8797216b62f461dd69374b", size = 215536, upload-time = "2025-07-03T10:53:38.188Z" }, + { url = "https://files.pythonhosted.org/packages/08/47/2c6c215452b4f90d87017e61ea0fd9e0486bb734cb515e3de56e2c32075f/coverage-7.9.2-cp313-cp313-win_arm64.whl", hash = "sha256:48f82f889c80af8b2a7bb6e158d95a3fbec6a3453a1004d04e4f3b5945a02694", size = 213943, upload-time = "2025-07-03T10:53:39.492Z" }, + { url = "https://files.pythonhosted.org/packages/a3/46/e211e942b22d6af5e0f323faa8a9bc7c447a1cf1923b64c47523f36ed488/coverage-7.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:55a28954545f9d2f96870b40f6c3386a59ba8ed50caf2d949676dac3ecab99f5", size = 213088, upload-time = "2025-07-03T10:53:40.874Z" }, + { url = "https://files.pythonhosted.org/packages/d2/2f/762551f97e124442eccd907bf8b0de54348635b8866a73567eb4e6417acf/coverage-7.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cdef6504637731a63c133bb2e6f0f0214e2748495ec15fe42d1e219d1b133f0b", size = 213298, upload-time = "2025-07-03T10:53:42.218Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b7/76d2d132b7baf7360ed69be0bcab968f151fa31abe6d067f0384439d9edb/coverage-7.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd5ebe66c7a97273d5d2ddd4ad0ed2e706b39630ed4b53e713d360626c3dbb3", size = 256541, upload-time = "2025-07-03T10:53:43.823Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/392b219837d7ad47d8e5974ce5f8dc3deb9f99a53b3bd4d123602f960c81/coverage-7.9.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9303aed20872d7a3c9cb39c5d2b9bdbe44e3a9a1aecb52920f7e7495410dfab8", size = 252761, upload-time = "2025-07-03T10:53:45.19Z" }, + { url = "https://files.pythonhosted.org/packages/d5/77/4256d3577fe1b0daa8d3836a1ebe68eaa07dd2cbaf20cf5ab1115d6949d4/coverage-7.9.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc18ea9e417a04d1920a9a76fe9ebd2f43ca505b81994598482f938d5c315f46", size = 254917, upload-time = "2025-07-03T10:53:46.931Z" }, + { url = "https://files.pythonhosted.org/packages/53/99/fc1a008eef1805e1ddb123cf17af864743354479ea5129a8f838c433cc2c/coverage-7.9.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6406cff19880aaaadc932152242523e892faff224da29e241ce2fca329866584", size = 256147, upload-time = "2025-07-03T10:53:48.289Z" }, + { url = "https://files.pythonhosted.org/packages/92/c0/f63bf667e18b7f88c2bdb3160870e277c4874ced87e21426128d70aa741f/coverage-7.9.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d0d4f6ecdf37fcc19c88fec3e2277d5dee740fb51ffdd69b9579b8c31e4232e", size = 254261, upload-time = "2025-07-03T10:53:49.99Z" }, + { url = "https://files.pythonhosted.org/packages/8c/32/37dd1c42ce3016ff8ec9e4b607650d2e34845c0585d3518b2a93b4830c1a/coverage-7.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c33624f50cf8de418ab2b4d6ca9eda96dc45b2c4231336bac91454520e8d1fac", size = 255099, upload-time = "2025-07-03T10:53:51.354Z" }, + { url = "https://files.pythonhosted.org/packages/da/2e/af6b86f7c95441ce82f035b3affe1cd147f727bbd92f563be35e2d585683/coverage-7.9.2-cp313-cp313t-win32.whl", hash = "sha256:1df6b76e737c6a92210eebcb2390af59a141f9e9430210595251fbaf02d46926", size = 215440, upload-time = "2025-07-03T10:53:52.808Z" }, + { url = "https://files.pythonhosted.org/packages/4d/bb/8a785d91b308867f6b2e36e41c569b367c00b70c17f54b13ac29bcd2d8c8/coverage-7.9.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f5fd54310b92741ebe00d9c0d1d7b2b27463952c022da6d47c175d246a98d1bd", size = 216537, upload-time = "2025-07-03T10:53:54.273Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a0/a6bffb5e0f41a47279fd45a8f3155bf193f77990ae1c30f9c224b61cacb0/coverage-7.9.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c48c2375287108c887ee87d13b4070a381c6537d30e8487b24ec721bf2a781cb", size = 214398, upload-time = "2025-07-03T10:53:56.715Z" }, + { url = "https://files.pythonhosted.org/packages/d7/85/f8bbefac27d286386961c25515431482a425967e23d3698b75a250872924/coverage-7.9.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:8a1166db2fb62473285bcb092f586e081e92656c7dfa8e9f62b4d39d7e6b5050", size = 204013, upload-time = "2025-07-03T10:54:12.084Z" }, + { url = "https://files.pythonhosted.org/packages/3c/38/bbe2e63902847cf79036ecc75550d0698af31c91c7575352eb25190d0fb3/coverage-7.9.2-py3-none-any.whl", hash = "sha256:e425cd5b00f6fc0ed7cdbd766c70be8baab4b7839e4d4fe5fac48581dd968ea4", size = 204005, upload-time = "2025-07-03T10:54:13.491Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] name = "debugpy" -version = "1.8.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/9d/3cb6693342acf96802dba89934a5b8da43c201d764ebd1f2c0514a3d42bd/debugpy-1.8.22.tar.gz", hash = "sha256:e489c7268e1c7b41e13b438d9c533d2a7af73fb59bf8cd30fead8286c1c39c4e", size = 1710877, upload-time = "2026-09-15T21:44:02.578Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/4a/8c24c588088c622df6dacdc0110e9cc81b44781fe7a408113441e76aa955/debugpy-1.8.22-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:66e4ac3d6e7026e83e7d93d7ee2f51dd4a4e8dff673578d424e60796893e5b2c", size = 2217799, upload-time = "2026-09-15T21:44:11.57Z" }, - { url = "https://files.pythonhosted.org/packages/c7/14/1c9ff33eba51da70a8dfe2277cc13153bb3ffec79282b9acfcdbe1641d30/debugpy-1.8.22-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:192b73e8d53bbd60225220c0943627bf249ac93d0ea3090e23c45f3e0ceb6a35", size = 3074375, upload-time = "2026-09-15T21:44:13.349Z" }, - { url = "https://files.pythonhosted.org/packages/10/e8/1fa16a94af7d8b86c3ca336d7d32b78cb2c475266d0bb889732d2bc50310/debugpy-1.8.22-cp311-cp311-win32.whl", hash = "sha256:745e1800ec2961e5660c1a317c0a20e28c0fef4de36c04f17a21c33f2b37a92a", size = 5258392, upload-time = "2026-09-15T21:44:15.182Z" }, - { url = "https://files.pythonhosted.org/packages/32/1a/c086b883a4561017bfdd83c1bc70bf2b05ab6540ff767dedf207cadab938/debugpy-1.8.22-cp311-cp311-win_amd64.whl", hash = "sha256:1e76339d5510bc17e9181dba9577508afcb21aad5728f1a55ef74d7d97d255f3", size = 5277955, upload-time = "2026-09-15T21:44:16.986Z" }, - { url = "https://files.pythonhosted.org/packages/73/21/5c7f5c66eaeee57c9dadb0bbff22efddc8d99cdbd3d036c806175f1828cc/debugpy-1.8.22-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ad076f4f66cb8acb79e4384d48b1ea60a0b1957aa0b1112d4887ea3a4df60e0", size = 2499375, upload-time = "2026-09-15T21:44:18.478Z" }, - { url = "https://files.pythonhosted.org/packages/7e/ec/7389798843643ea5bc6a08480ba1b855377c70e2ed90189c0a03594e401e/debugpy-1.8.22-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:8a697acec45dbc70d17fb5d9f4f61989fc294d273c69de487fd10cb35fdd75eb", size = 4000941, upload-time = "2026-09-15T21:44:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/20/f4/64ce7a2499550929e08654360b270409eeda3e321b7c27027d9c919aa36b/debugpy-1.8.22-cp312-cp312-win32.whl", hash = "sha256:12bc7f368182b517cf26c76a2393fff65354e365fa1552b6241e66edff17997b", size = 5359040, upload-time = "2026-09-15T21:44:22.218Z" }, - { url = "https://files.pythonhosted.org/packages/4b/fe/e7d3b72874cdd327bda295d1995a01e426857ae9cbaaba74fd997bc3afbc/debugpy-1.8.22-cp312-cp312-win_amd64.whl", hash = "sha256:371a4ba4a5975eb958393903f3254cf983da7b1c7c178b3f987ee427f42515e3", size = 5398304, upload-time = "2026-09-15T21:44:24.119Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f4/fee6d40f5865aa84e1100c9df1a0f2cf8991776b61f11f433ff277df4415/debugpy-1.8.22-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:c21dd7e1ec22556bb41dc3bf6b86c603e440ec889c4acb27d7206354b2106c54", size = 2493531, upload-time = "2026-09-15T21:44:25.835Z" }, - { url = "https://files.pythonhosted.org/packages/bc/4f/8df91270afbf61fc5ab202951f28451194a7eb093704b26da11cb0ecd308/debugpy-1.8.22-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:c1ffb9953708b648ecf6acd2e5ad2c002bf68785ed618197dd4463a2a7226f39", size = 3994351, upload-time = "2026-09-15T21:44:27.31Z" }, - { url = "https://files.pythonhosted.org/packages/4f/11/2e34a4f21d6155b0c58003fd6fca9819df7d6fe7d7acd83b146b648a57ee/debugpy-1.8.22-cp313-cp313-win32.whl", hash = "sha256:ba810a66b437e3c43ca0ce0892404f010338286263ca8e5108442d76a9485337", size = 5359071, upload-time = "2026-09-15T21:44:29.064Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f5/c2b3e8260388d7b76bc4e5a3a29648a0ca47dca6a2721d6549ff2d944eee/debugpy-1.8.22-cp313-cp313-win_amd64.whl", hash = "sha256:f49b1d6cecf326b63c06d7f517e4a6642777f758c58cb799e7bc5a6dd74721c2", size = 5400362, upload-time = "2026-09-15T21:44:30.857Z" }, - { url = "https://files.pythonhosted.org/packages/ea/95/d97240bb68b86db8d0a07602be068aae9e50f17063d696a4c6f619975311/debugpy-1.8.22-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:e6744ac1850c73c2ba7b29a126cf9ab74efd1831190720e8fee17ef5389c8f5d", size = 2493148, upload-time = "2026-09-15T21:44:32.518Z" }, - { url = "https://files.pythonhosted.org/packages/70/9e/994fe1fb23dd4a5a8d059a0dc95da4b0821907200a61c2d5a4fdc21b6cf8/debugpy-1.8.22-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:0c1104233340196e5cbf5514e7dfdbb98968e730cfd7fdd6f3d72a082be838a9", size = 3961025, upload-time = "2026-09-15T21:44:34.387Z" }, - { url = "https://files.pythonhosted.org/packages/37/e0/66319918883cf6dd6dea3805210c3cafd9e65dfaa6f8b852482cff10a026/debugpy-1.8.22-cp314-cp314-win32.whl", hash = "sha256:feea785c7bbeb8cfd5b01a63f9061c899dc468c8be81671141a29305774fa294", size = 5359408, upload-time = "2026-09-15T21:44:36.128Z" }, - { url = "https://files.pythonhosted.org/packages/94/53/5b4d91f7fffb9393ac907133201d1da0c070d57e463ee8e2ec1db3cb63b6/debugpy-1.8.22-cp314-cp314-win_amd64.whl", hash = "sha256:d593a330297332ec435f3965c448b6d500e03f33675cf2063178bc76377a788e", size = 5397429, upload-time = "2026-09-15T21:44:38.429Z" }, - { url = "https://files.pythonhosted.org/packages/24/71/580df4aed96c9b23c9cbb049907d8ac1347050afdb8f450df20649d51578/debugpy-1.8.22-cp315-cp315-macosx_15_0_universal2.whl", hash = "sha256:a9eca6ab09a61534e923064400081e016f7e1d8430cc6e8b7a9cecd2f59e2b07", size = 2493380, upload-time = "2026-09-15T21:44:40.074Z" }, - { url = "https://files.pythonhosted.org/packages/b0/10/a323945b0966e560c40fe48470d2847bfc7692a8f550d7086e9a28f5b623/debugpy-1.8.22-cp315-cp315-manylinux_2_34_x86_64.whl", hash = "sha256:b7dbde1fb822d100802d505b2aed6d0813b1a0a2015d495cb8798b2215d5d1e5", size = 3975456, upload-time = "2026-09-15T21:44:41.623Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f9/4383635281999c3eaa44bf327de523ba42240b35eb87c1130adac4a829c6/debugpy-1.8.22-cp315-cp315-win32.whl", hash = "sha256:225d063f81708c2546999e7edfac0198b2d5c2f144797dc64858f867948633e0", size = 5359469, upload-time = "2026-09-15T21:44:43.234Z" }, - { url = "https://files.pythonhosted.org/packages/7b/14/4fe9f46a9c825c8cbc6dc4aebc2a885b0bceb37ce2a37699c170482e7a40/debugpy-1.8.22-cp315-cp315-win_amd64.whl", hash = "sha256:b17a4896520f1c6da09ce76ec8215df0b85b0b6f3617526a4c65c2315340875a", size = 5397869, upload-time = "2026-09-15T21:44:44.783Z" }, - { url = "https://files.pythonhosted.org/packages/56/3d/c7dc9f35bc9e22cdb53679f844bee40fd5cff871862f60595869a433400d/debugpy-1.8.22-py2.py3-none-any.whl", hash = "sha256:a9e9d3550e15ca479c59333e90845029190531f0cacfedab3b815a57bd913947", size = 5374857, upload-time = "2026-09-15T21:44:54.454Z" }, +version = "1.8.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/3a9a28ddb750a76eaec445c7f4d3147ea2c579a97dbd9e25d39001b92b21/debugpy-1.8.15.tar.gz", hash = "sha256:58d7a20b7773ab5ee6bdfb2e6cf622fdf1e40c9d5aef2857d85391526719ac00", size = 1643279, upload-time = "2025-07-15T16:43:29.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/b3/1c44a2ed311199ab11c2299c9474a6c7cd80d19278defd333aeb7c287995/debugpy-1.8.15-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:babc4fb1962dd6a37e94d611280e3d0d11a1f5e6c72ac9b3d87a08212c4b6dd3", size = 2183442, upload-time = "2025-07-15T16:43:36.733Z" }, + { url = "https://files.pythonhosted.org/packages/f6/69/e2dcb721491e1c294d348681227c9b44fb95218f379aa88e12a19d85528d/debugpy-1.8.15-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f778e68f2986a58479d0ac4f643e0b8c82fdd97c2e200d4d61e7c2d13838eb53", size = 3134215, upload-time = "2025-07-15T16:43:38.116Z" }, + { url = "https://files.pythonhosted.org/packages/17/76/4ce63b95d8294dcf2fd1820860b300a420d077df4e93afcaa25a984c2ca7/debugpy-1.8.15-cp311-cp311-win32.whl", hash = "sha256:f9d1b5abd75cd965e2deabb1a06b0e93a1546f31f9f621d2705e78104377c702", size = 5154037, upload-time = "2025-07-15T16:43:39.471Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/e5a7c784465eb9c976d84408873d597dc7ce74a0fc69ed009548a1a94813/debugpy-1.8.15-cp311-cp311-win_amd64.whl", hash = "sha256:62954fb904bec463e2b5a415777f6d1926c97febb08ef1694da0e5d1463c5c3b", size = 5178133, upload-time = "2025-07-15T16:43:40.969Z" }, + { url = "https://files.pythonhosted.org/packages/ab/4a/4508d256e52897f5cdfee6a6d7580974811e911c6d01321df3264508a5ac/debugpy-1.8.15-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:3dcc7225cb317469721ab5136cda9ff9c8b6e6fb43e87c9e15d5b108b99d01ba", size = 2511197, upload-time = "2025-07-15T16:43:42.343Z" }, + { url = "https://files.pythonhosted.org/packages/99/8d/7f6ef1097e7fecf26b4ef72338d08e41644a41b7ee958a19f494ffcffc29/debugpy-1.8.15-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:047a493ca93c85ccede1dbbaf4e66816794bdc214213dde41a9a61e42d27f8fc", size = 4229517, upload-time = "2025-07-15T16:43:44.14Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e8/e8c6a9aa33a9c9c6dacbf31747384f6ed2adde4de2e9693c766bdf323aa3/debugpy-1.8.15-cp312-cp312-win32.whl", hash = "sha256:b08e9b0bc260cf324c890626961dad4ffd973f7568fbf57feb3c3a65ab6b6327", size = 5276132, upload-time = "2025-07-15T16:43:45.529Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ad/231050c6177b3476b85fcea01e565dac83607b5233d003ff067e2ee44d8f/debugpy-1.8.15-cp312-cp312-win_amd64.whl", hash = "sha256:e2a4fe357c92334272eb2845fcfcdbec3ef9f22c16cf613c388ac0887aed15fa", size = 5317645, upload-time = "2025-07-15T16:43:46.968Z" }, + { url = "https://files.pythonhosted.org/packages/28/70/2928aad2310726d5920b18ed9f54b9f06df5aa4c10cf9b45fa18ff0ab7e8/debugpy-1.8.15-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:f5e01291ad7d6649aed5773256c5bba7a1a556196300232de1474c3c372592bf", size = 2495538, upload-time = "2025-07-15T16:43:48.927Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c6/9b8ffb4ca91fac8b2877eef63c9cc0e87dd2570b1120054c272815ec4cd0/debugpy-1.8.15-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94dc0f0d00e528d915e0ce1c78e771475b2335b376c49afcc7382ee0b146bab6", size = 4221874, upload-time = "2025-07-15T16:43:50.282Z" }, + { url = "https://files.pythonhosted.org/packages/55/8a/9b8d59674b4bf489318c7c46a1aab58e606e583651438084b7e029bf3c43/debugpy-1.8.15-cp313-cp313-win32.whl", hash = "sha256:fcf0748d4f6e25f89dc5e013d1129ca6f26ad4da405e0723a4f704583896a709", size = 5275949, upload-time = "2025-07-15T16:43:52.079Z" }, + { url = "https://files.pythonhosted.org/packages/72/83/9e58e6fdfa8710a5e6ec06c2401241b9ad48b71c0a7eb99570a1f1edb1d3/debugpy-1.8.15-cp313-cp313-win_amd64.whl", hash = "sha256:73c943776cb83e36baf95e8f7f8da765896fd94b05991e7bc162456d25500683", size = 5317720, upload-time = "2025-07-15T16:43:53.703Z" }, + { url = "https://files.pythonhosted.org/packages/07/d5/98748d9860e767a1248b5e31ffa7ce8cb7006e97bf8abbf3d891d0a8ba4e/debugpy-1.8.15-py2.py3-none-any.whl", hash = "sha256:bce2e6c5ff4f2e00b98d45e7e01a49c7b489ff6df5f12d881c67d2f1ac635f3d", size = 5282697, upload-time = "2025-07-15T16:44:07.996Z" }, ] [[package]] name = "decorator" -version = "5.3.1" +version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, ] [[package]] @@ -847,61 +578,61 @@ wheels = [ [[package]] name = "dill" -version = "0.4.1" +version = "0.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, + { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, ] [[package]] name = "executing" -version = "2.3.0" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/92/8a611141e42930c0f194f7504063ab87dfe970cf1a5af28e7703df448734/executing-2.3.0.tar.gz", hash = "sha256:15919cb5d667e5cb4e099511971d00d659573fff2dd5c4e6cd8b71636c7858d2", size = 1338003, upload-time = "2026-10-10T14:06:04.64Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/dd/8bc67e7d5ffc1d88aa5af511189dfb76dc4e1e5b808fab186146ef2663e5/executing-2.3.0-py3-none-any.whl", hash = "sha256:736e859c9f8701f11fcf516856f26f562e04776387824b43a35a1dfe21c84122", size = 29393, upload-time = "2026-10-10T14:06:02.777Z" }, + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, ] [[package]] name = "fastjsonschema" -version = "2.22.2" +version = "2.21.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/33/a4/9473c7c3b87009d9c1d74034e4a0f6a35ff0d42dd0f9866d0c3ec4e9217b/fastjsonschema-2.22.2.tar.gz", hash = "sha256:72064e12356a7d6ef02165be2946b9abadbdf238536e07eb587e3dbaa33099cf", size = 385171, upload-time = "2026-08-15T19:47:08.853Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939, upload-time = "2024-12-02T10:55:15.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/82/2755c7c982086f00d4dab85bc120ec35045a9fc2191893a6ce79afe94443/fastjsonschema-2.22.2-py3-none-any.whl", hash = "sha256:0fb3915616adac85ccfdd737d26be1089845d2019819505b42d39888458f74d4", size = 27413, upload-time = "2026-08-15T19:47:04.406Z" }, + { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924, upload-time = "2024-12-02T10:55:07.599Z" }, ] [[package]] name = "filelock" -version = "4.2.4" +version = "3.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/28/3893324bcadf8f89b1616637468d766af3f625008c0735bf704fdfa86617/filelock-4.2.4.tar.gz", hash = "sha256:c6d8663535e1650ee430507b4ffbac7b464dd64b7647ea0112a9f406499d163d", size = 652444, upload-time = "2026-10-19T01:57:51.001Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload-time = "2025-03-14T07:11:40.47Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/1b/5e74289a1878e666bb4b65fe5805a04cafcac2aa5f519ef1ead67ef91c56/filelock-4.2.4-py3-none-any.whl", hash = "sha256:301241438c57936ef93f4243a94f2559022268bfcf9b375a9a72eb0f8db8358e", size = 162475, upload-time = "2026-10-19T01:57:49.419Z" }, + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" }, ] [[package]] name = "flake8" -version = "7.4.1" +version = "7.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mccabe" }, { name = "pycodestyle" }, { name = "pyflakes" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c2/94/85870fc02dfe4ab0885c440e7e41f6a986b10e43eca6717e90f8ce1215cc/flake8-7.4.1.tar.gz", hash = "sha256:84ea5afcaf344487b0ea5baaebb8100f4cfaebc01f755998f75876664029f587", size = 47897, upload-time = "2026-09-23T12:21:59.283Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9b/af/fbfe3c4b5a657d79e5c47a2827a362f9e1b763336a52f926126aa6dc7123/flake8-7.3.0.tar.gz", hash = "sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872", size = 48326, upload-time = "2025-06-20T19:31:35.838Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/d4/8e58a7221419bf8cb194f362ab26abf504c983135975e4c785fac0852886/flake8-7.4.1-py2.py3-none-any.whl", hash = "sha256:78480274a6d7289d9cb8eafeda241fac57d4ea687d26e32dfdca37b72cdeddad", size = 57449, upload-time = "2026-09-23T12:21:58.085Z" }, + { url = "https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e", size = 57922, upload-time = "2025-06-20T19:31:34.425Z" }, ] [[package]] name = "fqdn" -version = "1.6.0" +version = "1.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/02/01/248d44fbda9e78fa1a7b5a475194bef4c4a3e285db286419f3bb42f2efdf/fqdn-1.6.0.tar.gz", hash = "sha256:e39bf62e2a9481aa2cb780554fdfd944dd8ee5f230eb831684d539cbafed8de2", size = 130737, upload-time = "2026-09-28T05:43:35.482Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015, upload-time = "2021-03-11T07:16:29.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/d5/a8f9149b97cced9e1f4bff92ff0b6206120e2c853ae774d7020d6ecd8fa8/fqdn-1.6.0-py3-none-any.whl", hash = "sha256:6c793c312ccfa29981e1135b3ef5e1277ebe639731a6b0f7350d90e96e63f0b4", size = 12569, upload-time = "2026-09-28T05:43:33.951Z" }, + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, ] [[package]] @@ -943,20 +674,20 @@ wheels = [ [[package]] name = "idna" -version = "3.20" +version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, ] [[package]] name = "iniconfig" -version = "2.3.1" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/e1/2069291243c926a2ff1cd706c7f3eeb9b62144bf60f77c9fb9ff2fb26bd3/iniconfig-2.3.1.tar.gz", hash = "sha256:67f4b9c50da0dedf52af349e7749a80a9057a5031199791b906c3bb3ae878960", size = 21209, upload-time = "2026-10-06T22:48:38.076Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/43/4ca9e49d27a1fcf6bece6f6aec0ea46bb9112489b93d4b688fb415457bdb/iniconfig-2.3.1-py3-none-any.whl", hash = "sha256:9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7", size = 7552, upload-time = "2026-10-06T22:48:36.959Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, ] [[package]] @@ -974,7 +705,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "7.4.0" +version = "6.30.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -984,20 +715,21 @@ dependencies = [ { name = "jupyter-client" }, { name = "jupyter-core" }, { name = "matplotlib-inline" }, - { name = "nest-asyncio2" }, + { name = "nest-asyncio" }, { name = "packaging" }, + { name = "psutil" }, { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/05/e5499c8b762387d83926bf0389e8fff888c9bf6e7af30566a8527bc12f4a/ipykernel-7.4.0.tar.gz", hash = "sha256:4330114d22b9b33575b2c7c68753fc8faabbbcfbc60b0cdff9f14dd4ce63742f", size = 192731, upload-time = "2026-09-29T16:33:11.468Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/27/9e6e30ed92f2ac53d29f70b09da8b2dc456e256148e289678fa0e825f46a/ipykernel-6.30.0.tar.gz", hash = "sha256:b7b808ddb2d261aae2df3a26ff3ff810046e6de3dfbc6f7de8c98ea0a6cb632c", size = 165125, upload-time = "2025-07-21T10:36:09.259Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/f8/8b5c10c7f36ab5a3b5c4703669e5b14e44e98782b58e535dd30670e8799a/ipykernel-7.4.0-py3-none-any.whl", hash = "sha256:a6757f790ddc5a6006b813d82da1a9dbb65b3a00f2b6607df776418c6566ec1c", size = 123184, upload-time = "2026-09-29T16:33:09.612Z" }, + { url = "https://files.pythonhosted.org/packages/1f/3d/00813c3d9b46e3dcd88bd4530e0a3c63c0509e5d8c9eff34723ea243ab04/ipykernel-6.30.0-py3-none-any.whl", hash = "sha256:fd2936e55c4a1c2ee8b1e5fa6a372b8eecc0ab1338750dee76f48fa5cca1301e", size = 117264, upload-time = "2025-07-21T10:36:06.854Z" }, ] [[package]] name = "ipython" -version = "8.39.0" +version = "8.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1011,14 +743,14 @@ dependencies = [ { name = "traitlets" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849, upload-time = "2026-03-27T10:02:07.846Z" }, + { url = "https://files.pythonhosted.org/packages/91/d0/274fbf7b0b12643cbbc001ce13e6a5b1607ac4929d1b11c72460152c9fc3/ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2", size = 831864, upload-time = "2025-05-31T16:39:06.38Z" }, ] [[package]] name = "ipywidgets" -version = "8.1.9" +version = "8.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "comm" }, @@ -1027,9 +759,9 @@ dependencies = [ { name = "traitlets" }, { name = "widgetsnbextension" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/7c/6db60eddf38547353b06d57941f5eee22a990640ce30479fd71a810507f2/ipywidgets-8.1.9.tar.gz", hash = "sha256:bcccba38a6ec3253f7a39c943cea5b9ad01999ce071396171adbc51c6a6a8613", size = 117252, upload-time = "2026-08-18T08:54:24.123Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721, upload-time = "2025-05-05T12:42:03.489Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/55/298e9b3b864a198234997e87a1471c1b17d7f3546ace6d18fb5cf1ce24b2/ipywidgets-8.1.9-py3-none-any.whl", hash = "sha256:f2b8cbcaae10252b809fbe4d7470db75c09b769a32cbf816d20e5ca6d3c5a79d", size = 140101, upload-time = "2026-08-18T08:54:22.339Z" }, + { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806, upload-time = "2025-05-05T12:41:56.833Z" }, ] [[package]] @@ -1046,11 +778,11 @@ wheels = [ [[package]] name = "isort" -version = "6.1.0" +version = "6.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/82/fa43935523efdfcce6abbae9da7f372b627b27142c3419fcf13bf5b0c397/isort-6.1.0.tar.gz", hash = "sha256:9b8f96a14cfee0677e78e941ff62f03769a06d412aabb9e2a90487b3b7e8d481", size = 824325, upload-time = "2025-10-01T16:26:45.027Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b8/21/1e2a441f74a653a144224d7d21afe8f4169e6c7c20bb13aec3a2dc3815e0/isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450", size = 821955, upload-time = "2025-02-26T21:13:16.955Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/cc/9b681a170efab4868a032631dea1e8446d8ec718a7f657b94d49d1a12643/isort-6.1.0-py3-none-any.whl", hash = "sha256:58d8927ecce74e5087aef019f778d4081a3b6c98f15a80ba35782ca8a2097784", size = 94329, upload-time = "2025-10-01T16:26:43.291Z" }, + { url = "https://files.pythonhosted.org/packages/c1/11/114d0a5f4dabbdcedc1125dee0888514c3c3b16d3e9facad87ed96fad97c/isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615", size = 94186, upload-time = "2025-02-26T21:13:14.911Z" }, ] [[package]] @@ -1091,25 +823,25 @@ wheels = [ [[package]] name = "json5" -version = "0.17.3" +version = "0.12.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/1f/58a4d7ee466f81bc3c7337036380fc6d49de3afb7855d74f8121b1e89b32/json5-0.17.3.tar.gz", hash = "sha256:8d0278ad34ebaa9c3af76d9519274811830224a2d1cd5af156dbd067f461b8a4", size = 54234, upload-time = "2026-10-09T21:19:28.335Z" } +sdist = { url = "https://files.pythonhosted.org/packages/12/be/c6c745ec4c4539b25a278b70e29793f10382947df0d9efba2fa09120895d/json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a", size = 51907, upload-time = "2025-04-03T16:33:13.201Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/39/e689b616c4279a821d5842a8a85c1874540f8d58e35028df93f2182120c2/json5-0.17.3-py3-none-any.whl", hash = "sha256:2c8b22a893c35cd6a3c5ccbf1dd1c7d02c25dc1b5897fea658f9bf08c2e05f9a", size = 34809, upload-time = "2026-10-09T21:19:27.357Z" }, + { url = "https://files.pythonhosted.org/packages/41/9f/3500910d5a98549e3098807493851eeef2b89cdd3032227558a104dfe926/json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db", size = 36079, upload-time = "2025-04-03T16:33:11.927Z" }, ] [[package]] name = "jsonpointer" -version = "3.5" +version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/b8/fe0d28b5a2f14e501a9fd300c49273a05c78920a1925c36c487d539035bc/jsonpointer-3.5.tar.gz", hash = "sha256:81f28618a019cf1b011a6cf757439737972de1ccbeca2e1f86dfb4d661800792", size = 13562, upload-time = "2026-10-24T20:42:20.296Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/cc/8800c20eed936746b32ab438a0fbfc8f3bc18278e32f96caf4d5d6686d4c/jsonpointer-3.5-py3-none-any.whl", hash = "sha256:8728c42f6bc07b1436af31600267bdbb1495ac5a61f31d9583ff319ecf7da09c", size = 9121, upload-time = "2026-10-24T20:42:18.941Z" }, + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, ] [[package]] name = "jsonschema" -version = "4.26.0" +version = "4.25.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -1117,9 +849,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/00/a297a868e9d0784450faa7365c2172a7d6110c763e30ba861867c32ae6a9/jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f", size = 356830, upload-time = "2025-07-18T15:39:45.11Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/c86cd8e011fe98803d7e382fd67c0df5ceab8d2b7ad8c5a81524f791551c/jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716", size = 89184, upload-time = "2025-07-18T15:39:42.956Z" }, ] [package.optional-dependencies] @@ -1137,14 +869,14 @@ format-nongpl = [ [[package]] name = "jsonschema-specifications" -version = "2025.9.1" +version = "2025.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, ] [[package]] @@ -1164,22 +896,9 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657, upload-time = "2024-08-30T07:15:47.045Z" }, ] -[[package]] -name = "jupyter-builder" -version = "1.2.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-core" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/75/3e/56f593e6a664cd14d441724654ce8243f3cac7d3e45867cf084749c8bc75/jupyter_builder-1.2.3.tar.gz", hash = "sha256:01aba6794eb9b19e0e29ae21137ca60ba4135c70347d4b9f664a586822b8c809", size = 1024218, upload-time = "2026-09-04T18:54:09.411Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/84/aa/be79e87c50698673f196d0633fc1664607da2289f9688d1de7a1c9db9e71/jupyter_builder-1.2.3-py3-none-any.whl", hash = "sha256:c5ea5a7190c2a7b082494abade98eece1b2b5bd5dbd7d610606cbcd10a1d08b3", size = 947541, upload-time = "2026-09-04T18:54:07.644Z" }, -] - [[package]] name = "jupyter-client" -version = "8.10.0" +version = "8.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-core" }, @@ -1187,11 +906,10 @@ dependencies = [ { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, - { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/2a/906772148a06e48885039e0250c340b770a55bbf37b08d6ee0449df369c3/jupyter_client-8.10.0.tar.gz", hash = "sha256:9f7116294dca55f1785be880057d44544db9b1567718d92cb33c58886afb9497", size = 360653, upload-time = "2026-08-28T12:17:10.854Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/88/7c548de1f6c2ade7c931a3282da73f9274fa6a1531091be682f89c85efb9/jupyter_client-8.10.0-py3-none-any.whl", hash = "sha256:5f73f24f22fa25192cfff6b23c051932a2473a797b05734aff495b392103e14e", size = 110184, upload-time = "2026-08-28T12:17:09.028Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, ] [[package]] @@ -1215,20 +933,21 @@ wheels = [ [[package]] name = "jupyter-core" -version = "5.9.1" +version = "5.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, ] [[package]] name = "jupyter-events" -version = "0.12.1" +version = "0.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema", extra = ["format-nongpl"] }, @@ -1240,26 +959,26 @@ dependencies = [ { name = "rfc3986-validator" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/f8/475c4241b2b75af0deaae453ed003c6c851766dbc44d332d8baf245dc931/jupyter_events-0.12.1.tar.gz", hash = "sha256:faff25f77218335752f35f23c5fe6e4a392a7bd99a5939ccb9b8fbf594636cf3", size = 62854, upload-time = "2026-04-20T23:17:50.66Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196, upload-time = "2025-02-03T17:23:41.485Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/6c/6fcde0c8f616ed360ffd3587f7db9e225a7e62b583a04494d2f069cf64ea/jupyter_events-0.12.1-py3-none-any.whl", hash = "sha256:c366585253f537a627da52fa7ca7410c5b5301fe893f511e7b077c2d93ec8bcf", size = 19512, upload-time = "2026-04-20T23:17:48.927Z" }, + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430, upload-time = "2025-02-03T17:23:38.643Z" }, ] [[package]] name = "jupyter-lsp" -version = "2.3.1" +version = "2.2.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/36/ff/1e4a61f5170a9a1d978f3ac3872449de6c01fc71eaf89657824c878b1549/jupyter_lsp-2.3.1.tar.gz", hash = "sha256:fdf8a4aa7d85813976d6e29e95e6a2c8f752701f926f2715305249a3829805a6", size = 55677, upload-time = "2026-04-02T08:10:06.749Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/3d/40bdb41b665d3302390ed1356cebd5917c10769d1f190ee4ca595900840e/jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361", size = 48948, upload-time = "2025-07-18T21:35:19.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/23/e8/9d61dcbd1dce8ef418f06befd4ac084b4720429c26b0b1222bc218685eff/jupyter_lsp-2.3.1-py3-none-any.whl", hash = "sha256:71b954d834e85ff3096400554f2eefaf7fe37053036f9a782b0f7c5e42dadb81", size = 77513, upload-time = "2026-04-02T08:10:01.753Z" }, + { url = "https://files.pythonhosted.org/packages/47/7c/12f68daf85b469b4896d5e4a629baa33c806d61de75ac5b39d8ef27ec4a2/jupyter_lsp-2.2.6-py3-none-any.whl", hash = "sha256:283783752bf0b459ee7fa88effa72104d87dd343b82d5c06cf113ef755b15b6d", size = 69371, upload-time = "2025-07-18T21:35:16.585Z" }, ] [[package]] name = "jupyter-server" -version = "2.21.1" +version = "2.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -1271,7 +990,7 @@ dependencies = [ { name = "jupyter-server-terminals" }, { name = "nbconvert" }, { name = "nbformat" }, - { name = "overrides", marker = "python_full_version < '3.12'" }, + { name = "overrides" }, { name = "packaging" }, { name = "prometheus-client" }, { name = "pywinpty", marker = "os_name == 'nt'" }, @@ -1282,47 +1001,46 @@ dependencies = [ { name = "traitlets" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/3d/3c9f8bce5d5448107bd285cd80185e76c9c871d076b580dfd90997e52904/jupyter_server-2.21.1.tar.gz", hash = "sha256:a8960aa29263f6041283e97d4756b099fb49b767baab6371891ecb1bd40a63df", size = 761651, upload-time = "2026-09-15T16:00:07.853Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/c8/ba2bbcd758c47f1124c4ca14061e8ce60d9c6fd537faee9534a95f83521a/jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6", size = 728177, upload-time = "2025-05-12T16:44:46.245Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/39/91bc08650cc8e3efeb7a83c25e20ebddcc9b70d28b4eb6f51a4fb55da7a4/jupyter_server-2.21.1-py3-none-any.whl", hash = "sha256:2a6467606af7dbae2e7e31640030025969e15db6a649eae334af90415dc71dca", size = 394641, upload-time = "2026-09-15T16:00:05.526Z" }, + { url = "https://files.pythonhosted.org/packages/46/1f/5ebbced977171d09a7b0c08a285ff9a20aafb9c51bde07e52349ff1ddd71/jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", size = 386904, upload-time = "2025-05-12T16:44:43.335Z" }, ] [[package]] name = "jupyter-server-terminals" -version = "0.5.4" +version = "0.5.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pywinpty", marker = "os_name == 'nt'" }, { name = "terminado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/a7/bcd0a9b0cbba88986fe944aaaf91bfda603e5a50bda8ed15123f381a3b2f/jupyter_server_terminals-0.5.4.tar.gz", hash = "sha256:bbda128ed41d0be9020349f9f1f2a4ab9952a73ed5f5ac9f1419794761fb87f5", size = 31770, upload-time = "2026-01-14T16:53:20.213Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430, upload-time = "2024-03-12T14:37:03.049Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/2d/6674563f71c6320841fc300911a55143925112a72a883e2ca71fba4c618d/jupyter_server_terminals-0.5.4-py3-none-any.whl", hash = "sha256:55be353fc74a80bc7f3b20e6be50a55a61cd525626f578dcb66a5708e2007d14", size = 13704, upload-time = "2026-01-14T16:53:18.738Z" }, + { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656, upload-time = "2024-03-12T14:37:00.708Z" }, ] [[package]] name = "jupyterlab" -version = "4.6.4" +version = "4.4.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, { name = "httpx" }, { name = "ipykernel" }, { name = "jinja2" }, - { name = "jupyter-builder" }, { name = "jupyter-core" }, { name = "jupyter-lsp" }, { name = "jupyter-server" }, { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "packaging" }, + { name = "setuptools" }, { name = "tornado" }, { name = "traitlets" }, - { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/8d/995cc142f6083346b35e7d3eadc5a6717ee89ce64ea53577010ac493bc3c/jupyterlab-4.6.4.tar.gz", hash = "sha256:404f49b081819378524886c9db66dba57a5565981eff885830df1baba3a17df5", size = 28335647, upload-time = "2026-09-21T15:25:18.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/89/695805a6564bafe08ef2505f3c473ae7140b8ba431d381436f11bdc2c266/jupyterlab-4.4.5.tar.gz", hash = "sha256:0bd6c18e6a3c3d91388af6540afa3d0bb0b2e76287a7b88ddf20ab41b336e595", size = 23037079, upload-time = "2025-07-20T09:21:30.151Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/e4/072bc0d3c6d45d414062a06af7ee81c02a2c12d769c358ec9919f9995ffd/jupyterlab-4.6.4-py3-none-any.whl", hash = "sha256:15b13f991d3985129c797eb84d9949eeb8b6615e14b444868e642411f2c418b2", size = 17171596, upload-time = "2026-09-21T15:25:14.123Z" }, + { url = "https://files.pythonhosted.org/packages/47/74/e144ce85b34414e44b14c1f6bf2e3bfe17964c8e5670ebdc7629f2e53672/jupyterlab-4.4.5-py3-none-any.whl", hash = "sha256:e76244cceb2d1fb4a99341f3edc866f2a13a9e14c50368d730d75d8017be0863", size = 12267763, upload-time = "2025-07-20T09:21:26.37Z" }, ] [[package]] @@ -1336,7 +1054,7 @@ wheels = [ [[package]] name = "jupyterlab-server" -version = "2.28.1" +version = "2.27.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, @@ -1347,179 +1065,99 @@ dependencies = [ { name = "packaging" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/16/c5/08946a10b81bd64408d8b78cb352e17fe52d3ee11c2aef00a0f06e506938/jupyterlab_server-2.28.1.tar.gz", hash = "sha256:0c3c2418d51021ce280916e63dfe4cba8386b4e2787be5c25433c98f560ddb31", size = 78141, upload-time = "2026-09-15T19:22:09.935Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173, upload-time = "2024-07-16T17:02:04.149Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/23/d3/996332fe24f3c2458b9c353b998570dfa2631763e9a8674ba3f94c0877d0/jupyterlab_server-2.28.1-py3-none-any.whl", hash = "sha256:4bd36c7c11d872e15cefa4951e12380a47e6901687165332dd50a007cb367ad9", size = 60197, upload-time = "2026-09-15T19:22:08.201Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700, upload-time = "2024-07-16T17:02:01.115Z" }, ] [[package]] name = "jupyterlab-widgets" -version = "3.0.17" +version = "3.0.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/8b/e739cf9066ad5037a2d4b0a403f06da374fdccb9748221661c8b492d3dbc/jupyterlab_widgets-3.0.17.tar.gz", hash = "sha256:6e61fe21ca8a66039180a5cc52a433e07279d2fee79c8be963e00d55193f17a8", size = 213919, upload-time = "2026-08-18T08:52:17.511Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149, upload-time = "2025-05-05T12:32:31.004Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/ef/6d27fc118f58cb24886da413545a7efb0853d405fddbfd8b2d9ac09fbed4/jupyterlab_widgets-3.0.17-py3-none-any.whl", hash = "sha256:40ac1e9955acf116c4d995d9bfa082d86ad9ec6d91c4f134827cf5e0a5eb75e0", size = 217292, upload-time = "2026-08-18T08:52:15.47Z" }, + { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571, upload-time = "2025-05-05T12:32:29.534Z" }, ] [[package]] name = "lark" -version = "1.3.1" +version = "1.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, + { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, ] [[package]] name = "markdown-it-py" -version = "4.2.0" +version = "3.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, ] [[package]] name = "markupsafe" -version = "3.0.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/38/9b/e422a865e1d5d57d0e509b4e0bf1c1a70a7f6382c29a5aa428df994c8bc8/markupsafe-3.0.4.tar.gz", hash = "sha256:2e9ad7dd851bf45fab9f75cbff4cb493fee9979e8d8c7c9c3ee119022518edd6", size = 153777, upload-time = "2026-10-02T23:07:22.29Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/55/18dbb4778b30ada5ce071608503cc3edc9e14e13d868c17a6d178fc30f7a/markupsafe-3.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e25feb9e330b63edb0278a0acdf85e50d0cb0fbf49c3084abbe4e24ae195346", size = 11520, upload-time = "2026-10-02T23:04:36.299Z" }, - { url = "https://files.pythonhosted.org/packages/6c/14/0b05f79b4733e264a18d08fe08fa1df7347630ff32a6cb82180d9dccec55/markupsafe-3.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3391b2188d18737cb2fa147028b1096236eaa7e156446c650a489fa2cadc91", size = 12063, upload-time = "2026-10-02T23:04:37.291Z" }, - { url = "https://files.pythonhosted.org/packages/ca/3a/63ba10b6c1463216b3e4df669a9f0e5a3b0c3071557d2e8229e3968c79fb/markupsafe-3.0.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:849dd2bb0e5e4ab2b71c7191726a4a8d5aa8a610daa584728cbee0b710ddc4ef", size = 24321, upload-time = "2026-10-02T23:04:38.262Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2e/5f015261b76ad633d187ef6f388b413aedd64a8773c4df59e530a0be5525/markupsafe-3.0.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:befb4158af32106b9a93db8d6d1d1cbbd418c0d5aca0cabb7b1780abf0c89169", size = 28845, upload-time = "2026-10-02T23:04:39.295Z" }, - { url = "https://files.pythonhosted.org/packages/33/cf/26e594b26be40c2f1fec63ccf8a8b99d0335a5b2cbe84835c7d82a994375/markupsafe-3.0.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:71f88e749ea29f67f21f3b36433c1dc54c7729ed2a6d9e2da2e0d9e0d7b224eb", size = 24701, upload-time = "2026-10-02T23:04:40.348Z" }, - { url = "https://files.pythonhosted.org/packages/81/a5/a513b76c139a3915b43404324e55c0b7979ae4f0d39eb6f075b0282e90a8/markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6da83a088f8ef93b2d483a8232a4dbf4d69d3d8496b568a03c56becac43e1808", size = 22961, upload-time = "2026-10-02T23:04:41.372Z" }, - { url = "https://files.pythonhosted.org/packages/46/cf/4c66192c100b4542bcbe392ae06696b670f66927be3ac38a213234778ff9/markupsafe-3.0.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8f0fac8b13d14bb06c68195f849371924ae53dd7b1c00fed24650f704383b692", size = 21920, upload-time = "2026-10-02T23:04:42.429Z" }, - { url = "https://files.pythonhosted.org/packages/cb/17/ac3662678bfbad649893117ada2ba44dc30bf56884e84f13154a792b10f1/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4a7cdc2a420ca01058182da4253329764d4bfa055564d1eced90e6ba1e8b1d3d", size = 23726, upload-time = "2026-10-02T23:04:43.531Z" }, - { url = "https://files.pythonhosted.org/packages/f7/af/fe47cee339180a69ebca3c57fb3483d0f5cbd1e8337d1871fb1d9c1aebee/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:83b3944fea42a8400edf92fd1770fb8d0d4f7de651353bd2d8525a92dba69a21", size = 22539, upload-time = "2026-10-02T23:04:44.618Z" }, - { url = "https://files.pythonhosted.org/packages/12/32/d55440ba140442800e02d799c9cb5ab597bf6ebdb1177b5ea39a11f797bd/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8138eb83940ec7299024d92d4dee45f601b9e6c5ffde9d25f4e35e326203c707", size = 23963, upload-time = "2026-10-02T23:04:45.656Z" }, - { url = "https://files.pythonhosted.org/packages/50/9d/9c86042cb364c2ad4c971e6d1247929effd25f714cd7ee11b05e6316445b/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:811d02d5122171c1941357efd8f9bf4ffe907b7f0a1a4e729a880e4be3f46e3e", size = 21506, upload-time = "2026-10-02T23:04:46.671Z" }, - { url = "https://files.pythonhosted.org/packages/75/ef/5b824f03ba40c3b3652b6272d083d2fc4fcdd440de519a3a39ba2c3e7262/markupsafe-3.0.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:50b5bedc9ed8a94fc8857a42ef4f84a81ea88f8d4f05dc8705fb23ee6d8dcca7", size = 22955, upload-time = "2026-10-02T23:04:47.698Z" }, - { url = "https://files.pythonhosted.org/packages/1e/e8/44cfcb5ea40e5e43cec7793ef90704ed0c475280839076c4345757eb8e59/markupsafe-3.0.4-cp311-cp311-win32.whl", hash = "sha256:2e5a7cd7fdd14fcb1ae5d7d8bf23d24fbd1daefd1fbca2580132e1ea75f098b5", size = 14094, upload-time = "2026-10-02T23:04:48.788Z" }, - { url = "https://files.pythonhosted.org/packages/91/89/f2b509f7bf79352e40117824c1070dbeafd4df67031d3fa98165a3134228/markupsafe-3.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:fdb4ca07ab75ffadab4a8b135ad59cdbb3156b99310f3d565370da74a15d6bd3", size = 14328, upload-time = "2026-10-02T23:04:49.801Z" }, - { url = "https://files.pythonhosted.org/packages/2b/5a/ccf22672a0f64dc682306e288f0dabcb06c7a201f3bb6e6cbf86d9e8ad03/markupsafe-3.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:569d65055d367e3dcdf30c3f41119467b73d9ee9faf332bdf40402644f5ac08e", size = 14188, upload-time = "2026-10-02T23:04:50.847Z" }, - { url = "https://files.pythonhosted.org/packages/81/09/4c59d56b8461ae8eb0d8ba34bb25b7e618547044679d58a82ef9b2479fc1/markupsafe-3.0.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:61631e08084be9e21a8967ec3139c7616ed7c5e9368e05c86d1b39562c8a57b6", size = 11658, upload-time = "2026-10-02T23:04:51.876Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f0/d6613774d86fbf6d145751d43c59875e47a6f9f17daee0aef173bd36d90e/markupsafe-3.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0930db9bdc62d22944e10b066448bb65dc9abe9112880c7cab8da54db4284d5f", size = 12050, upload-time = "2026-10-02T23:04:52.931Z" }, - { url = "https://files.pythonhosted.org/packages/0d/f2/8f18e0b806eb13c1f8d07d917a720831ead54253a6dec011fbc78098a6f8/markupsafe-3.0.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a45c3d514f2436064db00d7fc8778d888f0236ebfed649b53d13a59e69ad51b", size = 24363, upload-time = "2026-10-02T23:04:53.895Z" }, - { url = "https://files.pythonhosted.org/packages/60/ce/fa07dbe8a5675558fa36dea033e19995bc783de2dec5f540ccb9030b06aa/markupsafe-3.0.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1e1451fab512d1bcc3dc26988ec1edb0b82c2db909132872cd9356070a6b63df", size = 28525, upload-time = "2026-10-02T23:04:54.905Z" }, - { url = "https://files.pythonhosted.org/packages/85/40/be87c01f3868ec217f8a2015089d71c22c8c5a75324822e5ed1cdd87210d/markupsafe-3.0.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bd3ce56ae2cbae3ba82b683bc425cd7e48d2ed8b10f3e818186b6f5646d9271c", size = 24733, upload-time = "2026-10-02T23:04:56.229Z" }, - { url = "https://files.pythonhosted.org/packages/4f/a7/aeedb5140afa41fc74c225e9184ab96723a6e873b6ee1c9fede7283456d8/markupsafe-3.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e124f974786f831d6043728e38296969d3579db8896fe004682f5758e613581", size = 22985, upload-time = "2026-10-02T23:04:57.521Z" }, - { url = "https://files.pythonhosted.org/packages/c3/fc/e91352bb08c6a59da3ef0909d457bf95a5f5908fbf151b30a06d9dbcfbb4/markupsafe-3.0.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c02e8f18bdedba082cef725942ac823b9b60656db07f7e265cb31618dfd00d77", size = 22001, upload-time = "2026-10-02T23:04:58.597Z" }, - { url = "https://files.pythonhosted.org/packages/5d/f8/bffee5e7d2a3deb59748a797650a48af7e672025cf641a79344a771ad106/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9f098115c247e11d138ab83a28fa0323c77015007ea2df73ba5fd714dfefd67c", size = 23793, upload-time = "2026-10-02T23:04:59.686Z" }, - { url = "https://files.pythonhosted.org/packages/ed/59/b853d6628ecb4d658e1d637224846d5e9bb4adf4f8df97f3be9f29dce2ec/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d5f93ebbeb8032d47e349328ec8662d973d9b05a70b3c35df1f91fe419b84749", size = 22640, upload-time = "2026-10-02T23:05:00.768Z" }, - { url = "https://files.pythonhosted.org/packages/09/b2/1506df394f0f075797c418d0301498f49e43be194e3ffcb49e6fe6ccf022/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:64511c54db4e4987aef4c41923235927428729e8174c5dba488429be70a998ed", size = 24074, upload-time = "2026-10-02T23:05:01.813Z" }, - { url = "https://files.pythonhosted.org/packages/c7/81/5ed69cda630ac69ef60d06c09ba5a7f84ff66a2e28cf986fd5614ab3c6e6/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e1a622f13970d81f95d0c72f9dc090dce9085fccfa4c9f2174377ee32bd15786", size = 21563, upload-time = "2026-10-02T23:05:03.239Z" }, - { url = "https://files.pythonhosted.org/packages/0c/fe/fb1e79be0fea60aa32602ebefc9c35a82bb42b4df157285ab7dfec12341a/markupsafe-3.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9a7f43c0b202b334cc9184af09bb8f21d3a209e038efaf106936fb69e6b026e", size = 23048, upload-time = "2026-10-02T23:05:04.479Z" }, - { url = "https://files.pythonhosted.org/packages/c8/52/7632a53360671a9b750cdbabaf9cdd89f18b42248b8e4cb42c0b0296e459/markupsafe-3.0.4-cp312-cp312-win32.whl", hash = "sha256:f0ec3b750b59375eab5b0fb2b9254810c00a3375be6d789899f1055a1d556237", size = 14108, upload-time = "2026-10-02T23:05:05.513Z" }, - { url = "https://files.pythonhosted.org/packages/3f/bf/62495e180b7000aaf30000fff849e933f74264638057176cf46852500adc/markupsafe-3.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:11935df9bf455ed0c04eb87bcd720f02b1fe5e02128a9430f23aed6f93336fc7", size = 14303, upload-time = "2026-10-02T23:05:06.538Z" }, - { url = "https://files.pythonhosted.org/packages/c5/8e/4c24208776a65878d656996945aacfbfe010d3720d1a98fc0eb8491fc03b/markupsafe-3.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:a4bbd2d87dd233b9fc5812160c3d0ffbe42edc22a26ce0469f58479ede633fe9", size = 14174, upload-time = "2026-10-02T23:05:07.617Z" }, - { url = "https://files.pythonhosted.org/packages/6d/18/4bc5ba32499e87bb2b0ef5b3a9bb9c00a131fa961ddf0be548cb550f548b/markupsafe-3.0.4-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:de8b364c423ef0a4bad9069657d617f9a5d2b2062457a89b1fa16ee199c399c1", size = 12786, upload-time = "2026-10-02T23:05:08.709Z" }, - { url = "https://files.pythonhosted.org/packages/4e/6f/17f0c099bf25f3e31e63cc19244d9f6af861a9a4ab778c203997903cfdd0/markupsafe-3.0.4-cp313-cp313-android_24_x86_64.whl", hash = "sha256:34bdde374c5932765d7dc685c4a1d191a3207852d67e8e0a9eb6ea85156181f1", size = 12510, upload-time = "2026-10-02T23:05:09.93Z" }, - { url = "https://files.pythonhosted.org/packages/11/af/1a141081b905036ee904ec4bd945e1f70b4e1b32d33c4e59e8cf1d58b247/markupsafe-3.0.4-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:6bd9e1788e15bfcf6a9082de42e30387e7b85d211ab21e57a939bb8cfaaf8d96", size = 11583, upload-time = "2026-10-02T23:05:10.884Z" }, - { url = "https://files.pythonhosted.org/packages/e7/0a/a89385ae590232622a03e091805cff12f24fabe6c11e0e8bae096cece81c/markupsafe-3.0.4-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:5066b244f576f91afc8ee3ba029a89f99d39c79b1853fe9d39bea9f0afbec148", size = 11801, upload-time = "2026-10-02T23:05:11.913Z" }, - { url = "https://files.pythonhosted.org/packages/ed/85/ea548dc013962eb73653124bc595635fbf9e0fa41d1f181a967ccb784dfb/markupsafe-3.0.4-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7a83aa6e4805df46fed18e989d3d16f86ef60cb50bbc8d9ce3a6be89165fbf6e", size = 11443, upload-time = "2026-10-02T23:05:12.887Z" }, - { url = "https://files.pythonhosted.org/packages/cc/72/15f2e5ec9cf2eb00d5cdfe968d94e4156a7bd7303832c3f3b2c403a36839/markupsafe-3.0.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2d1b7d9308288661f56672b1b157d75fc536714d3638487bbea17b6318a78248", size = 11665, upload-time = "2026-10-02T23:05:13.829Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e0/4030bea613677e333c8a2c901fd405055f657f9d06acba5b7357984b6ef7/markupsafe-3.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73e77980c7207854f00fc4e71fb1626868d5740ab4012623d55c7a99ad122a72", size = 12061, upload-time = "2026-10-02T23:05:14.807Z" }, - { url = "https://files.pythonhosted.org/packages/f3/a5/28b76a7449eb702966b88bef599e2360b411fbb3afeee8fe560939be06ec/markupsafe-3.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7018d4af1cd272e847aa5917983ab5e83e4f6579f9dbfecd4a79c0ca80b144c2", size = 24395, upload-time = "2026-10-02T23:05:15.909Z" }, - { url = "https://files.pythonhosted.org/packages/07/6c/21232811afc3a063b5e934b1ae2efda52f46154ec382f585149c020e61fe/markupsafe-3.0.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c90d5b3d4e944e065a301d741b3c1d784f6bd1f503aa68b4967e32b2ba313d85", size = 27183, upload-time = "2026-10-02T23:05:16.976Z" }, - { url = "https://files.pythonhosted.org/packages/14/38/6ccdfa5b59049cb36fb80cbc80aee9cf1fc9bb77d1335ad435f2070b08cf/markupsafe-3.0.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:18a801868a884f216e784d7d14db2a4077143ce7610440aee2ce8f734e7cfcde", size = 24772, upload-time = "2026-10-02T23:05:18.209Z" }, - { url = "https://files.pythonhosted.org/packages/63/e0/cec6865dfe88cb48fedd4b20aed6af5158e41092adcbf3e028bcc6ec2108/markupsafe-3.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:434139499bb20b502ed3baa1f169e618f924a97e7a777fea1a49446d80106cf6", size = 23017, upload-time = "2026-10-02T23:05:19.286Z" }, - { url = "https://files.pythonhosted.org/packages/ee/76/6ed4940bb7648a9aac457c14f870cfdd5105f139a0fb1f29cd61fafa47d1/markupsafe-3.0.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9e227f3dbe6bde7491cf0a9965d00b88c6b1a4a95d11480ddf88bb96d397c19f", size = 22036, upload-time = "2026-10-02T23:05:20.352Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4f/ed476226d4fe46a09090a36025bf319296810028df55eb12f1253b540f3a/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b8cd1f918b26fd7b1832ece557cc18f2d8747309ff8b3f0ef9d4250c5ad67a39", size = 23786, upload-time = "2026-10-02T23:05:21.576Z" }, - { url = "https://files.pythonhosted.org/packages/9a/35/66ff30450e35ef5fba9ebc930c9411747e537fd9447b65e44f5007e2b84d/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a5fcffb37e602b0b3c1638a97746b9b96125caa9bcf6fa41d337a9261de231ee", size = 22672, upload-time = "2026-10-02T23:05:22.922Z" }, - { url = "https://files.pythonhosted.org/packages/32/0b/72f45ce4b4efcbca4b80cf1b06703eff0be8d37e82abb78f66c85a7ead1e/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5989cb26b2e1efc6a42216a9f6b5ee495ce5ace2e5b352a9af489976b32d1ee2", size = 24107, upload-time = "2026-10-02T23:05:24.175Z" }, - { url = "https://files.pythonhosted.org/packages/d2/03/71776e5fdcba04614b384cc102e8a4198208579d896fd1394cb7cb9aa900/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:add96447a86d205ab616665d53b2950ee81083757f56e6ea833c8b2917646b46", size = 21615, upload-time = "2026-10-02T23:05:25.215Z" }, - { url = "https://files.pythonhosted.org/packages/ab/5f/801ce02a02e7aee0f784b1ec7843026178f6adeb9c93ac67eb1992a9a84d/markupsafe-3.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2628d3a8cb648ecebb3c5d6b0a1052d400e4d8b7ac0fb786be8d285b50040d17", size = 23076, upload-time = "2026-10-02T23:05:26.423Z" }, - { url = "https://files.pythonhosted.org/packages/4a/85/c43776625428f3bb4a61e8633940400e3efe6409e3c6f5bff26de5e45618/markupsafe-3.0.4-cp313-cp313-win32.whl", hash = "sha256:672d207103e6b16ca098611b0f9efad6bc00afd47c03d6ef62186495ca677dc0", size = 14118, upload-time = "2026-10-02T23:05:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/6f/36/163da64de88a13db79214ef75fa041be7fa13bdb42261cf5b7484de14bfb/markupsafe-3.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:1f1f9477e174582b0a1b583d60b66e1f2cf5d3fe12cee985e4aedf44766600e5", size = 14313, upload-time = "2026-10-02T23:05:28.749Z" }, - { url = "https://files.pythonhosted.org/packages/9f/a8/9b662783ffaa1149221432a923cee562f78b9cbbb8baa3df9b3753e63e1e/markupsafe-3.0.4-cp313-cp313-win_arm64.whl", hash = "sha256:06de8ef6331f6e822c28d577dc8bf43fe398800477c49498f38fc38b67ff33fc", size = 14189, upload-time = "2026-10-02T23:05:29.917Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c3/a944f3b0df22bd129e96915b9f4e98d2eeca6516687d7618304a966c3c74/markupsafe-3.0.4-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:4ed644d75aa94a2baf7ec3a96eaa160ea58c742eb9d27c6506053c5c40fc84ed", size = 12787, upload-time = "2026-10-02T23:05:30.971Z" }, - { url = "https://files.pythonhosted.org/packages/d4/d6/a44863f69d88b6c7e27889108f70d47aed259edf89d5df3c5fca1eac87d6/markupsafe-3.0.4-cp314-cp314-android_24_x86_64.whl", hash = "sha256:6d2a9efe686f9de00d0d1ea32a4a5a86d558a2277501bd78d964214eab625e59", size = 12525, upload-time = "2026-10-02T23:05:32.263Z" }, - { url = "https://files.pythonhosted.org/packages/17/8f/168ba80e532dd6a93f96f8f706f1ad41d7990b6e1aeedc1cc0d211a33497/markupsafe-3.0.4-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8781a792a070cf2bd1b86d3aa943894115faaba6e88122a7bf32d62072742453", size = 11589, upload-time = "2026-10-02T23:05:33.251Z" }, - { url = "https://files.pythonhosted.org/packages/32/b3/aa2c95a574d3af39403a469b295886eb9b6d448da568cbebb5a2cbfdc2e5/markupsafe-3.0.4-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:971a3bbb75d97ae4e2e8f7d4834236f86f85f0c85e04ab2e191db1123b04f80b", size = 11801, upload-time = "2026-10-02T23:05:34.315Z" }, - { url = "https://files.pythonhosted.org/packages/60/d0/34b810107d83840e768bf485de795893ebbae35b26ab061b487adfa0a692/markupsafe-3.0.4-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:8909c2f1c6dd65e054ac4b573a91c8384d1492281e55d82d159d653f7a13adf6", size = 11447, upload-time = "2026-10-02T23:05:35.302Z" }, - { url = "https://files.pythonhosted.org/packages/6c/ab/2f8488f0f817a39fca068d2b17daf446bf5cdb3eae28c3720af534d873b4/markupsafe-3.0.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4cf3468d5ec187ffffcaca8e61929a37448f215dafc1386a12c750a72fe53634", size = 11722, upload-time = "2026-10-02T23:05:36.363Z" }, - { url = "https://files.pythonhosted.org/packages/ad/40/e2d117b048d47282ade906fbfd92814cbee5647afc13fda88a3406039372/markupsafe-3.0.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:52704c5d36eb6dda8866493decd61111fff86244c9b1ad225ca01b9e91e5970f", size = 12061, upload-time = "2026-10-02T23:05:37.397Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a8/73a81135e85ba66217f5af7facb03bbb386807e1a729ab64532e4c802652/markupsafe-3.0.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1caa2fa5a6184fb233153b35f654e6687bd555476f6170f29d8ee9be1a8b0af9", size = 24434, upload-time = "2026-10-02T23:05:38.407Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ca/fa9216dd01efee2dfdacafe7df32b4d0170fbac694b0c258a193d6e53999/markupsafe-3.0.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:387d8cd30e69b3f0a72877b9ae717033396404e19095b17fe89753a981fda44f", size = 27183, upload-time = "2026-10-02T23:05:39.581Z" }, - { url = "https://files.pythonhosted.org/packages/fa/4e/a469509e538d37af51103b17b073126973f2b1cbf197ff32c7ddf025cfe5/markupsafe-3.0.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:051417f74bcaaefa316276e0ff723f541616ca51043d070da00249d9bddd3e3c", size = 24813, upload-time = "2026-10-02T23:05:40.671Z" }, - { url = "https://files.pythonhosted.org/packages/8f/db/d7282caf7ab03af44d5d6fdbaa019b35c7d7f1c90588b839c07cba640d6a/markupsafe-3.0.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8e9f292fcda89b324f2f5c91d13f1424a153e40fc2756f38ee23b15835ff300", size = 23049, upload-time = "2026-10-02T23:05:41.864Z" }, - { url = "https://files.pythonhosted.org/packages/30/f3/b6a425206e6964efda6acee544d0eb01d1501784d0b8e2dcc74986f33b17/markupsafe-3.0.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:df1ae86ff54725a01fa1a0510b914ca53a161b7050be74f6204e24aded5971d0", size = 22088, upload-time = "2026-10-02T23:05:43.014Z" }, - { url = "https://files.pythonhosted.org/packages/ea/8a/84d3582fc1f0d5bd466cdf2eebf175e172158a6e70701aacec1de1b35430/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8965520ac587c94a4ac48b729be3d8b8de00af39699b17585dfb599babe77977", size = 23846, upload-time = "2026-10-02T23:05:44.098Z" }, - { url = "https://files.pythonhosted.org/packages/1c/65/db101cce51b7ba4864ac491a9859d297dd1adf0e55b103fee9db9c47c527/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:340cbb1957ba99929cbf19a75626d36ba1ae21d1730b287d1cf7f824a20c4fc7", size = 22674, upload-time = "2026-10-02T23:05:45.23Z" }, - { url = "https://files.pythonhosted.org/packages/e0/49/ddee9813d71db0c7a5c9d97c832125e6758a0c844777f1cf076569bb0e22/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:3a93d9616ddecfb393727a0041a562cf0b15a244e20f2bd25efc7949be4c4f17", size = 24104, upload-time = "2026-10-02T23:05:46.398Z" }, - { url = "https://files.pythonhosted.org/packages/aa/0e/7d8518d726726870a2399d69fd30d0fa36c5e57a2132c336b58d7c491073/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d2e56fd3b00222722abfb3f5f0759ddbae4b90811b5ad4343c64030ad1bde70c", size = 21637, upload-time = "2026-10-02T23:05:47.48Z" }, - { url = "https://files.pythonhosted.org/packages/b4/b0/b505e8a361ba557dbf3b3aa7331ea39b00d2022a26e925ff8463b9714bb3/markupsafe-3.0.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0d9c47709875fdb321452056622e930c52afbc07a7d780762fbb8b4d91ce6fa4", size = 23081, upload-time = "2026-10-02T23:05:48.611Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ea/9cc3cea873f980c75cbdb6f4277ce30ee955de38be0b3d02f14c108e0698/markupsafe-3.0.4-cp314-cp314-win32.whl", hash = "sha256:38fc55594dab834470b6733dead2ee9e3f657fb0608c769dcafa0ba5ab52f45c", size = 14272, upload-time = "2026-10-02T23:05:49.707Z" }, - { url = "https://files.pythonhosted.org/packages/80/f0/5792ff768a410f93ee3f84fc19345295ffc352d2c936b424cb37e514714c/markupsafe-3.0.4-cp314-cp314-win_amd64.whl", hash = "sha256:c1bc67752d5f21013cfe430df4062441714eab79f65a6a05e01505957e9c35fe", size = 14501, upload-time = "2026-10-02T23:05:50.788Z" }, - { url = "https://files.pythonhosted.org/packages/5f/cf/3d074a8edffcc6899355232ff2543ae8d929733239596423b7db79698bc9/markupsafe-3.0.4-cp314-cp314-win_arm64.whl", hash = "sha256:7e1636da3d8dfc220b6dd10264db5f2b165e4888c4518594898fbe381049af8a", size = 14364, upload-time = "2026-10-02T23:05:51.857Z" }, - { url = "https://files.pythonhosted.org/packages/d9/31/87ce42159aae2163cf3bbbd0c44bc87780510eecab1ea3859099aed95dcb/markupsafe-3.0.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:805c8b84534fa10891890f0e4be39f3a99e94615d93e8836bf9fa1fdca2feeb2", size = 11759, upload-time = "2026-10-02T23:05:52.951Z" }, - { url = "https://files.pythonhosted.org/packages/5f/53/b047207eeb7752e960aca3eb1df5fb7eefa7dd4c62ac49bb156456c8a702/markupsafe-3.0.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fa95848c929b6a75f6848d3c9793e59db365ee436776e57db835cdbfa79ba977", size = 12096, upload-time = "2026-10-02T23:05:54.066Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/4326c88a13c7b755657d44b4bb986f8c3d9843ecba7e22d98661d87f9a57/markupsafe-3.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e916035e3e9930cbdfdd10abf48861340221857f45509565898e012263f7b289", size = 25699, upload-time = "2026-10-02T23:05:55.15Z" }, - { url = "https://files.pythonhosted.org/packages/f2/bb/990581b7474bfcf2cf34bed6ba5ea23bd87adb9d671213d68e88620e7a6b/markupsafe-3.0.4-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b4d12837e0203bbace818ff4a7461afdcd78bcd782351cea148139180d7bcffe", size = 27804, upload-time = "2026-10-02T23:05:56.29Z" }, - { url = "https://files.pythonhosted.org/packages/6b/89/89491878c28e8291f5aa2fffe2c2d57230d10ae366d55dd810b840513d78/markupsafe-3.0.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5086f9975abb1ab531ee6afca1761e4b59a19b446f3f6522ed776963228cfe5a", size = 25912, upload-time = "2026-10-02T23:05:57.416Z" }, - { url = "https://files.pythonhosted.org/packages/30/77/680998b54efdea06fc114565cd739b6d059f826a0279219b218dfa750d29/markupsafe-3.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b4a635a0487774f841cb1fb62e907e7195cc95bc761e053184b8acc3ceb20733", size = 23623, upload-time = "2026-10-02T23:05:58.557Z" }, - { url = "https://files.pythonhosted.org/packages/ae/75/2709f5ac5de9467b40b10e2bb8f89cc63dfb74582e09aa734b1124a217de/markupsafe-3.0.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb96e6e088d6cf71c1ea977510948320234824cf226e32f6f6e044f7a9c82b34", size = 23301, upload-time = "2026-10-02T23:05:59.94Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c8/39eadc6c5b14c9c7679bfb98f4d4c6a97863b5beb91839aca4d2d6e16e55/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8b5d563170ff8ba3181caa967c99a3c804d1dedb702c7cb93a6a7c32247da978", size = 24950, upload-time = "2026-10-02T23:06:01.289Z" }, - { url = "https://files.pythonhosted.org/packages/1a/5e/01037f8a43e8ccb0bffb4fbdc5212db05bf080fdd7286cd392332d58128a/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:396ec4e65cc889f69786b3b89478b471cee5a3bcf468b9d9bb03e1a30fb291fc", size = 23330, upload-time = "2026-10-02T23:06:02.441Z" }, - { url = "https://files.pythonhosted.org/packages/d4/f4/23e83ce0596bb0cbe670502d31df8f757bbd01a392aa486fa3b40d1ed399/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:15ba9e28640feef770374b116a6f019c21f52404aeabe516aa7f800587b98cfc", size = 25239, upload-time = "2026-10-02T23:06:03.579Z" }, - { url = "https://files.pythonhosted.org/packages/88/5b/3708897368073cc683d524750474f41a77d2986152c380dcc55b20fdf340/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d920abdfa61279ba1a2ef9484aab07bf03331f8c08a10120fa332353d06e6932", size = 22767, upload-time = "2026-10-02T23:06:04.699Z" }, - { url = "https://files.pythonhosted.org/packages/c6/61/ebda1307864b409e6b3115757a3d4a09cca46cfb6cc65191b5de226b424b/markupsafe-3.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a9f54054101545a9a9cccefddf54316aa6e4491611fcbef9e91b3b6bebec04f6", size = 23668, upload-time = "2026-10-02T23:06:05.9Z" }, - { url = "https://files.pythonhosted.org/packages/09/15/98075cceac3b5ba0dbb8e4762a847be967d2befc349a2cf2d0ac77f62c9d/markupsafe-3.0.4-cp314-cp314t-win32.whl", hash = "sha256:12a606a492de952afcb43b59a14aaaaad120e708d3663dd0fdf2d738d427a691", size = 14301, upload-time = "2026-10-02T23:06:07.109Z" }, - { url = "https://files.pythonhosted.org/packages/0b/a3/768b560fcc4156685cb563d922b217810cfa7bc135773367f62f1f9d2078/markupsafe-3.0.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a18f38cafc329bac5e3c2b96c765b4c96d3d103421ed22ab7988c1e3fce27464", size = 14526, upload-time = "2026-10-02T23:06:08.276Z" }, - { url = "https://files.pythonhosted.org/packages/93/63/da554b4c97a6b0ea3229ca7fe8cbfb620be81613d517f482e85958550537/markupsafe-3.0.4-cp314-cp314t-win_arm64.whl", hash = "sha256:eba154571c16e032112afac0dc2dfe9e63c2ceb7aedd07bb7eecf2ce26d4dd4c", size = 14421, upload-time = "2026-10-02T23:06:09.402Z" }, - { url = "https://files.pythonhosted.org/packages/a9/30/54d11c8ca027114898cab97421fb39e4ffd9ddf47cdbc44df2ec76722da9/markupsafe-3.0.4-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:737c9c3981998eba27f11786f84fddcbabc74068b72a4a1f454ea02094b57b65", size = 12791, upload-time = "2026-10-02T23:06:10.485Z" }, - { url = "https://files.pythonhosted.org/packages/10/6d/97c913e253a14bd3cd0e15a5c56d13203b823fa7ee32498342896a072dc4/markupsafe-3.0.4-cp315-cp315-android_24_x86_64.whl", hash = "sha256:489505b03f692c3f376394e49194fa7a7f9e8558d6e293a7056a0032b0c38163", size = 12527, upload-time = "2026-10-02T23:06:11.834Z" }, - { url = "https://files.pythonhosted.org/packages/26/f9/b86d032042a4d597d9e1997f0e5f63a3eedaf11258e0a05760b0a0a826ea/markupsafe-3.0.4-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:077293e425f28ec737dbcad442a71752e28f8ae27cde3d68acd1fb212091cd92", size = 11602, upload-time = "2026-10-02T23:06:13.122Z" }, - { url = "https://files.pythonhosted.org/packages/f2/dc/73c14c1eedf0ac5fa3292ba43435e6c49d2c2050f33cebde541f8f4807f1/markupsafe-3.0.4-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9348cbb300d224fe3b89793262cb093504d4ae927004468463f745188a193e4a", size = 11817, upload-time = "2026-10-02T23:06:14.227Z" }, - { url = "https://files.pythonhosted.org/packages/8f/69/2c2fcaa5fcee22d72c7819c0d536fd181c74a688e6143845419579cd2863/markupsafe-3.0.4-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:b807e598953730f82e4eae3bd30f6a122cf6b31c398c6b504c0e04c13c170429", size = 11446, upload-time = "2026-10-02T23:06:15.574Z" }, - { url = "https://files.pythonhosted.org/packages/88/54/9e5ec76c62e6e2834d5a93623018c943e8b3bb41d663e3fd4c03303b9b85/markupsafe-3.0.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:799c39bdf5e2f1292fedd3009f7b3c9e760f10b2420cb9638d56920840ff6db8", size = 11719, upload-time = "2026-10-02T23:06:16.701Z" }, - { url = "https://files.pythonhosted.org/packages/96/24/3ec292b44064c16229e064d770b2625bd8ea941aa61f44905a9fa44942c0/markupsafe-3.0.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:ae9dcb8fbe244cb82f8a6458b455b927a03685e383d9bacf1ea5ce180b96dc97", size = 12075, upload-time = "2026-10-02T23:06:17.855Z" }, - { url = "https://files.pythonhosted.org/packages/aa/85/b64fdb1f304848518742136983c24e96d967bfb59a0ea160e92736901ab0/markupsafe-3.0.4-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bced6e2a6dba6a28f7dd3c6ce14df1b2dd495923f16ea484cad03decd463b2b", size = 24656, upload-time = "2026-10-02T23:06:18.963Z" }, - { url = "https://files.pythonhosted.org/packages/9c/18/23997d4c65b355da6390d61cd56e0ab3befd6ba8dda25cb40c602bd0fa6b/markupsafe-3.0.4-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3882fb412298575bae3b9c46868251f15cc69307359f87bb1b382e53d6e5a2c9", size = 27737, upload-time = "2026-10-02T23:06:20.117Z" }, - { url = "https://files.pythonhosted.org/packages/d4/36/35998dead3c6af88c38265a56e58100211f036234ab88eb2283fd4cbce44/markupsafe-3.0.4-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04e7902ba80ee4bac1d50a549606527a1dcf0476cd81403db41099d3b60ec653", size = 25003, upload-time = "2026-10-02T23:06:21.284Z" }, - { url = "https://files.pythonhosted.org/packages/82/96/ef49135ce260db4ca4a12b119ed468449cd248db6b1468e2112b546d7a2e/markupsafe-3.0.4-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:925f929d6b59a8b3f8b8c6ac363cd0af7eecc81efb3071770b3c6717c450a369", size = 23111, upload-time = "2026-10-02T23:06:22.524Z" }, - { url = "https://files.pythonhosted.org/packages/50/7d/83126e338bd88c17a220668235368ad719fd4638e426739858cbb8508f77/markupsafe-3.0.4-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f68edfc67aabac33708941f26f22a7b8e9f81429bc0cf249fcf7d66b23af8d19", size = 22403, upload-time = "2026-10-02T23:06:23.785Z" }, - { url = "https://files.pythonhosted.org/packages/83/dd/daf7e420de23c8206c365204e7b85e1251d8e19d34196a56336f316e5ed2/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:e5c802729725bd07e2bc3ab7b76dc7e0bbfc53129d8f1eb1c002c24cf774717e", size = 24083, upload-time = "2026-10-02T23:06:25.037Z" }, - { url = "https://files.pythonhosted.org/packages/19/3c/11eecdc06bc44ad5570350085b572ebf049e8f9a38d1ece6d76640b739cd/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:55ffd6ce583d97dc71dc92e930324c8c0d25aea7e3ade6ae54ef77cedb096811", size = 22931, upload-time = "2026-10-02T23:06:26.328Z" }, - { url = "https://files.pythonhosted.org/packages/0d/9e/ac0fd77f2a726e56ecc3ca0235d095feace1358d1b822406c2a2ef26a4dc/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:2cb3dd71fc6be918ad4264346a8ed69485f9b7ed7bf35495d8e22807cd6b8bea", size = 24299, upload-time = "2026-10-02T23:06:27.742Z" }, - { url = "https://files.pythonhosted.org/packages/d7/09/c6bd842ad58ff5b3bc76eeed7e9a42a6f11adc5d090ec697b72c9672731e/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:94f5407f7bc64fa6463906b896f9904beeeb7dd8dc116ee8e9056c8714ff9916", size = 21948, upload-time = "2026-10-02T23:06:29.274Z" }, - { url = "https://files.pythonhosted.org/packages/a3/46/82f586711fed61e86faa1ee1bc317d68cd45a10c8bdbe3f7d1fdf9026ad8/markupsafe-3.0.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2dad610540cb2e6272855c178f08ae9a1c7ac258a7fb71660553a5f104b42741", size = 23150, upload-time = "2026-10-02T23:06:30.583Z" }, - { url = "https://files.pythonhosted.org/packages/19/2d/2dfdce99318abbfa26925195fbc17db188c46a1ec6457be121b6f9cfeb42/markupsafe-3.0.4-cp315-cp315-win32.whl", hash = "sha256:03470d1a8268e692ecf79ecd565593e59d44219377a7ead61f1f1b94c1f7ff6b", size = 14269, upload-time = "2026-10-02T23:06:31.949Z" }, - { url = "https://files.pythonhosted.org/packages/5b/ec/6000fd82e8791e58fcd0456ec20f098957e2b03d5ed02eb73241a577c0ba/markupsafe-3.0.4-cp315-cp315-win_amd64.whl", hash = "sha256:d882a373d8093c2941e01291b7ced96e9cbe4781da9a7751ca7e6c70385e5214", size = 14496, upload-time = "2026-10-02T23:06:33.258Z" }, - { url = "https://files.pythonhosted.org/packages/bc/66/e73bd5016421d5d6e2fb6de7dd609f9de020942ac8c626526bd8c6eeaf82/markupsafe-3.0.4-cp315-cp315-win_arm64.whl", hash = "sha256:353bd63081912ab8cfa6a0c7d185934cdf8426f04c618bba6bc4b394f2069b67", size = 14361, upload-time = "2026-10-02T23:06:34.539Z" }, - { url = "https://files.pythonhosted.org/packages/90/df/cb8c3dc98d313a951df2f8968f44e4cb5643df6d3cab749a530ce2f7d972/markupsafe-3.0.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c61750fadcd119d0825bcb7d7d675dd264dcc89cc05292aab5be68ebdbb374ad", size = 11760, upload-time = "2026-10-02T23:06:35.807Z" }, - { url = "https://files.pythonhosted.org/packages/d6/bb/4af9b3ca0753d654ac75f9531d5bd741bb77ca6e696f36807c475ffc099a/markupsafe-3.0.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:1c0df495a977d10460a94941799c72d5b5ab03d3858d949b55b5a66c8f371c99", size = 12108, upload-time = "2026-10-02T23:06:37.089Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d4/b56429313aee5fd59b079c3df5615299959e25e7113eb6d8caadbdd7d38a/markupsafe-3.0.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02fa4acbc6a3fc5c693c34d4dd8c1130b7fe99cc915181b0ddd6f72aeb296002", size = 25762, upload-time = "2026-10-02T23:06:38.419Z" }, - { url = "https://files.pythonhosted.org/packages/65/f5/34c181e891aa4f7d59c918584672e0c5eb7fffe76c1387d1246008bf4081/markupsafe-3.0.4-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:05295589e619b9bed252a86b532b8e27350abc372d18ba89b59375325e91ec1e", size = 28400, upload-time = "2026-10-02T23:06:39.819Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b5/ad14694fd0ac9a5ce30bc6498f2999378f418583dd1679cca5a1b512957e/markupsafe-3.0.4-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:be6cb0c799abb0e2ba3e618e6d28ddddf7e485f6c2ce938dfa237daf3905072c", size = 25946, upload-time = "2026-10-02T23:06:41.381Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a8/26b606445387d0ceb1eb1f21840094b84e4e3c3c3983d80d10b89823b490/markupsafe-3.0.4-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26e9867520db70d37f7fb421a7f0d8adb40171011fb84ce869afa1a83370dfa8", size = 23634, upload-time = "2026-10-02T23:06:42.748Z" }, - { url = "https://files.pythonhosted.org/packages/39/a2/b8814de672f1f0094d498bf646f2fec9d6356b503d28ef500b71c5095377/markupsafe-3.0.4-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f03460ff076f70ab595bb45a0205ccea1971443575b6920c52e755dec2b3fbfe", size = 23488, upload-time = "2026-10-02T23:06:44.176Z" }, - { url = "https://files.pythonhosted.org/packages/db/c7/287223376fb73335a3cc5d6eb22c6ab01358cf33945a9c39c06b9dac3f4b/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:436e3ffc6310d3c41878c601db29098102fe5d8a467c49da4a4125254e0980f2", size = 25037, upload-time = "2026-10-02T23:06:45.646Z" }, - { url = "https://files.pythonhosted.org/packages/f9/29/4df8355e313426d19e62ba33e0253c009ca12a0894ee77d67fa67255361c/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:4e2c4809c14559aa7ef426f27fb35afbb38104c349a903bf8f3600456764bb38", size = 23543, upload-time = "2026-10-02T23:06:47.264Z" }, - { url = "https://files.pythonhosted.org/packages/71/e5/8377731e8495668dcc768f645e717df18318c841edaf023a99395f6da9b4/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:da2af0d7aebfc2074080d72efa6ab8317c62481ef1f896f65d9999c1c01f4494", size = 25282, upload-time = "2026-10-02T23:06:48.795Z" }, - { url = "https://files.pythonhosted.org/packages/ed/5f/373456e37ceb1478d657d6fe769cbe0a39f0a8dfc1548eeb19c471eefdd9/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:aa2c838cc024642cc04c6854232f32b43e5e22833dd11119c1766c7873b8370d", size = 22993, upload-time = "2026-10-02T23:06:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/d7/93/2cbd5628435afb6f541bbaced4bce0c2edac4b09a142e6e928b8b0da9858/markupsafe-3.0.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b91cc9d336957239ff200f30097e6fea2dc6d6fb3c81e853eaa09eac904fd894", size = 23712, upload-time = "2026-10-02T23:06:51.759Z" }, - { url = "https://files.pythonhosted.org/packages/81/99/157e10966b033b363aeda5263e82596ee232a0b1d082fdbf90aa417ff083/markupsafe-3.0.4-cp315-cp315t-win32.whl", hash = "sha256:e49fb0d1ce92cfa0cb198cc5b1b11cdf9d0638658e2a2db2687e39db7c87fc78", size = 14300, upload-time = "2026-10-02T23:06:53.241Z" }, - { url = "https://files.pythonhosted.org/packages/33/05/55884815414c9706a23deca150b72c25a62109e65b0b6ce232077802c719/markupsafe-3.0.4-cp315-cp315t-win_amd64.whl", hash = "sha256:4f6e0852a0283b1b1fd776eeb7b766a5f440b3e2bd31ab51af3b400585f3965c", size = 14522, upload-time = "2026-10-02T23:06:54.729Z" }, - { url = "https://files.pythonhosted.org/packages/92/f9/ecbde7149e95b8a0f18e16d5d747f7dc06049d5da2e4f77f6f5e4a1f46a8/markupsafe-3.0.4-cp315-cp315t-win_arm64.whl", hash = "sha256:39dbacefc411633db5b4378b066a9aca70a3d7e2922c9e578d825f844026eeba", size = 14417, upload-time = "2026-10-02T23:06:56.246Z" }, +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, ] [[package]] name = "matplotlib-inline" -version = "0.2.2" +version = "0.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, ] [[package]] @@ -1542,99 +1180,49 @@ wheels = [ [[package]] name = "mistune" -version = "3.4.0" +version = "3.1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/eb/749a4e69bf7396e751ae37444abe997eff2254e695a8095b84d1c89c1181/mistune-3.4.0.tar.gz", hash = "sha256:2eaf7952af928ca8d33b779762effc1da517b62c6ad85ec8ca957e3b07b9782a", size = 136772, upload-time = "2026-10-19T10:44:28.172Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload-time = "2025-03-19T14:27:24.955Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/f7/021d590d52c1ac28e3290311776854c6a1c927fa3fb4b25ce74caf937a3d/mistune-3.4.0-py3-none-any.whl", hash = "sha256:d03cec4c8620f21517a996d82d14f3b59c30d79bda2cc6c56bd32b839f18ce6b", size = 70398, upload-time = "2026-10-19T10:44:26.751Z" }, + { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload-time = "2025-03-19T14:27:23.451Z" }, ] [[package]] name = "msgpack" -version = "1.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/e7/bb605a7bab2d8425a64b3fa762b39dc1bf1c7e3f11ba6fb5413d6db0ff8c/msgpack-1.2.3.tar.gz", hash = "sha256:32edb81a2b5eb7cd7c9d941b2bfbbb082fd2cd09e0e725930316af6b708db186", size = 196517, upload-time = "2026-09-29T02:33:52.276Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/95/b9c651ccb9d720b2e2c8d537954dff528ab869a03bf89598145716db823c/msgpack-1.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec90a9ae3e1169fa1171147340f0e97d941aa19fcd3b34e8339a55933ed042af", size = 90404, upload-time = "2026-09-29T02:31:44.826Z" }, - { url = "https://files.pythonhosted.org/packages/50/cd/fc9e2e367e80f1493e2ec5f610dda558b344eeede296f88976db133e8f2c/msgpack-1.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9d7e9cbb0998bbfd363fd9a09c330520d5e9cb323c05b5a1a05865d23ccf2226", size = 89683, upload-time = "2026-09-29T02:31:46.413Z" }, - { url = "https://files.pythonhosted.org/packages/19/9e/1028485c6886c1c117f777cc9b053e541eff0fedb3292dfb1da95040edb5/msgpack-1.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6707d2fa2aa1bb5424ea0b05f44ffc989b15ab41a73ff5855bff4944fec7c8ac", size = 465347, upload-time = "2026-09-29T02:31:47.934Z" }, - { url = "https://files.pythonhosted.org/packages/aa/83/800570e6a22376eb8d599920f70aead4779a63611696f567477c4e85a70f/msgpack-1.2.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:382b219de3d436de3baba0f4b0c6d4336e8f5858d0eb047918b13b69a71c6c55", size = 477820, upload-time = "2026-09-29T02:31:49.479Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ff/817e4a2052f848d3fb67726908d6e4e7c19f68ee7c19553a82ce7b0ed415/msgpack-1.2.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:186e6c602b8a9968b8e864c67d622a69279f7d1e55ae25f40e3bff7e815b2b62", size = 436656, upload-time = "2026-09-29T02:31:51.18Z" }, - { url = "https://files.pythonhosted.org/packages/3d/42/040cc55dde6a7d92057baac8d1fc9cfb9f4fd4162900e2ec16dc33917a7d/msgpack-1.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9276ba88891338f2617044429dfd080ae008c9868a25f6f1a7d004a35dc9ac0a", size = 460939, upload-time = "2026-09-29T02:31:53.026Z" }, - { url = "https://files.pythonhosted.org/packages/09/93/4dc007bdef930eed247346773bc0189b710078961d3218d5ee7ba59f322c/msgpack-1.2.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:c942c21a93f36b3a69e828c8945bb72c94dc2ffe488a2086950c812f3edf046c", size = 433608, upload-time = "2026-09-29T02:31:54.981Z" }, - { url = "https://files.pythonhosted.org/packages/c0/97/a1b944046f283ec89445cb2a982c42233b5b07cc630f9be739f4f1d469a3/msgpack-1.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18a6ed513023001b28dcd3ba54966f6bb90a38274ba8d2640464bcab3a1b81d4", size = 477373, upload-time = "2026-09-29T02:31:56.713Z" }, - { url = "https://files.pythonhosted.org/packages/59/79/ab411d0d172743732ab2503f4c32a22dd1a7d1436a6feecbb160e4b6376a/msgpack-1.2.3-cp311-cp311-win32.whl", hash = "sha256:d0238cd05dec9ffbe0de1071df685ba63e30a36ac155285b1a094e727c38cbe9", size = 67514, upload-time = "2026-09-29T02:31:58.267Z" }, - { url = "https://files.pythonhosted.org/packages/63/8d/6f0cb2b84e484e96278455c26870196d025bb0cec312b226a663f1fa9000/msgpack-1.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:30e1522e4173230dca4d9ad896f038f73c0da6c1edd42f4dbad88ac583cf5d46", size = 75850, upload-time = "2026-09-29T02:31:59.449Z" }, - { url = "https://files.pythonhosted.org/packages/aa/25/f99e13a2c1d3f5a1dcaa5aab27f474e8c4358188bbc68ad79fecb0d1aefe/msgpack-1.2.3-cp311-cp311-win_arm64.whl", hash = "sha256:8ca67f77938ea6a3663aa9bd22b3e031f6da84d665be850abab910ee90728dfd", size = 72338, upload-time = "2026-09-29T02:32:00.885Z" }, - { url = "https://files.pythonhosted.org/packages/af/12/4d7c6d6203416d9fbf0f59ebaa805e70fb929b93a41b611bc821ec5964a0/msgpack-1.2.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89c930aece4e972b208ba589c8410b4167b05e411a5ea2cb25fd96f8bc47ee43", size = 91577, upload-time = "2026-09-29T02:32:02.141Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c7/8576ad39f4ca42ddad26f68eb8621d2d0a60501193d480f504bd9d7f36c4/msgpack-1.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:905a189853d6bdb204c7ae5f4ab77fb857448abfff574d3d93c62e2815b24b4f", size = 90027, upload-time = "2026-09-29T02:32:03.508Z" }, - { url = "https://files.pythonhosted.org/packages/0a/3a/aa9c580aea1314529a0f3562461479780b0d254b064f0880956bfbcc74a8/msgpack-1.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7b3d0018746b5997dd6b14a1870b07cc4c327d9101145d94a1fc264a51a06", size = 460343, upload-time = "2026-09-29T02:32:04.906Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cf/9c2e4d6c179529d5bf4a64cff76fa581486569e9fbdd35bd98f51cb624bf/msgpack-1.2.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede33b2892ceb976283e009ad12fa1834cfdf1f9c43ee9c97849fc588d00a618", size = 472998, upload-time = "2026-09-29T02:32:06.69Z" }, - { url = "https://files.pythonhosted.org/packages/7b/41/915c81fe6df2d3cbdb0dece4f1a5cd313e1cd2abd9f501d0f50c0582517e/msgpack-1.2.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:666ef5601ab0e6e345e47febc96aa81143cc932201543480cbb9499164f05ffb", size = 423216, upload-time = "2026-09-29T02:32:08.739Z" }, - { url = "https://files.pythonhosted.org/packages/a2/e7/7dda8b1039abfd9bba4c5068172c67135c9e33089f503512db9226f23c24/msgpack-1.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87cf2ef05ff2f2493ba29fcdaef27e960ca64dacfd13460ae29e6f92e0ed05bb", size = 451218, upload-time = "2026-09-29T02:32:10.517Z" }, - { url = "https://files.pythonhosted.org/packages/16/5b/ce995c1ed4a0522b7f2d034bc2034fd63005f240b945961b70fb56fbaf3d/msgpack-1.2.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:b774ff994d844e541439ac5d2d49a14def4104830c3465e9394c153f86200ffb", size = 422453, upload-time = "2026-09-29T02:32:11.956Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3f/ce191fb87e2650d0166b34c437e499ee4a7f9db9c1eb164f41725eb6160e/msgpack-1.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaf7e82249837e3aa97297b34a0bb9ff562027381631e057cea6e1367f10b438", size = 469003, upload-time = "2026-09-29T02:32:13.663Z" }, - { url = "https://files.pythonhosted.org/packages/42/35/539123407fe200fb16609c835675496fbeb6017ace9fc93909f0613223ae/msgpack-1.2.3-cp312-cp312-win32.whl", hash = "sha256:7c047250096f9fc19dba26e3d1639b5e7a84114003605c94def667149a70ced1", size = 68303, upload-time = "2026-09-29T02:32:15.02Z" }, - { url = "https://files.pythonhosted.org/packages/6f/4c/331b45f9b86fbda6b9e103244d189068e51f726d8c40021ed66e1f2c415e/msgpack-1.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:3ec409b0d6aa8e9eec6eaf881b893caa215dbe68c5319ca96e8a271d81bb111d", size = 76744, upload-time = "2026-09-29T02:32:16.344Z" }, - { url = "https://files.pythonhosted.org/packages/13/9f/fb572dc42b9fac06c7ea848aaee6e140d84469743bd1402bc07089fc4566/msgpack-1.2.3-cp312-cp312-win_arm64.whl", hash = "sha256:59612b4ed48a04cf024584218e813562f3b30a3bafa5f55abe300b15da314751", size = 71580, upload-time = "2026-09-29T02:32:17.617Z" }, - { url = "https://files.pythonhosted.org/packages/1f/8b/3824d65e912e925d09ce30d9130fa9970d6d2855d7888b13639a6604967f/msgpack-1.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:21bfa4d2aa0b04c1806ef778a1199e9e53ea2441bcbf284420a32083896320b8", size = 91728, upload-time = "2026-09-29T02:32:18.949Z" }, - { url = "https://files.pythonhosted.org/packages/05/e6/df7f2c9ebb94760113debbcea2bd3afe5fdab88a4f7bec1b618755517460/msgpack-1.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:db84203b13aecc222f465061397fdd5b53b7ae73d2c95ffc1c8dc5be0153a709", size = 89955, upload-time = "2026-09-29T02:32:20.224Z" }, - { url = "https://files.pythonhosted.org/packages/08/6a/e5fc57136e8bacccb2b39627dea2cd546540a06181e22fe6db90e15b3ae4/msgpack-1.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e0d7950ca3c1bbae291d0552dd3bb2792fc680629c4c0d44e47e5bab969f3ca", size = 454930, upload-time = "2026-09-29T02:32:21.771Z" }, - { url = "https://files.pythonhosted.org/packages/b0/30/c394d37898db9212d1693456cdf363c7e1a097d0b63e10664007f3df3ec1/msgpack-1.2.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07c9733089d1b176c3dd2f7fa268452f9d5d784d076473499d754a58e8d1fbbb", size = 466866, upload-time = "2026-09-29T02:32:23.742Z" }, - { url = "https://files.pythonhosted.org/packages/4a/c8/1e4ddf6f6b829b3ee6c530c79dfae89cb609d2b0eedb5e0ae716851c52d1/msgpack-1.2.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f24a43b3560e20f825b807fe1e874bd73d53abaf8bbdcf258a6eb152cddbc1f5", size = 418715, upload-time = "2026-09-29T02:32:25.262Z" }, - { url = "https://files.pythonhosted.org/packages/11/a5/f460ba6d7a12d4301002f3efbb8f841e8bdc9c5fc98d771689677a352885/msgpack-1.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6576f348ed6cc4f31db6fd915a8e94245f042f50eae08d48732425e70638ea37", size = 446489, upload-time = "2026-09-29T02:32:26.988Z" }, - { url = "https://files.pythonhosted.org/packages/49/23/adface88db909bed321c85dd673655152d4a514c67e1f0800eb51c777d07/msgpack-1.2.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cd5a9f9f86a52c24713679aa2631956835f3842512964ff93f736ff76f1f530d", size = 416998, upload-time = "2026-09-29T02:32:28.606Z" }, - { url = "https://files.pythonhosted.org/packages/36/00/5bb3a239ccfc3763c4d0fa49b13b1b7010b00182c499ab3c1fecfe6294bc/msgpack-1.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9ddd28d3e9bbc602a9dced1591882c7fb9ab776eef8837da2c326fde19e2853", size = 463288, upload-time = "2026-09-29T02:32:30.375Z" }, - { url = "https://files.pythonhosted.org/packages/29/8c/456df77f00d701df9d6980ffb80291bce6e4e2e112e25a4dfae216f0715a/msgpack-1.2.3-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:62cc1a4ef0e553bac32c8342e1f04834aca7de276b92744eb7307db77759b890", size = 53347, upload-time = "2026-09-29T02:32:31.867Z" }, - { url = "https://files.pythonhosted.org/packages/9d/22/ce780be666f89b77cdb855daa9ec62e87bb7f69e9f403e4a5d83a2b2208f/msgpack-1.2.3-cp313-cp313-win32.whl", hash = "sha256:d2f9c4f85e47a44d26d5baf3b041eef23436e224d44eed273f01bd8a12048d9f", size = 68258, upload-time = "2026-09-29T02:32:33.163Z" }, - { url = "https://files.pythonhosted.org/packages/51/06/c3def9bc4db283103c5901b302ee2a4305cb1e69729244f94d9bd8f8e8e7/msgpack-1.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:bb89b5dc30469c84bbf8684826eb851d82412ca95690e111b9ac5e8fb343961a", size = 76569, upload-time = "2026-09-29T02:32:34.412Z" }, - { url = "https://files.pythonhosted.org/packages/12/9f/cef344073858b80adb92d6ea342e20b0eae7a8f6fe70281b69cf03707270/msgpack-1.2.3-cp313-cp313-win_arm64.whl", hash = "sha256:471e12a6a42498a31490c206e0069e343b6a7c35db540be73a879eb06f5be047", size = 71530, upload-time = "2026-09-29T02:32:35.892Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8e/f777f74e38731c428857933c8011596f2d2f3160c821152f23b6ffba862f/msgpack-1.2.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3a31905206722103a84c1f72633fe30692cff6732c9d262e09a27dbc468797c8", size = 92042, upload-time = "2026-09-29T02:32:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/a0/71/551608543ee5d590f7e8d522267665d6d9946866ad2a2a70a770f7c70793/msgpack-1.2.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3372475211a9ce1a23acefe512cb3e121d18c95dc74ed56cb1819ef40836ebf4", size = 90578, upload-time = "2026-09-29T02:32:38.883Z" }, - { url = "https://files.pythonhosted.org/packages/ea/11/6d78ce5a9a58bf9ba7b1b6a8f649173b030e6770c8019cf330b91825ee5d/msgpack-1.2.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9324c54995641c3d1f92a9d55093c8cde0ffa2fbc87a467a688ef60428393220", size = 454352, upload-time = "2026-09-29T02:32:40.34Z" }, - { url = "https://files.pythonhosted.org/packages/3d/08/feb9a196269ba7809f44f9117d9e4a601c41c313f6144fd0c337293a5488/msgpack-1.2.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8ef3a66e4b52d2d7fdd90df2984670124b2ff7546d76bb25dcf68ef47f7df58", size = 462562, upload-time = "2026-09-29T02:32:42.176Z" }, - { url = "https://files.pythonhosted.org/packages/f5/77/3a674f366def24140b103d1ffd4fd27b3d912a13e47da67422afa16bebb3/msgpack-1.2.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:902f3490db0e07a7d40b48536a85c9b28fbf1397e7e1658a45a55f958e303620", size = 418134, upload-time = "2026-09-29T02:32:43.693Z" }, - { url = "https://files.pythonhosted.org/packages/48/82/944e71f280577490d99a3951cbce21aa4cbe04e7ab42cb373fd668af883c/msgpack-1.2.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e51eca14fbb65c4e0a5a9657346962bd3dca78c08e04e3d4dee70ef48687d30", size = 445937, upload-time = "2026-09-29T02:32:45.739Z" }, - { url = "https://files.pythonhosted.org/packages/b1/ec/feddd629c4a3edf1395313680450c525086cceab56dec0d4de9da9ccb618/msgpack-1.2.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f42f146752eedb6765f07dcc04d72dab0a25779ec8d4a88c0085263ce114f22c", size = 416450, upload-time = "2026-09-29T02:32:47.558Z" }, - { url = "https://files.pythonhosted.org/packages/e4/59/263a10f8c4613ba0713f48cbda7695ac8dd6d6fab2fcbc9168f03f23a94d/msgpack-1.2.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0ed5823c4efc20fe87d3530665f40ec18a002be003114814c21235cc8d256207", size = 459546, upload-time = "2026-09-29T02:32:49.145Z" }, - { url = "https://files.pythonhosted.org/packages/1e/21/addcfa1e583cfc8a22fbdc57526621b5decd7ad676ae12e9150b7be1be5d/msgpack-1.2.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:2487453ca1b6104442c6442f9a1a8fee1fe8f428a70d99d4cba799108b304150", size = 53462, upload-time = "2026-09-29T02:32:50.708Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2c/3cb5c8524a1335ee27ca952c7ab78d375a16fea8e18ae3767ba0c880416c/msgpack-1.2.3-cp314-cp314-win32.whl", hash = "sha256:6df430419f2338cb71e4a34d6e64f83c88ccd321f91f40ba4513400b36d864ec", size = 70294, upload-time = "2026-09-29T02:32:52.037Z" }, - { url = "https://files.pythonhosted.org/packages/23/f9/9172ff3cdb85d160ad06df5e2708a5fce7682982a5eee8d31869b9f69d2e/msgpack-1.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:84a6616d396ec1bc18a1e83e67c96a393ec35dfe5e17434a5be7b9aa0fe988ab", size = 77778, upload-time = "2026-09-29T02:32:53.429Z" }, - { url = "https://files.pythonhosted.org/packages/04/e8/b4c23178bcf605ae17cec48a75530dd69d49b0a5a6f5f4df5c47d59f746e/msgpack-1.2.3-cp314-cp314-win_arm64.whl", hash = "sha256:7a003b02c6ee2eea6dfe0bb08818631e3597e69f0131f2a8250488a1cc553290", size = 73794, upload-time = "2026-09-29T02:32:54.763Z" }, - { url = "https://files.pythonhosted.org/packages/66/b1/92704be352c4f428b7e0a0e0fb210cb1aa2b1c42c102b8dc22d34b82fac0/msgpack-1.2.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ccea05b5542f6d283fef3f0a8e93a7f0be90af0ddeeef84c25c0216ba76dcae1", size = 93721, upload-time = "2026-09-29T02:32:56.342Z" }, - { url = "https://files.pythonhosted.org/packages/49/78/9c91f1e86cadcbc100b3780fd429c3715648704032a612e77a00646ebe79/msgpack-1.2.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b1631e12fe572e181cd77e831f69335d6cd5278eac22e3db3f33cf264ac2ac18", size = 94256, upload-time = "2026-09-29T02:32:58.056Z" }, - { url = "https://files.pythonhosted.org/packages/91/4d/270f9725921ae88a29d37a774a77ac24f0ef1411fc960a63f5a4665e81b4/msgpack-1.2.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e54394b7dbe2e12ab032d9d21feef7bb61a90a150a2623633ba3781ba69dcb1f", size = 471673, upload-time = "2026-09-29T02:32:59.886Z" }, - { url = "https://files.pythonhosted.org/packages/48/b8/eaa8d930f72dc1d1dd79511dc2ccf965922b059f2f0ed3b30aebac8c4b11/msgpack-1.2.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63bb7448a1e9111319ae2430c09a5596140c160422830d6271bc75730ff2ff9a", size = 466257, upload-time = "2026-09-29T02:33:01.517Z" }, - { url = "https://files.pythonhosted.org/packages/5b/5a/97adc805037bc7e24c4e2f711bbcd3b28be8ec9aea3e778f18208cfbdb46/msgpack-1.2.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:382bc88fe90f29f5ac8a0b65c7046ff255356f2f2f3186c30e370215736fa1dc", size = 418484, upload-time = "2026-09-29T02:33:03.402Z" }, - { url = "https://files.pythonhosted.org/packages/0d/7e/1c53302606fe436ab48ba539ebafafe4a6a9efe12c4f04dc7eb36912d93e/msgpack-1.2.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c77e27790ad72989db783d5303825fba0b71550f00a490efba35cde7dc4b719f", size = 454064, upload-time = "2026-09-29T02:33:04.977Z" }, - { url = "https://files.pythonhosted.org/packages/00/2d/9ee0170f638907b396c15c6cd26b3e54f869159efc6206683acfd8f696e1/msgpack-1.2.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:700bc0fc9e968a292b9137ee70e7a012f7e115bf0107ce45e3a88202788dfc1e", size = 417901, upload-time = "2026-09-29T02:33:06.489Z" }, - { url = "https://files.pythonhosted.org/packages/cc/d2/905c84490a75cd15a27065407cd085d201f7d392e1e0411f49f03fd31ade/msgpack-1.2.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5bd5f91ea75c45cafcc5433ba8fae59b708b736ec178d2441c40c499e9e079db", size = 459896, upload-time = "2026-09-29T02:33:08.361Z" }, - { url = "https://files.pythonhosted.org/packages/37/cd/4ce5809b9ab3b114d7cca64863e436820fa1614b49d55ccb93d49824ac2d/msgpack-1.2.3-cp314-cp314t-win32.whl", hash = "sha256:7995a7c6a62a1d6e7df211b4a16de513bd99fd053525050a319f80f44fb8015e", size = 75983, upload-time = "2026-09-29T02:33:10.023Z" }, - { url = "https://files.pythonhosted.org/packages/8a/31/853bb580744c24be0dbd8b090c3e6987dce466a1fc840fe50c0ac2ef9044/msgpack-1.2.3-cp314-cp314t-win_amd64.whl", hash = "sha256:bfe7d5b62cbe7aa664f0b3e2c49077f10fcdd06183d3014f8271ff3c5edbfbf9", size = 83757, upload-time = "2026-09-29T02:33:11.441Z" }, - { url = "https://files.pythonhosted.org/packages/0d/49/9f1b2ee484414eef9e21ee2b2b23b482bb71433ab9bac1da03cbda15ebf5/msgpack-1.2.3-cp314-cp314t-win_arm64.whl", hash = "sha256:1f585407f740a9eac04a3bb82c61d68a0ea78f90e29e670bfb086b9ce3a518dd", size = 78128, upload-time = "2026-09-29T02:33:13.063Z" }, - { url = "https://files.pythonhosted.org/packages/47/b8/50db4235407c3802f622b4ccdf65c6fe1e48d3c3eab6981fa6a9a5e53f11/msgpack-1.2.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:13221a6c81ebb8e43ea63a7251c35d54e4175cea37ebf3a62e911bdf42562a3c", size = 92111, upload-time = "2026-09-29T02:33:14.476Z" }, - { url = "https://files.pythonhosted.org/packages/15/56/50cf2a45c6163edafd737e2fd555103a26ce6748e1e241fb56ed445ea835/msgpack-1.2.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:0955b9000725573d1457c1676944b370dd9643c8d18f25bda5ac72913f850949", size = 90583, upload-time = "2026-09-29T02:33:15.924Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fd/8cc02f767c3bc94d2649c954d28dea935ce9398eb9c93ce2444bb9474cc1/msgpack-1.2.3-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c91762c48cd686dc9cf2b142c0bc544083952de32f5853d6624c956e54b85e5", size = 454751, upload-time = "2026-09-29T02:33:17.475Z" }, - { url = "https://files.pythonhosted.org/packages/80/c9/ddb896767808e3e022453d8dfae26fd52ed404b0aa6fb7f752d39c040208/msgpack-1.2.3-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f4ae8bd4ad9ba085fde95e95d055a896d19210238a4199a771a3cf36dceed49", size = 463597, upload-time = "2026-09-29T02:33:19.309Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a5/e7c261abf75783c07dcac89951cb31dd0c123bf02fbdeda0c67303e698d8/msgpack-1.2.3-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7013534a7163aa4f213c4d9864f1a8a7555daac6fcd48f699a198e29b436bfab", size = 422661, upload-time = "2026-09-29T02:33:21.093Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8e/466d5133f9e1c2e232e15e304f715b62f6f0e28332d18e37d975fe174315/msgpack-1.2.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:6a834097144aabe948b8ca9020a833e8026f7d0abbd0ec54bc7e50f45a8ce012", size = 445188, upload-time = "2026-09-29T02:33:22.877Z" }, - { url = "https://files.pythonhosted.org/packages/d4/b4/33e7ad987ee2f4b3d449a6cbf28f574ed222987ca7f65ad277072646ac5e/msgpack-1.2.3-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:d31864ba3933a589b6a00249f89c0eb422197f49128fc10da550e57e9cb0f377", size = 420451, upload-time = "2026-09-29T02:33:24.485Z" }, - { url = "https://files.pythonhosted.org/packages/34/2c/9d8be0d6c16e7e6131cd7da20257dd3da65473e3e6df0c00572fb10a195c/msgpack-1.2.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e15f70588f4db8cd10df0930145b186de70feb9db51710cd378b1399009655bd", size = 460624, upload-time = "2026-09-29T02:33:26.063Z" }, - { url = "https://files.pythonhosted.org/packages/6a/e7/3a04783582c6f44f398cbfcf5f07a111192126ec4e63edf7f5640143bf64/msgpack-1.2.3-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:b949cc25e4a09252cbcc54e66e507de914d0e94a3a7039bd54c299bf7037c098", size = 53474, upload-time = "2026-09-29T02:33:27.83Z" }, - { url = "https://files.pythonhosted.org/packages/68/fb/db07359851644e258609d84f8e4fe0030ef448c108e20afe73f2a3bf539c/msgpack-1.2.3-cp315-cp315-win32.whl", hash = "sha256:8ec7a1d49ca6c2569d722ab5ec86e90089b0713900aa31905b47b4c4d9e78ce0", size = 70344, upload-time = "2026-09-29T02:33:29.382Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e4/cf5584d2f2a2e4465d5896a855a3e75a34a20ab172360b3d42ad862dd1ce/msgpack-1.2.3-cp315-cp315-win_amd64.whl", hash = "sha256:79dfa38faf92f804aa61beec140d70b18418e1dde1778dbb77a87a4cce85aa8a", size = 77800, upload-time = "2026-09-29T02:33:30.941Z" }, - { url = "https://files.pythonhosted.org/packages/63/f9/518ad4e8a580027b507eafdd26de7aae661a714e43d7c111c212482e4a1b/msgpack-1.2.3-cp315-cp315-win_arm64.whl", hash = "sha256:ed899d73a22f286a72bd9528d63f2ab3030dbad8bf1527fc249319a50d61fb9d", size = 73871, upload-time = "2026-09-29T02:33:32.406Z" }, - { url = "https://files.pythonhosted.org/packages/a4/79/254d4c9ad642b2a3ba84e646787892b34cc815eb36c9976f67a1c4f38515/msgpack-1.2.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f56fba61b2516be7917cb00151f0d060b5b21184e3499bb57f0f7d9259bea124", size = 93370, upload-time = "2026-09-29T02:33:33.87Z" }, - { url = "https://files.pythonhosted.org/packages/3d/6f/5a2ba167646a25e84eaa8894e12935351e4331b80c28a9237ce6fe8d375f/msgpack-1.2.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:69ad12cedb674c73527bed869cddb42b742cac79a207a614202a4abaa24ea173", size = 93959, upload-time = "2026-09-29T02:33:35.503Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a1/2b44612e55f7cf5d5e4b580294959b4429bbbcb1991177888e3e18668137/msgpack-1.2.3-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db9fb67a3a2e75247bae569d34ebb5ff61c0448a4f0d6dbf991dae68af39b007", size = 467921, upload-time = "2026-09-29T02:33:37.023Z" }, - { url = "https://files.pythonhosted.org/packages/0b/6e/3309798ed1c11d7fcfdc7b946642685b0ff1588477925bc0d26bee7dcaae/msgpack-1.2.3-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2574ef81c1c8c38b10e330f3f9406fd09198a776b002030fafcf8e7647e9e06e", size = 467310, upload-time = "2026-09-29T02:33:38.799Z" }, - { url = "https://files.pythonhosted.org/packages/6f/79/9c799f489fa4146de4e00cfe9fee17afe33d8012f88ddffffea94f7c4700/msgpack-1.2.3-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fafc3b8898b432b841d30a61082c599fa7f4d06885f9dc58ad72259e12059fa6", size = 420178, upload-time = "2026-09-29T02:33:40.781Z" }, - { url = "https://files.pythonhosted.org/packages/94/c6/5850dc9cafcd2ea315692e65db0e222d20923dd55f44adf35061003de27e/msgpack-1.2.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a393e428f6ffb0dcb73308c1fff5593041c16ff42da66e5bac8a83a6107a54b0", size = 450248, upload-time = "2026-09-29T02:33:42.366Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d2/b4c806e3497fe21f0b353568266aec14ff735d092aea672de7b2955db03f/msgpack-1.2.3-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:d1c1e8989a855b7f1f2a64ec4a80b23a631822903952770813857b2e4f460471", size = 418431, upload-time = "2026-09-29T02:33:44.178Z" }, - { url = "https://files.pythonhosted.org/packages/b0/f5/f4ecc3ddac4d551bf2f3cdb283ec546dcc826fe7c500074be61aa273e08a/msgpack-1.2.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:e0bd394e999949c814f7912284243298de1b5a17b6a3dcb6cc8a79b156ffc4fa", size = 457543, upload-time = "2026-09-29T02:33:45.978Z" }, - { url = "https://files.pythonhosted.org/packages/a4/69/1c821d8386fae5cecc5fcaacf3de3947ff0a23f16bb481b5532b5868372a/msgpack-1.2.3-cp315-cp315t-win32.whl", hash = "sha256:3d4c807ed050fe3ddbea5ba7e9f63d7136871ce42861be1f50ff739f0e91047a", size = 75820, upload-time = "2026-09-29T02:33:47.596Z" }, - { url = "https://files.pythonhosted.org/packages/68/9e/41e2f7343a3764a9c1fb10c79f9a6a05db9df93dedd76401d1b511f5a685/msgpack-1.2.3-cp315-cp315t-win_amd64.whl", hash = "sha256:5f304123b90e8b2e49867981b7f6061612c39f50cca51ee88de007c084cf68d3", size = 83345, upload-time = "2026-09-29T02:33:49.325Z" }, - { url = "https://files.pythonhosted.org/packages/80/cd/0c3aa439bc7a7bf24684fef3a0ad776cba170e18ed94445e723bce42fce7/msgpack-1.2.3-cp315-cp315t-win_arm64.whl", hash = "sha256:f41ca154b7737b11893cdce3c78c61d703398a1cd54d4297bdad908392338a8e", size = 77572, upload-time = "2026-09-29T02:33:50.729Z" }, +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/b1/ea4f68038a18c77c9467400d166d74c4ffa536f34761f7983a104357e614/msgpack-1.1.1.tar.gz", hash = "sha256:77b79ce34a2bdab2594f490c8e80dd62a02d650b91a75159a63ec413b8d104cd", size = 173555, upload-time = "2025-06-13T06:52:51.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/83/97f24bf9848af23fe2ba04380388216defc49a8af6da0c28cc636d722502/msgpack-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71ef05c1726884e44f8b1d1773604ab5d4d17729d8491403a705e649116c9558", size = 82728, upload-time = "2025-06-13T06:51:50.68Z" }, + { url = "https://files.pythonhosted.org/packages/aa/7f/2eaa388267a78401f6e182662b08a588ef4f3de6f0eab1ec09736a7aaa2b/msgpack-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36043272c6aede309d29d56851f8841ba907a1a3d04435e43e8a19928e243c1d", size = 79279, upload-time = "2025-06-13T06:51:51.72Z" }, + { url = "https://files.pythonhosted.org/packages/f8/46/31eb60f4452c96161e4dfd26dbca562b4ec68c72e4ad07d9566d7ea35e8a/msgpack-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a32747b1b39c3ac27d0670122b57e6e57f28eefb725e0b625618d1b59bf9d1e0", size = 423859, upload-time = "2025-06-13T06:51:52.749Z" }, + { url = "https://files.pythonhosted.org/packages/45/16/a20fa8c32825cc7ae8457fab45670c7a8996d7746ce80ce41cc51e3b2bd7/msgpack-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a8b10fdb84a43e50d38057b06901ec9da52baac6983d3f709d8507f3889d43f", size = 429975, upload-time = "2025-06-13T06:51:53.97Z" }, + { url = "https://files.pythonhosted.org/packages/86/ea/6c958e07692367feeb1a1594d35e22b62f7f476f3c568b002a5ea09d443d/msgpack-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0c325c3f485dc54ec298d8b024e134acf07c10d494ffa24373bea729acf704", size = 413528, upload-time = "2025-06-13T06:51:55.507Z" }, + { url = "https://files.pythonhosted.org/packages/75/05/ac84063c5dae79722bda9f68b878dc31fc3059adb8633c79f1e82c2cd946/msgpack-1.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:88daaf7d146e48ec71212ce21109b66e06a98e5e44dca47d853cbfe171d6c8d2", size = 413338, upload-time = "2025-06-13T06:51:57.023Z" }, + { url = "https://files.pythonhosted.org/packages/69/e8/fe86b082c781d3e1c09ca0f4dacd457ede60a13119b6ce939efe2ea77b76/msgpack-1.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8b55ea20dc59b181d3f47103f113e6f28a5e1c89fd5b67b9140edb442ab67f2", size = 422658, upload-time = "2025-06-13T06:51:58.419Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2b/bafc9924df52d8f3bb7c00d24e57be477f4d0f967c0a31ef5e2225e035c7/msgpack-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a28e8072ae9779f20427af07f53bbb8b4aa81151054e882aee333b158da8752", size = 427124, upload-time = "2025-06-13T06:51:59.969Z" }, + { url = "https://files.pythonhosted.org/packages/a2/3b/1f717e17e53e0ed0b68fa59e9188f3f610c79d7151f0e52ff3cd8eb6b2dc/msgpack-1.1.1-cp311-cp311-win32.whl", hash = "sha256:7da8831f9a0fdb526621ba09a281fadc58ea12701bc709e7b8cbc362feabc295", size = 65016, upload-time = "2025-06-13T06:52:01.294Z" }, + { url = "https://files.pythonhosted.org/packages/48/45/9d1780768d3b249accecc5a38c725eb1e203d44a191f7b7ff1941f7df60c/msgpack-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fd1b58e1431008a57247d6e7cc4faa41c3607e8e7d4aaf81f7c29ea013cb458", size = 72267, upload-time = "2025-06-13T06:52:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/389b9c593eda2b8551b2e7126ad3a06af6f9b44274eb3a4f054d48ff7e47/msgpack-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae497b11f4c21558d95de9f64fff7053544f4d1a17731c866143ed6bb4591238", size = 82359, upload-time = "2025-06-13T06:52:03.909Z" }, + { url = "https://files.pythonhosted.org/packages/ab/65/7d1de38c8a22cf8b1551469159d4b6cf49be2126adc2482de50976084d78/msgpack-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:33be9ab121df9b6b461ff91baac6f2731f83d9b27ed948c5b9d1978ae28bf157", size = 79172, upload-time = "2025-06-13T06:52:05.246Z" }, + { url = "https://files.pythonhosted.org/packages/0f/bd/cacf208b64d9577a62c74b677e1ada005caa9b69a05a599889d6fc2ab20a/msgpack-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f64ae8fe7ffba251fecb8408540c34ee9df1c26674c50c4544d72dbf792e5ce", size = 425013, upload-time = "2025-06-13T06:52:06.341Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ec/fd869e2567cc9c01278a736cfd1697941ba0d4b81a43e0aa2e8d71dab208/msgpack-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a494554874691720ba5891c9b0b39474ba43ffb1aaf32a5dac874effb1619e1a", size = 426905, upload-time = "2025-06-13T06:52:07.501Z" }, + { url = "https://files.pythonhosted.org/packages/55/2a/35860f33229075bce803a5593d046d8b489d7ba2fc85701e714fc1aaf898/msgpack-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb643284ab0ed26f6957d969fe0dd8bb17beb567beb8998140b5e38a90974f6c", size = 407336, upload-time = "2025-06-13T06:52:09.047Z" }, + { url = "https://files.pythonhosted.org/packages/8c/16/69ed8f3ada150bf92745fb4921bd621fd2cdf5a42e25eb50bcc57a5328f0/msgpack-1.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d275a9e3c81b1093c060c3837e580c37f47c51eca031f7b5fb76f7b8470f5f9b", size = 409485, upload-time = "2025-06-13T06:52:10.382Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b6/0c398039e4c6d0b2e37c61d7e0e9d13439f91f780686deb8ee64ecf1ae71/msgpack-1.1.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fd6b577e4541676e0cc9ddc1709d25014d3ad9a66caa19962c4f5de30fc09ef", size = 412182, upload-time = "2025-06-13T06:52:11.644Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d0/0cf4a6ecb9bc960d624c93effaeaae75cbf00b3bc4a54f35c8507273cda1/msgpack-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb29aaa613c0a1c40d1af111abf025f1732cab333f96f285d6a93b934738a68a", size = 419883, upload-time = "2025-06-13T06:52:12.806Z" }, + { url = "https://files.pythonhosted.org/packages/62/83/9697c211720fa71a2dfb632cad6196a8af3abea56eece220fde4674dc44b/msgpack-1.1.1-cp312-cp312-win32.whl", hash = "sha256:870b9a626280c86cff9c576ec0d9cbcc54a1e5ebda9cd26dab12baf41fee218c", size = 65406, upload-time = "2025-06-13T06:52:14.271Z" }, + { url = "https://files.pythonhosted.org/packages/c0/23/0abb886e80eab08f5e8c485d6f13924028602829f63b8f5fa25a06636628/msgpack-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:5692095123007180dca3e788bb4c399cc26626da51629a31d40207cb262e67f4", size = 72558, upload-time = "2025-06-13T06:52:15.252Z" }, + { url = "https://files.pythonhosted.org/packages/a1/38/561f01cf3577430b59b340b51329803d3a5bf6a45864a55f4ef308ac11e3/msgpack-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3765afa6bd4832fc11c3749be4ba4b69a0e8d7b728f78e68120a157a4c5d41f0", size = 81677, upload-time = "2025-06-13T06:52:16.64Z" }, + { url = "https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9", size = 78603, upload-time = "2025-06-13T06:52:17.843Z" }, + { url = "https://files.pythonhosted.org/packages/a0/60/daba2699b308e95ae792cdc2ef092a38eb5ee422f9d2fbd4101526d8a210/msgpack-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196a736f0526a03653d829d7d4c5500a97eea3648aebfd4b6743875f28aa2af8", size = 420504, upload-time = "2025-06-13T06:52:18.982Z" }, + { url = "https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a", size = 423749, upload-time = "2025-06-13T06:52:20.211Z" }, + { url = "https://files.pythonhosted.org/packages/40/1b/54c08dd5452427e1179a40b4b607e37e2664bca1c790c60c442c8e972e47/msgpack-1.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4df2311b0ce24f06ba253fda361f938dfecd7b961576f9be3f3fbd60e87130ac", size = 404458, upload-time = "2025-06-13T06:52:21.429Z" }, + { url = "https://files.pythonhosted.org/packages/2e/60/6bb17e9ffb080616a51f09928fdd5cac1353c9becc6c4a8abd4e57269a16/msgpack-1.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e4141c5a32b5e37905b5940aacbc59739f036930367d7acce7a64e4dec1f5e0b", size = 405976, upload-time = "2025-06-13T06:52:22.995Z" }, + { url = "https://files.pythonhosted.org/packages/ee/97/88983e266572e8707c1f4b99c8fd04f9eb97b43f2db40e3172d87d8642db/msgpack-1.1.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1ce7f41670c5a69e1389420436f41385b1aa2504c3b0c30620764b15dded2e7", size = 408607, upload-time = "2025-06-13T06:52:24.152Z" }, + { url = "https://files.pythonhosted.org/packages/bc/66/36c78af2efaffcc15a5a61ae0df53a1d025f2680122e2a9eb8442fed3ae4/msgpack-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4147151acabb9caed4e474c3344181e91ff7a388b888f1e19ea04f7e73dc7ad5", size = 424172, upload-time = "2025-06-13T06:52:25.704Z" }, + { url = "https://files.pythonhosted.org/packages/8c/87/a75eb622b555708fe0427fab96056d39d4c9892b0c784b3a721088c7ee37/msgpack-1.1.1-cp313-cp313-win32.whl", hash = "sha256:500e85823a27d6d9bba1d057c871b4210c1dd6fb01fbb764e37e4e8847376323", size = 65347, upload-time = "2025-06-13T06:52:26.846Z" }, + { url = "https://files.pythonhosted.org/packages/ca/91/7dc28d5e2a11a5ad804cf2b7f7a5fcb1eb5a4966d66a5d2b41aee6376543/msgpack-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d489fba546295983abd142812bda76b57e33d0b9f5d5b71c09a583285506f69", size = 72341, upload-time = "2025-06-13T06:52:27.835Z" }, ] [[package]] @@ -1648,7 +1236,7 @@ wheels = [ [[package]] name = "nbclient" -version = "0.11.0" +version = "0.10.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, @@ -1656,14 +1244,14 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/a5/b3bae4b590c0cbcada2c63a34f7580024e834a8ba213e949a2f906705787/nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a", size = 62535, upload-time = "2026-06-05T07:52:41.746Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/c9/94d73e5a01c5b926c3fa2496e97d7a8dc28ed5a77c0b2ed712f1a62e6694/nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895", size = 25288, upload-time = "2026-06-05T07:52:40.115Z" }, + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, ] [[package]] name = "nbconvert" -version = "7.17.2" +version = "7.16.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4" }, @@ -1681,14 +1269,14 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/53/6a/252c7620305a9661205aed7a2a4b3592f5207bfca56ad11b7dea2c5ec2f6/nbconvert-7.17.2.tar.gz", hash = "sha256:344a218e8595117ce37396ed025d994f146d076226ebac59255a2fa085ab24d8", size = 865989, upload-time = "2026-10-12T09:11:19.583Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/fd/a8d457af68848a8e5c12dd1d84ff35c415db471af78280e0703db4efbb12/nbconvert-7.17.2-py3-none-any.whl", hash = "sha256:6a143c11c00bf831604da4b1be4347d36ea52367057eb920135d69bc2862fed2", size = 262094, upload-time = "2026-10-12T09:11:17.215Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, ] [[package]] name = "nbformat" -version = "5.11.1" +version = "5.10.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastjsonschema" }, @@ -1696,73 +1284,55 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/31/72/b3446efab8756e7df4b8ec587f8e611cb5a7249e4323db480802f1d3be04/nbformat-5.11.1.tar.gz", hash = "sha256:32d4521c68c6e7d5b29c76defaeed9f42ea733142b9b19f88277ce10390b9c4d", size = 147775, upload-time = "2026-08-17T08:10:51.942Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/69/ee613f74085ca7103f79cd08d579c4f3177d1d26e5d3d9528d2d6536a707/nbformat-5.11.1-py3-none-any.whl", hash = "sha256:cc6698fa75f4fab8755ead786317815f13a6fee3b53311c0abb1a8b51d52f7ec", size = 79849, upload-time = "2026-08-17T08:10:50.18Z" }, + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, ] [[package]] name = "neo4j" -version = "6.4.1" +version = "6.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/d1/bc40a291c60b06738ce92d5f0259d348eee1f07ba10d569a881c848c8afe/neo4j-6.4.1.tar.gz", hash = "sha256:fac99b7cb9679b93ef97dc23f22a3f0e7c3feb2db223eddfd2521f27005cfeaf", size = 287897, upload-time = "2026-10-15T10:47:26.666Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/aaa4ac19adae4b01bc742b63afd2672a77e7351566f02721e713e4b863ee/neo4j-6.2.0.tar.gz", hash = "sha256:e1e246b65b572bd8ea97f9e0e721b7d40a5ce53e53d0007c29aef63e4f9124d9", size = 241459, upload-time = "2026-05-04T07:35:41.428Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/69/3036bdcacfba561c6ef4b00fe72529e0a1b6241a6b2de82572a0940a276b/neo4j-6.4.1-py3-none-any.whl", hash = "sha256:f56a281c74355522fc2642df8919bec450115431531b8f3f6fe1cc17acb57a27", size = 390684, upload-time = "2026-10-15T10:47:25.236Z" }, + { url = "https://files.pythonhosted.org/packages/e6/cf/1c3795866cefaac6e648d4e98c373cafd97810f6e317c307371007ab4abb/neo4j-6.2.0-py3-none-any.whl", hash = "sha256:b87abdd13a5cc2e3bd51026926c2f20ac38fa3febe98c340520dce19e97388d0", size = 327824, upload-time = "2026-05-04T07:35:39.604Z" }, ] [[package]] -name = "nest-asyncio2" -version = "1.7.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/32/2c/70e3b6bb2189cfd260280b7e1042bd622949a258663f95e887fada4ac1e6/nest_asyncio2-1.7.4.tar.gz", hash = "sha256:995b1409d926ec55e0876ea39a69bffdd8852cf1db3652c177e8c8ffdbcaf3cc", size = 16891, upload-time = "2026-10-07T22:31:50.507Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/ed/559d2915dce85794bc0c36064043da170da50cd98746dcbddd85d5932017/nest_asyncio2-1.7.4-py3-none-any.whl", hash = "sha256:86e77b52c3d1496b294af3c944b44213b9b82a12a5ee590c0acc4ca4692ef6c7", size = 8543, upload-time = "2026-10-07T22:31:49.245Z" }, -] - -[[package]] -name = "networkx" -version = "3.6.1" +name = "nest-asyncio" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11.5' and python_full_version < '3.12'", - "python_full_version < '3.11.5'", -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, ] [[package]] name = "networkx" -version = "3.7" +version = "3.5" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", -] -sdist = { url = "https://files.pythonhosted.org/packages/dc/76/3af777226b63a5e64a6b36b1ec5855c14e2b94a37096d4760e595fc43511/networkx-3.7.tar.gz", hash = "sha256:fd77a511bd90f39f3d016351345b52cf5319b813bdca01de3f755d3cca62e96a", size = 1866482, upload-time = "2026-09-21T16:45:16.974Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/cd/fe58041e9011f307c490e3e17dd48cc516448f7c698a3f2d9d9d65d7e6a8/networkx-3.7-py3-none-any.whl", hash = "sha256:e3fd2c13a7814cee3746340d8d7f8598a67f16a58bf47fb7f8793fab6efca1b0", size = 2142205, upload-time = "2026-09-21T16:45:14.609Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" }, ] [[package]] name = "notebook" -version = "7.6.3" +version = "7.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jupyter-builder" }, { name = "jupyter-server" }, { name = "jupyterlab" }, { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "tornado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/ac/aedb759dc683dcd129f6c75271bab5eb23020b0f7969163c726343718e1e/notebook-7.6.3.tar.gz", hash = "sha256:e2c08e469c0ae20bb0b3214f0ab77e79653317a2f8e5b34c10361c66874a5b50", size = 5501618, upload-time = "2026-09-21T18:07:24.261Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/4e/a40b5a94eb01fc51746db7854296d88b84905ab18ee0fcef853a60d708a3/notebook-7.4.4.tar.gz", hash = "sha256:392fd501e266f2fb3466c6fcd3331163a2184968cb5c5accf90292e01dfe528c", size = 13883628, upload-time = "2025-06-30T13:04:18.099Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/f7/907b98438cf00bdc4e296570058f29a347214bb42338a48e3b7eae58ae2a/notebook-7.6.3-py3-none-any.whl", hash = "sha256:ad7e0eb765fba836cd4a2ab0c7a3a26cde1d91665fbf6f533b6ae7b2de6d88d2", size = 5548452, upload-time = "2026-09-21T18:07:21.563Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c0/e64d2047fd752249b0b69f6aee2a7049eb94e7273e5baabc8b8ad05cc068/notebook-7.4.4-py3-none-any.whl", hash = "sha256:32840f7f777b6bff79bb101159336e9b332bdbfba1495b8739e34d1d65cbc1c0", size = 14288000, upload-time = "2025-06-30T13:04:14.584Z" }, ] [[package]] @@ -1788,11 +1358,11 @@ wheels = [ [[package]] name = "packaging" -version = "26.3" +version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] [[package]] @@ -1815,11 +1385,11 @@ wheels = [ [[package]] name = "pathspec" -version = "1.1.1" +version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, ] [[package]] @@ -1836,56 +1406,70 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.13.5" +version = "4.3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/e6/d0abbb256b44e6a05748c6942511ff67db8dbb068de0c35b24bf1b395b09/platformdirs-4.13.5.tar.gz", hash = "sha256:05831adf87d392760f4b5c3a0a95579ab5a10b18b9b9bd43680dcb47544788a0", size = 62362, upload-time = "2026-10-19T01:02:11.778Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/8a/1d8cb3842909dc193a73835adedf412e32e18f8ffd59f43983949622fe6f/platformdirs-4.13.5-py3-none-any.whl", hash = "sha256:53d3ec4280b815c1e0b02edad7f9ee8fda1ba9c0865dd9c2e6e63849ce82fc1e", size = 32779, upload-time = "2026-10-19T01:02:10.17Z" }, + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, ] [[package]] name = "pluggy" -version = "1.7.0" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/db/7fc19e6f2dc92a966727031389fc2e08b558f0f25eb7403c1119ad4713cd/pluggy-1.7.0.tar.gz", hash = "sha256:d1eaa46ebb595891b860ab086b4d09c8588af65ebd4361b8e8f4bb8920b90ba8", size = 123304, upload-time = "2026-10-15T09:50:58.343Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/9e/2b38731e0fc536806f16490e1a12d7f0dc2a1235aa8cc07bcc75416a7daa/pluggy-1.7.0-py3-none-any.whl", hash = "sha256:7dd7b0d8832ba3cb632c306926ded123429211b83641b35dc5c41ad2d34f9bec", size = 27082, upload-time = "2026-10-15T09:50:56.808Z" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "prometheus-client" -version = "0.26.0" +version = "0.22.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746, upload-time = "2025-06-02T14:29:01.152Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, + { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694, upload-time = "2025-06-02T14:29:00.068Z" }, ] [[package]] name = "prompt-toolkit" -version = "3.0.53" +version = "3.0.51" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, ] [[package]] name = "protobuf" -version = "7.36.2" +version = "6.31.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797, upload-time = "2025-05-28T19:25:54.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603, upload-time = "2025-05-28T19:25:41.198Z" }, + { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283, upload-time = "2025-05-28T19:25:44.275Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604, upload-time = "2025-05-28T19:25:45.702Z" }, + { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115, upload-time = "2025-05-28T19:25:47.128Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070, upload-time = "2025-05-28T19:25:50.036Z" }, + { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724, upload-time = "2025-05-28T19:25:53.926Z" }, +] + +[[package]] +name = "psutil" +version = "7.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/89/5b8517baa72f84a67b8a307ba953c91057af618bf40bf676f3c03551f8f0/protobuf-7.36.2.tar.gz", hash = "sha256:497d0463ff3316681da6c0b9e8d06cb465d61abce00b613ab42226175644d1bb", size = 512737, upload-time = "2026-09-17T20:07:59.326Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/72/98342feb672507c8f3a69e34b4fa8961f608edba5c1a48a6f47156d92cb5/protobuf-7.36.2-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:cbc70b17ee27e28894c7fee8bb04be1abead49e936bc70eb60052531eee2079e", size = 456039, upload-time = "2026-09-17T20:07:51.542Z" }, - { url = "https://files.pythonhosted.org/packages/b6/ea/91fdf7c2b8bbd49cde056f00a9df6773532987e1c00fe2830b895af95c7e/protobuf-7.36.2-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:e11e1f0180583a2af89db6a2ecd9e8dc40aa6d2988ca175bfd0e6d12ea72d74e", size = 344219, upload-time = "2026-09-17T20:07:52.914Z" }, - { url = "https://files.pythonhosted.org/packages/17/ab/5fd5f8ece73fad885c5a09aa849b32d70472f954ba3a92d3bb5974ea953b/protobuf-7.36.2-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:f4fee11ec330d238b34a05c9b675f693c20415d1c5bd7d5320cc2f8a798eb9cf", size = 357223, upload-time = "2026-09-17T20:07:53.985Z" }, - { url = "https://files.pythonhosted.org/packages/db/f3/3996583dd2906297a637af12114deddf7658af6e683fedb83be061983fb5/protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:89f23aa53c24553a2416fd4fd1ec06f74fa42b14b546d8883128813f775bbfd2", size = 343223, upload-time = "2026-09-17T20:07:54.931Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1b/dcc64f358fcb51811b58ae40b3d28f820725f116d86487cc20bd4b130701/protobuf-7.36.2-cp310-abi3-win32.whl", hash = "sha256:912c1221170e16c08d1f086762f563dd61ff83c18b5fa6652952dfaded66f728", size = 442998, upload-time = "2026-09-17T20:07:55.826Z" }, - { url = "https://files.pythonhosted.org/packages/8a/55/b77bda4e5e5f5971fb51b07663694690e9afdb9402136c16a522bd621cad/protobuf-7.36.2-cp310-abi3-win_amd64.whl", hash = "sha256:a300819d441e078a5608c0d3c709796bb548136058fda017ae51d425b44fd353", size = 456514, upload-time = "2026-09-17T20:07:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/e4/04/d52c7016b04b6c5108f26691f9d33ec82a9b65d041f1a9c771137693d618/protobuf-7.36.2-py3-none-any.whl", hash = "sha256:bdb3a345d48db958e6ce1f18e508beb0cc981d64f24088427549c866cd039f1e", size = 179806, upload-time = "2026-09-17T20:07:58.211Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, ] [[package]] @@ -1899,34 +1483,34 @@ wheels = [ [[package]] name = "pure-eval" -version = "0.2.4" +version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/9f/abfd2959e9261dd5217ca8551d4de211ca6ab26fe9b72cf44731ff6c4442/pure_eval-0.2.4.tar.gz", hash = "sha256:260c2774686e651b79f8b8e7fc9d80b3599ea6a66334b47d5f4abb69fc2c0ea1", size = 20563, upload-time = "2026-09-10T21:41:22.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/18/83376915176eb058cb86470eb7396388a13350b09a8f233a79303bbcbc5b/pure_eval-0.2.4-py3-none-any.whl", hash = "sha256:96cae060a313cfaad51bb761278bfb0e62dc0248d9315a81173752dc546cd37a", size = 11893, upload-time = "2026-09-10T21:41:21.532Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] [[package]] name = "pycodestyle" -version = "2.15.0" +version = "2.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/86/df/178e41c9ed0ff33c23b3f3757e4e658c889f9abc5ad76ece6cd607b12e9c/pycodestyle-2.15.0.tar.gz", hash = "sha256:318f5db083869b4c4dad922d0b11124fb27ab181b6730b93371da671e31bd50e", size = 39765, upload-time = "2026-09-22T22:15:34.926Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472, upload-time = "2025-06-20T18:49:48.75Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/e2/480bcdb153feecde4d736b18c908c7eee4846f11d7547d2e0c71499af630/pycodestyle-2.15.0-py2.py3-none-any.whl", hash = "sha256:12fd2f73c7b8ee8845a0431111df8faf4c1a07d6e64e2ee7f0c74014dab14181", size = 31583, upload-time = "2026-09-22T22:15:34.007Z" }, + { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, ] [[package]] name = "pycparser" -version = "3.12" +version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cb/27/eeb9f307bf07060f3d9f9aa0fb8c15b01bdfded0a941e4b2719c7f94cacd/pycparser-3.12.tar.gz", hash = "sha256:f03387877eab82ce01bbdfd0ba7252ee55a90b1c708d5129e2ce915475cf1db6", size = 158785, upload-time = "2026-10-22T13:40:03.56Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/ae/315bbeee126a769cbde43cf4908acb4b40408d8bf8bbf334dd7368d8dadf/pycparser-3.12-py3-none-any.whl", hash = "sha256:a076f3f489b39b43ed13563a1dafe42447445bec2e294154ec5c57fcdda4c85e", size = 62600, upload-time = "2026-10-22T13:40:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, ] [[package]] name = "pydantic" -version = "2.14.1" +version = "2.11.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -1934,165 +1518,97 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/0b/8e10b2e693af8ec54346a14caf36221334775975a747c9ceaa3f8371d96d/pydantic-2.14.1.tar.gz", hash = "sha256:94f478203dd03404682a1ada216965651dd74b1d2d5ffd62e00e0837caab5c26", size = 900362, upload-time = "2026-10-11T18:37:55.396Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/35/ea/a56b9fe5066f3537b7882f77e9c5dfb26d8c2eefdaed9b5fc73d57b4dc22/pydantic-2.14.1-py3-none-any.whl", hash = "sha256:9195d967ec791692a04438115466764fb8b9a27b31f14a760437694f40d6b454", size = 488106, upload-time = "2026-10-11T18:37:53.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, ] [[package]] name = "pydantic-core" -version = "2.50.1" +version = "2.33.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a6/24/af4ec4be49fbc810f35b0bdcacc3d433b56bbfa469fd3bfd4ae116cd9bf1/pydantic_core-2.50.1.tar.gz", hash = "sha256:e50d7b94baac6c7d09927fa5ca5800a0c7ee5015c7fcff65beb3a1931b5a6e09", size = 513515, upload-time = "2026-10-11T18:35:44.82Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/1b/ca81811da3d2aea724fb3c4ba6b83f50ab8f210576306ccd601973142d35/pydantic_core-2.50.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c531166c42ea7bdfecc8c50049581f05dd1993b09cc7c52bb36a14e96deaec7d", size = 2152145, upload-time = "2026-10-11T18:31:58.046Z" }, - { url = "https://files.pythonhosted.org/packages/59/20/938ef7e0541af0a314e2f9d63848dbd1656ba2ebfe5ca0469f7ebee00d5e/pydantic_core-2.50.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b6d0c2183008c188e19f4906d426b293bdc4f67ab17df8e180fe16cda208fa71", size = 2045761, upload-time = "2026-10-11T18:31:59.35Z" }, - { url = "https://files.pythonhosted.org/packages/2f/4b/456497fe2affa18f49b226e89bde31e8a204751ee343dd9beaac5438123e/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94be440c03fede26969a5ce75468e0e6a9927a1b46d9b679ee8adc1b057b0350", size = 2049557, upload-time = "2026-10-11T18:32:01.121Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9d/cd5dfe13928f55e236dff3a1bee06721d318ca6c955d9ca993b0a5d09f39/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:36c426eac0af8d1529ff8467e612b933346caec1fdc0d774f78f67a1a11e16c1", size = 2188153, upload-time = "2026-10-11T18:32:02.442Z" }, - { url = "https://files.pythonhosted.org/packages/fb/8d/d0b25bc484f8d9136ea76ece69e0b2d24ab370cc2e7bbd1b79e61723b763/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028e2f212273d4a39b1ec1e0de8166b1165a65fc0f1111452a9d94fc7c625c63", size = 2388308, upload-time = "2026-10-11T18:32:03.767Z" }, - { url = "https://files.pythonhosted.org/packages/c5/64/6513cac7c9f78492abafa01d57a69de1d246bf3085fd7b0330bf14b025b3/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6f0cc1bb9900dc558960894adeb30b0c083366fc1d69b856209fb2ca5c36fe5", size = 2431187, upload-time = "2026-10-11T18:32:05.159Z" }, - { url = "https://files.pythonhosted.org/packages/ed/60/7f2ae89c37e69a3dc0da9ff57b0388c285542c688d05f36767770429de85/pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8812592c85d0edf423f10eadcef42716d71e8219085ad9e85b775057b7306133", size = 2157623, upload-time = "2026-10-11T18:32:06.616Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/e3a71373b85a7973099b9a229a4302c7792262717e0b4997e41c01f7dd16/pydantic_core-2.50.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:bbce99252ba3167b2b6277f1829d5bf4b43b754524bddf7f944707c3db7d2253", size = 2254539, upload-time = "2026-10-11T18:32:07.968Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d5/5b620aaf40dc631d911565b64d49d3fa8422027c046a7a96dc4e4921ae98/pydantic_core-2.50.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:476f6ed8e43cd1e0b460920e23571700872b284e77331cb30c4faf459cf48a4b", size = 2267344, upload-time = "2026-10-11T18:32:09.399Z" }, - { url = "https://files.pythonhosted.org/packages/e0/48/f46baf4580d8a56ca4782aa65842e16d3cf39736b29fcce8e9c0521b3422/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2cbd1b75b09e976ed0d6b6ca297675632ca35df86130088457cdc60ef36970ae", size = 2300877, upload-time = "2026-10-11T18:32:10.903Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9d/e7d28505e6092c1fe075838a4f793ccbe6dd676e44ab16175815ee06cfe0/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:5958c72adb417c39b12ac87525ac60b0d73315fcdc59e21f44ee4a5e2512c9ef", size = 2464270, upload-time = "2026-10-11T18:32:12.329Z" }, - { url = "https://files.pythonhosted.org/packages/22/b1/3bf63b82efd93ebc9968f9c12fc46037a28bcb452c88e4688f33e5ff7dca/pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f9e8a6c4ab04b78d61f78627370d834eb004b2869dcb28cfffa647b4ea1980", size = 2478653, upload-time = "2026-10-11T18:32:13.735Z" }, - { url = "https://files.pythonhosted.org/packages/28/17/26d1e4b9c2ba6a92b7dc75bbcb99ef44456b7e3af1bced868403667ea7d3/pydantic_core-2.50.1-cp311-cp311-win32.whl", hash = "sha256:4be846f55c9477f5f3ddde8f2ce941137e16862a56d018ed885d422bb6ae02f2", size = 2120246, upload-time = "2026-10-11T18:32:15.591Z" }, - { url = "https://files.pythonhosted.org/packages/24/65/3e875e7991eaecd4d70686293ff0d8a99aa8f93dc295e6a21c3d702912fb/pydantic_core-2.50.1-cp311-cp311-win_amd64.whl", hash = "sha256:0048b6dddc8ef4b64fccaad878bd143b0c3882ea9936279dc11d613f6b7dd1bc", size = 2176332, upload-time = "2026-10-11T18:32:17.153Z" }, - { url = "https://files.pythonhosted.org/packages/ab/5c/58dbd17c61f209d91c70f549eb7a3bbec7023e89ea12dead091462d6d658/pydantic_core-2.50.1-cp311-cp311-win_arm64.whl", hash = "sha256:6a733778df2f7087ec1100ed0b41533e4f3001976e99570fa34f57c66e7f8e3e", size = 2182471, upload-time = "2026-10-11T18:32:18.49Z" }, - { url = "https://files.pythonhosted.org/packages/ee/94/101b49a6c63f99586755690696eae14532772587d9e39e93f7b8d28a49da/pydantic_core-2.50.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:704075d10b74f2f3c6e15407c696d88701df35fc8953f434a431add0d0074db0", size = 2222428, upload-time = "2026-10-11T18:32:20.228Z" }, - { url = "https://files.pythonhosted.org/packages/db/a3/f8b1b39349c33037c73d7a1b794c9c29d8f07d5bd2b74399c1375a529cc6/pydantic_core-2.50.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e8e1d6ce820aa23317e8209a86bd65a540973c12dc7552b48a4f6c8e9926815e", size = 2025779, upload-time = "2026-10-11T18:32:21.723Z" }, - { url = "https://files.pythonhosted.org/packages/d2/2d/862a7d115305cc621358e51ba13f296e0ffdf4fbd984be9f63bc7862730b/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c18db21573bd2c6489f9a544b7499f0df2853958c568e5e783536ee1f690af41", size = 2048429, upload-time = "2026-10-11T18:32:23.3Z" }, - { url = "https://files.pythonhosted.org/packages/c0/7d/fed95d18bf2b5abe2d5ab2bbec4184bfc22b6805994a33ccdae8edffd25a/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb57f304525a5e3c13333b772bf9a473f36326e9c821b2e8e1b2fd36f80ae2c3", size = 2173274, upload-time = "2026-10-11T18:32:24.697Z" }, - { url = "https://files.pythonhosted.org/packages/93/1e/c6f22ceac65dc3d291ff79bea0eb74cbd1de8b128f01fee48af03bcea1e1/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a27c09d86600f1bf2fe3f37e1ae697faf3143931c09322cd799da94deee923b5", size = 2360403, upload-time = "2026-10-11T18:32:26.281Z" }, - { url = "https://files.pythonhosted.org/packages/2c/97/190b5b6bfe4c72f265feb657913eb30749193927a5ad7b83cfa7866a25a2/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46b3301d3b5c886f77de7546e47274a5842c622ea2020b8c6524c6b66913b4a6", size = 2439799, upload-time = "2026-10-11T18:32:27.844Z" }, - { url = "https://files.pythonhosted.org/packages/90/24/48cd98388e4ac2c08d0800af36d15413db15e20387f1038123a2c86cb2f6/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ba4e9d8210d941c200431a56b2c0400b131865947903937ed3ec5404307d2e", size = 2160157, upload-time = "2026-10-11T18:32:29.553Z" }, - { url = "https://files.pythonhosted.org/packages/00/86/d909133d0b9979ed14c20f110f21124a0e346caf071bd66ac5af3009062b/pydantic_core-2.50.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:e5faeaee74a57d32b3ab3aebad2e348f06d3ba946fc5d28c1728455f00a3d13a", size = 2229523, upload-time = "2026-10-11T18:32:31.027Z" }, - { url = "https://files.pythonhosted.org/packages/90/31/4b43f08131b2098e73a852fd932063385f3103b33839fd9d1abdb89e673d/pydantic_core-2.50.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3cda0e538208e5d722bbf3698b24f19c0a7d05bc8d5f8a7f9b121ea7fa243d9", size = 2242700, upload-time = "2026-10-11T18:32:32.622Z" }, - { url = "https://files.pythonhosted.org/packages/88/77/de39658569dc7a4c293d110a89629f61145e7538f00d1e4280c28debefd3/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:57f51b31ff826e2859120cf4737c5a758a48d96f3e97da40ccee1796d58078ff", size = 2278452, upload-time = "2026-10-11T18:32:34.165Z" }, - { url = "https://files.pythonhosted.org/packages/46/bd/1eeb9e4e791e81210ef9096f58080b32ba15b5b13c108d50aaa3f8ce9f73/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8daa7ee75245d43ad7d747e5c9ecc1b1d06552f72b14887e9276f787d57375f4", size = 2450098, upload-time = "2026-10-11T18:32:35.547Z" }, - { url = "https://files.pythonhosted.org/packages/1c/e6/b2accfdff17e5a88d6358536702146de00f9339adaa4d5bbe1ee93cb4832/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:acbf31f37c53a5ac0c34706c80b4f5107ba20b05fdd3816124bf236ef0c57dd2", size = 2476839, upload-time = "2026-10-11T18:32:37.119Z" }, - { url = "https://files.pythonhosted.org/packages/3b/7e/c8a83eb5d2cd42c2e13507150fb777b1edea5a018adc9cbf2858a1d08285/pydantic_core-2.50.1-cp312-cp312-win32.whl", hash = "sha256:45b11cac094aa25725581d9304eee93c9028516b9ea80dd9e175e13a5a2c840e", size = 2101425, upload-time = "2026-10-11T18:32:38.593Z" }, - { url = "https://files.pythonhosted.org/packages/c5/17/8bbd530b8659e9d963f5b16f6cb8e159f4cd174b4d6304e48969ab12dba8/pydantic_core-2.50.1-cp312-cp312-win_amd64.whl", hash = "sha256:132529c83901437ff642f585216831bf5fd7a91df66829907e155192ead62498", size = 2172522, upload-time = "2026-10-11T18:32:40.112Z" }, - { url = "https://files.pythonhosted.org/packages/af/9f/a79d690b127e4e3cff143d031538ab9aa715f6b2fbeecbd07cd6f2bf9fb7/pydantic_core-2.50.1-cp312-cp312-win_arm64.whl", hash = "sha256:4e834f6a8e4ff772dcc34f58ef5504147a3ea5b0f4eeb13b0f8eb2ca75ac57f1", size = 2161366, upload-time = "2026-10-11T18:32:41.606Z" }, - { url = "https://files.pythonhosted.org/packages/ae/57/0e237d7091d2cd44a35d243b7344227f90440166860469cd036afc23a04d/pydantic_core-2.50.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d5e062c01286d861fd6a1c4ff6e063547b3e713067f2df033c0ff97ac2ca006b", size = 2222774, upload-time = "2026-10-11T18:32:43.103Z" }, - { url = "https://files.pythonhosted.org/packages/f7/b9/c720e56858d4e1539503297ed37063e0c08e0f3541c41b777f6a800f75fa/pydantic_core-2.50.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c003c3b7f49debb893d2d85ae099ac5959c9839e2f330fadb1fcdf7a6594482", size = 2024738, upload-time = "2026-10-11T18:32:44.587Z" }, - { url = "https://files.pythonhosted.org/packages/4d/b8/fbfc25875219cc060e613170ff10e850c6d8924beb4910da57c2ee3ba1d2/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:409e0ea40ec30d9158f33574fd758e689f6045a0f2596701828c27816ca9687d", size = 2047049, upload-time = "2026-10-11T18:32:46.164Z" }, - { url = "https://files.pythonhosted.org/packages/d7/43/34210124d504c553688f2f04b48500b131237528ac545b445e0d6d30e0d5/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:131059670f1d2444269b8585cb888963994871932447c08b39ac6a51fcfef658", size = 2173415, upload-time = "2026-10-11T18:32:47.722Z" }, - { url = "https://files.pythonhosted.org/packages/65/cf/6e178e8fdc11da5965bef980983bf46326a42f436871dd51ba0a57f39df1/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dbcbee53bf17196a7f745aa9bf5a9603953a1e365b1f020be3207c676a3e7c4", size = 2361719, upload-time = "2026-10-11T18:32:49.217Z" }, - { url = "https://files.pythonhosted.org/packages/11/14/bd5169d356aa91bf777e28ba0b281c192d286d03c2812c9c9db023a2f00e/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:325c23f3e35cfbf0fe3486fa5f7260d1e45885173002d30a28ca019994124255", size = 2439803, upload-time = "2026-10-11T18:32:51.025Z" }, - { url = "https://files.pythonhosted.org/packages/1c/bc/d79d000e5203ebef39af839f2ce77a777fcad6e08ad26af9a2fcd114ffc8/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17e722e156d0444ecaefbe640bdb60928752bf2013e2b7a11cdb099aaae19bec", size = 2158402, upload-time = "2026-10-11T18:32:52.714Z" }, - { url = "https://files.pythonhosted.org/packages/1b/a5/4902cb5fd599422c130bd3124ab31ee8b771199bd56662702eed07d3fec7/pydantic_core-2.50.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:aa8224f10880d9bf1b5993988ba153d42a8b4f3f4f511f93b1f09c93ff613c72", size = 2229755, upload-time = "2026-10-11T18:32:54.126Z" }, - { url = "https://files.pythonhosted.org/packages/1a/f5/c1481f8669f6060d89110c9b1374173fc8767ca276b84f4870bd8acd5e3f/pydantic_core-2.50.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:41bc8237121bd8dc8d888dfd6279fc166ffc88c1f1bf3a8bf00869680533ca4c", size = 2242303, upload-time = "2026-10-11T18:32:55.641Z" }, - { url = "https://files.pythonhosted.org/packages/04/f9/77fc3c7653ba9b6e42049e17e96b25388187d4a7c274ab1cb07f58ac8419/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:45c6266d071c241f2a168d45bf8c54344f0effce35e7e6b73afdec11f3687568", size = 2278345, upload-time = "2026-10-11T18:32:57.38Z" }, - { url = "https://files.pythonhosted.org/packages/95/9b/0579c5d12e7f2b16b27e6782427987341fcce07b0725e02ddb0b74add0c4/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:1deeacb112d14d3f4fcb16b165f7dbaf76c70ba6e82f37ba042bdab51970a0b8", size = 2449947, upload-time = "2026-10-11T18:32:58.896Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ac/1b677db91eba54cc5922f4de6edc46ba45c2bd712dfdc0130382d158e214/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c96fd793b73d1b92e65570132505498fe7b21eaef73cdf74e67e5dfba7ac9e4", size = 2476889, upload-time = "2026-10-11T18:33:00.665Z" }, - { url = "https://files.pythonhosted.org/packages/4d/2a/3a9f6624ee3ea9ccba5249dde11418bb4c35780a7a92608f8768bd3fea39/pydantic_core-2.50.1-cp313-cp313-win32.whl", hash = "sha256:06ead20d39ffd6f2f6f2a8f8a6de67ff8bb1b4f14a8a30e058502514ee2ac685", size = 2101118, upload-time = "2026-10-11T18:33:02.329Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1f/323f78ddd9d9938aac420c1abb4e8ba799fc8bdab0acc67c0593b837c979/pydantic_core-2.50.1-cp313-cp313-win_amd64.whl", hash = "sha256:7816e98acc08119dc0f340ab167048ecc54126316330c1f0caf7c6756c88e28f", size = 2170840, upload-time = "2026-10-11T18:33:03.919Z" }, - { url = "https://files.pythonhosted.org/packages/cb/09/8497c52a739ae425c3ac2f7f56414cbc711c67d374346174f40fe2062644/pydantic_core-2.50.1-cp313-cp313-win_arm64.whl", hash = "sha256:c17799a62c142d61b8a3c51752a7cbc87fe2ad4ccfab10e628a77b405075c662", size = 2161633, upload-time = "2026-10-11T18:33:05.518Z" }, - { url = "https://files.pythonhosted.org/packages/49/33/28b96e81677153715e3eafb9f26663a80841e859fde282a380359b0d3fa1/pydantic_core-2.50.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1cf41f1ae3fa155cf167a72689ad044bcc1e3c97e064123677149bdfb5dafc4a", size = 2224428, upload-time = "2026-10-11T18:33:07.153Z" }, - { url = "https://files.pythonhosted.org/packages/94/40/15c06410c9b7b8da5805d27b64e09bd3f900e986728106db2689dbc51513/pydantic_core-2.50.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4df197990c15b5a37c5a277d131d9f2c67de6133f2e5dafd80d9bba4b99f46f9", size = 2023740, upload-time = "2026-10-11T18:33:08.763Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4e/5eb629f6efc2a27e421d789dd4bfacbb5f6d09c80c28b13d1e87d73163d5/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0036473f5583e6a60e50b8b21651511564277a3f05cc5dab8cf579f552cd5f6c", size = 2049435, upload-time = "2026-10-11T18:33:10.366Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8e/f195aebec49ad12318876ac2368c197a7939f5d52f8e156d2238ef8a4588/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:992c3514ec891fa7858099183e4d64e6bd5a5d4ff452fae29df22faa77a006bb", size = 2172975, upload-time = "2026-10-11T18:33:12.368Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f5/7ad9fb83010cd5ea0948409db105676ed779c4e709e2d3d89b9fe2558794/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:739dc730e6be3bd5ec2f4ab5cfc7eb047cc45fc1497b3bafec74ff2ed07df597", size = 2364197, upload-time = "2026-10-11T18:33:14.244Z" }, - { url = "https://files.pythonhosted.org/packages/ca/fb/bf0aab3e78301d202b82a0322ec968cd703b11fc0623fde9a28708936f62/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fad3a91e51b6d2039c572db04a5a873260b399f6bd62c3552671fa7a4a2899", size = 2444259, upload-time = "2026-10-11T18:33:15.79Z" }, - { url = "https://files.pythonhosted.org/packages/45/35/38f6d6564fae57d9b12e5676dfa947e0e7d5c46dbeaa7eb3352261d6d299/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42b54c2c90ad348b5e3a85e03e715d572c1fde357ef104cdfe3b03b697a404ea", size = 2159857, upload-time = "2026-10-11T18:33:17.51Z" }, - { url = "https://files.pythonhosted.org/packages/65/a0/fb0a3ca10f139dcf765b2d312d10cf0f65c57c59993229d00ad12b14ceff/pydantic_core-2.50.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:2df1ff41884de2bc4b307bafd7c40a691094fad2ff8e767e5b45a319257bcf4e", size = 2233954, upload-time = "2026-10-11T18:33:19.591Z" }, - { url = "https://files.pythonhosted.org/packages/8c/6a/e63842252702aa4ec6e6b7178ca85e541a77459076592c23ebe2d9840b33/pydantic_core-2.50.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe90228920fd8ff2be62622b6bb8a2b11acd65046d50c6b130614b5879605a20", size = 2243876, upload-time = "2026-10-11T18:33:21.393Z" }, - { url = "https://files.pythonhosted.org/packages/39/25/5991cf8318b37e0dfab47b87541619a1df8501a793cba0d978846cba37a7/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:844b869f118e22a41a091bdcedda8a71bc1b0f62c38d1a0c3211cece47e1d8fc", size = 2277908, upload-time = "2026-10-11T18:33:23.324Z" }, - { url = "https://files.pythonhosted.org/packages/a7/3e/3ee8baaa6cc25a6961c69168cf9ff0f002d56f4e0d541ad6724c18fb61f3/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:2eb75304506894a281d346220a4f7481a1b8729577c5ed2a05395991966a8396", size = 2449285, upload-time = "2026-10-11T18:33:24.942Z" }, - { url = "https://files.pythonhosted.org/packages/c0/c7/acbec6deac13fe697a80c275a9b6661db62c4d323bac8a47347b1f39c7cd/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6b20a4bffabdad0db2927ac034ae3b8a681b1f7a0182f3e60b479ad2fde21ebb", size = 2479013, upload-time = "2026-10-11T18:33:26.925Z" }, - { url = "https://files.pythonhosted.org/packages/10/08/21a3f237b264389f6219d053ee78fc1b5c2fd402c1b1cb2b6cb8b85f9834/pydantic_core-2.50.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:99ba9bc2b8062ea0c326a990f7f00e6530c23579de66dd246e72c4cafef950a5", size = 1484400, upload-time = "2026-10-11T18:33:28.693Z" }, - { url = "https://files.pythonhosted.org/packages/09/ce/077a6d262d12ef09108377ac0717f029f420d773ace63cafd6143af75568/pydantic_core-2.50.1-cp314-cp314-win32.whl", hash = "sha256:cf356f70551d40374eaffb1aa63f1eb6d2006681cbd7a9faea173ce0f4dd7cd2", size = 2103222, upload-time = "2026-10-11T18:33:30.326Z" }, - { url = "https://files.pythonhosted.org/packages/14/4c/350a2415209c43d670eb71d3c040f332c04a30583d39e311b05c7ac15762/pydantic_core-2.50.1-cp314-cp314-win_amd64.whl", hash = "sha256:d32f3acc081cc3923386d88f422cde8892335e95f034e0104bb4cf9310d9915f", size = 2171586, upload-time = "2026-10-11T18:33:32.139Z" }, - { url = "https://files.pythonhosted.org/packages/bf/92/9bea6ca96580a0902fed366f064f0829e404f41889b34543279a1162b888/pydantic_core-2.50.1-cp314-cp314-win_arm64.whl", hash = "sha256:bed5163e03b98bc1fa2eb05d74c63d9c5c95d8ed6254985481640fbf5e237dea", size = 2155773, upload-time = "2026-10-11T18:33:33.896Z" }, - { url = "https://files.pythonhosted.org/packages/86/8c/f121f073cf32bdd5cba7e6230b1ce0ac845b0cf43e44dd597d95af272db2/pydantic_core-2.50.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:9572c1369e9c9da2d64a7b7992c786d90ff295abc93964cfe3125e4290768070", size = 2234017, upload-time = "2026-10-11T18:33:35.588Z" }, - { url = "https://files.pythonhosted.org/packages/a4/69/2bb2bcd6146cffe98d760a46c42ae71efd5151d9b2f9c9bf6619a3b32083/pydantic_core-2.50.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2005207aafe1231315718bf6ed5d064a7300fb4772754af35ee72fc68159492e", size = 2001016, upload-time = "2026-10-11T18:33:37.57Z" }, - { url = "https://files.pythonhosted.org/packages/20/b3/fbf854c7d07ec114260c26e9e2071a4381740f9ae09641dbfcbdf2a18c45/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f6047f62a6c5ae08d0a6afb035667aa2d97c3d20d69762e034c5ea144d92a5", size = 2023015, upload-time = "2026-10-11T18:33:39.433Z" }, - { url = "https://files.pythonhosted.org/packages/65/20/6de55b2f92cdb614b745c6e9ced639fc4fd7e1e77604825a88bdece6fcbd/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ef800dd7d85bcdadf4c3076e4c94e43939493558a3b69a1ea830c706d4617bb", size = 2192543, upload-time = "2026-10-11T18:33:41.381Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d9/19e91c94bd5c405945ce2f15526808aea37e162c253160de8ed7bf70b406/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0135bcdcaa0f23573f286e4cb5e0fd2962700964ed13df085b85f2b97aeab9e", size = 2388704, upload-time = "2026-10-11T18:33:43.167Z" }, - { url = "https://files.pythonhosted.org/packages/b6/bc/2e24c8415eae1a25ee5a5484946a917123bad2e9d01689a759236928175a/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0b3a6f334c6a2345ca15318ff894502a90012536404b37c844a976c76c846e0b", size = 2464118, upload-time = "2026-10-11T18:33:44.856Z" }, - { url = "https://files.pythonhosted.org/packages/bd/1f/945b8053cb061c64e102bcaf7bfb9ed740c0bd4349f9bb978a7d4ddff4ab/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06e01fbbfdb9be777b316a71b6c49efaf4a08b615d0a98d678cda3023f79d019", size = 2150142, upload-time = "2026-10-11T18:33:46.661Z" }, - { url = "https://files.pythonhosted.org/packages/2b/78/96a3e50bf0d64aaae781107eb9335b7529d05a85793ed6e7241c4cd1d931/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:a29a061fec0b4e2d714f277e70a3a18125ecff803f2fea6eade2f2e53711d112", size = 2245577, upload-time = "2026-10-11T18:33:48.574Z" }, - { url = "https://files.pythonhosted.org/packages/7a/5d/a6038a0322232758a6ebfa709f4ca14a60bf5b93940cd0b345056a557da4/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f5187624823423e1d1b82b1072ac41dc837389e18d3d0572cc19bbee46cd550a", size = 2263728, upload-time = "2026-10-11T18:33:50.527Z" }, - { url = "https://files.pythonhosted.org/packages/0d/4b/76ded3333a457a9344c4f2d63f2d82d0101654b05178fa4ddfe7d3627674/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3e46a9eb0a0901dd6275e6b06ac3a464885ef350ec4121fe486869de8053e4bb", size = 2293630, upload-time = "2026-10-11T18:33:52.362Z" }, - { url = "https://files.pythonhosted.org/packages/a9/00/9eca378335c9c1b72bc779bf6e4c2a82ce784f14ec48a0e87102c9870e05/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:756d669f04e62ec4148ecfe22be6a4484d9b1181a6ef32e205ebfd200540858b", size = 2468048, upload-time = "2026-10-11T18:33:54.118Z" }, - { url = "https://files.pythonhosted.org/packages/35/ca/e3832e9cf93651251de43c8c5c029ed680a3c1a0a1b17ee26c81bed08cbd/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:c516cc5367ca3448995d42cb994bf3f4c9002d2a7c22eac9622551269ad1b807", size = 2512159, upload-time = "2026-10-11T18:33:55.99Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f2/773469b5a10a39116a2cb17edaf6d722f017dd8da07161b371465311c542/pydantic_core-2.50.1-cp314-cp314t-win32.whl", hash = "sha256:9d1bed94af6a63835461f3cf7502058eb166c58c4778e11d0f433cfb1bd69e19", size = 2098406, upload-time = "2026-10-11T18:33:58.043Z" }, - { url = "https://files.pythonhosted.org/packages/ee/42/0bb74f8f25204b259b11ab7c12dc7f180893b6bd706118b385147fb6efd5/pydantic_core-2.50.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c8dce1f1e0e5358b682a6ad3fa5e31b31d4560997b8e61417e9217c8d60f8a0c", size = 2148481, upload-time = "2026-10-11T18:33:59.913Z" }, - { url = "https://files.pythonhosted.org/packages/47/0d/d801646c9679a4e630e15cf521d4108b93854b42a6e6e02391bd4c6b1095/pydantic_core-2.50.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ceff0acc940be2715bd6ad17b24c0e5304abf44f6efd0f81ee8499e640f9dc86", size = 2174972, upload-time = "2026-10-11T18:34:01.875Z" }, - { url = "https://files.pythonhosted.org/packages/b2/84/23984b763d8862a02a13d27a44b6e8169428fd85ecfed88f54c29108604d/pydantic_core-2.50.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:8a6791afa2245e6c6b180122d105941644f5bd410bb18623b408808cc41a3102", size = 2224599, upload-time = "2026-10-11T18:34:04.016Z" }, - { url = "https://files.pythonhosted.org/packages/4d/90/a63cf8586abc1d1a3f6d9b18f0224789ebf003851f092ebda3c7c863fd32/pydantic_core-2.50.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:84f34323a61a365b4e9295de6028474754829aaddd59c7bf1a040e7487ef8f3c", size = 2024191, upload-time = "2026-10-11T18:34:05.901Z" }, - { url = "https://files.pythonhosted.org/packages/a6/6a/f34bff9808ffb4907fbf5f5040457d253cacf2da7fce9efbc99ca1b1a44d/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23edad659e8dbd8ca7e4e877fe6c81573abbdf215bd25a68b53e1272f58b80c7", size = 2048252, upload-time = "2026-10-11T18:34:07.757Z" }, - { url = "https://files.pythonhosted.org/packages/b2/54/13f419bf1eb59852003818e25935aaf175687d978f4c4bca70e08fe40a3b/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a5fce22f1e87d181e924e12da7d81cfe031fb3881a5ddf26ad28f141756ca43", size = 2173376, upload-time = "2026-10-11T18:34:09.592Z" }, - { url = "https://files.pythonhosted.org/packages/6d/6c/b5a34d24cd0c81669d8f8339d74e6815abcf2f8fb48ab4b49b84c09be1d5/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c73622ef819328873b53109ee4f77ceb598bffedd02daf916102be3228866b78", size = 2364559, upload-time = "2026-10-11T18:34:11.534Z" }, - { url = "https://files.pythonhosted.org/packages/eb/8d/d64d6216a8df365082665927ff923f183056f9049fee08e9777c9ac05296/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce8c25ca38cc0e3d7753ba180808de2c0c8cb24eae0df64491e40921454e9831", size = 2444697, upload-time = "2026-10-11T18:34:13.535Z" }, - { url = "https://files.pythonhosted.org/packages/b8/0d/1b1149f60a00ea21ba5f70e28acbd40feb4598af414f80f53c921fac07c9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7689580e72a642ab5ec64d5f55b2e33636fa43b4ebe63c0c2c965ef307c7d1aa", size = 2159961, upload-time = "2026-10-11T18:34:15.56Z" }, - { url = "https://files.pythonhosted.org/packages/1e/35/f236549299dcc78e71e945495d7ec67e78d20844d0999c60601685003031/pydantic_core-2.50.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d5c0e32fdbce7f1e8ef4d11f655694bf5f4175c757a9f1dc2be09b8864e5bcf5", size = 2234581, upload-time = "2026-10-11T18:34:17.502Z" }, - { url = "https://files.pythonhosted.org/packages/6a/85/26901a490522b7f75ef9bb9a7afb73e5bb550f0e1cb5b99a0069183e2eb9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40f523349960fa30f3ea51404308ff50f9997a90df639590f47a057c1f32b415", size = 2244090, upload-time = "2026-10-11T18:34:19.402Z" }, - { url = "https://files.pythonhosted.org/packages/ca/2c/481bcfc70ceeb77a778ca6e5b705fe592cb64735c108157f81b7dd9c280e/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:d4193206b6587047437f6f11d7e776df23e1c1e23af2a54d9347275614791e10", size = 2277948, upload-time = "2026-10-11T18:34:21.317Z" }, - { url = "https://files.pythonhosted.org/packages/24/eb/f1e09333faa7ba447cde967310f758430cc7c5e987bdab5228816c70030d/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:84bc765b282a9d5b7fe0348b8648904f25a6a04b2139da52b1dd30c8ac3a2c8f", size = 2449688, upload-time = "2026-10-11T18:34:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b3/036bde636db8f76d92996e81aefc75678ab5cec4a07eea1ad0c72a893fc3/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e728b39a383c81035b2459cfcb35d99dfb01f7d6ebe3a913bc1cc5b81e459", size = 2479286, upload-time = "2026-10-11T18:34:25.214Z" }, - { url = "https://files.pythonhosted.org/packages/d0/a3/07f018294ee18d144afeb6df1a47d9e92960f014be45c5ed13519fa5af95/pydantic_core-2.50.1-cp315-cp315-win32.whl", hash = "sha256:bc94f474417604bd383d2cd445d071b07dd55fedceed3ce33407bf1fcc107290", size = 2103683, upload-time = "2026-10-11T18:34:27.42Z" }, - { url = "https://files.pythonhosted.org/packages/5f/98/f9bd7e1f9b6709f155acb9ef826d9c3884fe925f811fd8e55b9b52280bad/pydantic_core-2.50.1-cp315-cp315-win_amd64.whl", hash = "sha256:983a662de2571cb2502fc8ff47b6770b03d025d2eb314c92f77b3f07c74720ed", size = 2171681, upload-time = "2026-10-11T18:34:29.508Z" }, - { url = "https://files.pythonhosted.org/packages/10/87/4bb3e1e7f385c076ab5af4d6dd0571b22042cd8207eb810d5b9fef15ae31/pydantic_core-2.50.1-cp315-cp315-win_arm64.whl", hash = "sha256:94845ff54dc5193f228cab81b2662a04bfbb892e95bdc15edf7399000ce57d54", size = 2156251, upload-time = "2026-10-11T18:34:31.455Z" }, - { url = "https://files.pythonhosted.org/packages/47/47/83643225b08f2aef6c8cc4bbe6e3f79c5e139c4364a6e450d0f399d87774/pydantic_core-2.50.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:4a53d13cdfbedbfa87f08b83c1a0a5efcc767d785a4b41934fa9cb672670493a", size = 2234363, upload-time = "2026-10-11T18:34:33.65Z" }, - { url = "https://files.pythonhosted.org/packages/5e/66/127ca649ba2f2462039dc1e694c6c01e00a3689f023a617364d3507e6d97/pydantic_core-2.50.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:efbecf43d321f7b9281441f1f213f7c21c66988b0e06c2730ba13ed47a46bb08", size = 2000972, upload-time = "2026-10-11T18:34:36.037Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/e421e0a5d653b1203b090b2e48745976988d7338a647940704b5b9c2b399/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1f08f68dac9f9e83845a8039880aba2ab553eb9b2259c3243a313182c253fe", size = 2022925, upload-time = "2026-10-11T18:34:37.972Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4e/ea5568e2491e1a71100f15ae8c2d01ef52db42a184a2d4e716bc79e5eb8f/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dfe41f232befddb9c4377f6cfc702b51595e2d78ed082672adf8758d2c4619f", size = 2192867, upload-time = "2026-10-11T18:34:39.921Z" }, - { url = "https://files.pythonhosted.org/packages/ae/5e/3b8c3a35acbe219909ada5defad5d7d9fed845fb2b37bd5ec518f453c119/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adc06d218a1cadfd2ec4628424d7d79ce4eba69c2965e7e7b55106f0da5208c8", size = 2388687, upload-time = "2026-10-11T18:34:42.184Z" }, - { url = "https://files.pythonhosted.org/packages/b6/aa/7889b4e515f91a2e8c0ae6b5081fec0feb30c4398d1434e14793c60f173a/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cf91809d0721ab81592ba67bea7694821679c10b1a2e3c3460082b286c1918a", size = 2464415, upload-time = "2026-10-11T18:34:44.384Z" }, - { url = "https://files.pythonhosted.org/packages/08/78/93449e628eb8a6fdcce3eff9043081179d1bc7ce6f1bff32dc5006f41e00/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23923ab9292c40da026330b1ecf4dc2618c8e86e0422e5d1fbf50d94d64ca4f8", size = 2150823, upload-time = "2026-10-11T18:34:46.392Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f1/72c5bc129fceb0d00f05dc1e67f518c1728de1928c55f81fc13d7690de39/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:f3377c8c2b3ce898423c5e5dd94c7982e30aa7717a7e6ab2470b9de364963709", size = 2245806, upload-time = "2026-10-11T18:34:48.805Z" }, - { url = "https://files.pythonhosted.org/packages/28/2a/922a0e78f3aa6ab837b59f88190233fb8dad546c17995fde9bb3ed3b9b49/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:455a773617b5913bf5c20d0692e5787b119e52c4d40ea644ca31f5758fd31be2", size = 2264160, upload-time = "2026-10-11T18:34:50.876Z" }, - { url = "https://files.pythonhosted.org/packages/52/a8/0f1449e3e1b20941c9372faa18e7b6a092e30cdfa841902473f7989532ac/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:1a9006395dece0e32e704c315eff8a00bede494f6108546cfc5539c89fef4f9a", size = 2294031, upload-time = "2026-10-11T18:34:52.876Z" }, - { url = "https://files.pythonhosted.org/packages/d1/d0/1031f492857de70355fb16524bbb03efce5fd34c93ed4a1ec60be07e0d4b/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:d2d82aa62521c55ddfb000ae70f88cdd8de974078f6024e821dfe5addd0c818f", size = 2468423, upload-time = "2026-10-11T18:34:54.995Z" }, - { url = "https://files.pythonhosted.org/packages/46/52/269ffffa645b8e47906395a39cf9db1151ae9fa4bcd7f47b960bc31baf37/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:009634b83993777ddcd69cad0ffcace43dabde692109528e35f0fde91e386a8b", size = 2512598, upload-time = "2026-10-11T18:34:57.149Z" }, - { url = "https://files.pythonhosted.org/packages/31/5c/e47e28281f20326ff6f3c31d626f0a83e615d2d94ba41bb0ad6ec237184a/pydantic_core-2.50.1-cp315-cp315t-win32.whl", hash = "sha256:3fde4fdc6487a58d944ca87cf5adc95d5f266e872c19599f5f4c0a8a1b1f9f9f", size = 2098535, upload-time = "2026-10-11T18:34:59.313Z" }, - { url = "https://files.pythonhosted.org/packages/03/ad/759e181e69c1b472c60b2049e5f61d5da1deefdd5ce1df4bb2ebcf771f25/pydantic_core-2.50.1-cp315-cp315t-win_amd64.whl", hash = "sha256:1c8632d4ac04e6f91128fca584b3a8a507d81604c24eeaaad00d4be42765c32b", size = 2148645, upload-time = "2026-10-11T18:35:01.571Z" }, - { url = "https://files.pythonhosted.org/packages/6d/56/8a702c27e5be9f47e5f19d8669227424290e4c024e7c370279cbaf244b4e/pydantic_core-2.50.1-cp315-cp315t-win_arm64.whl", hash = "sha256:c3ede305158e75510be50869b319550ab072008c13d64d4ab1e094fb286b6f44", size = 2175297, upload-time = "2026-10-11T18:35:04.079Z" }, - { url = "https://files.pythonhosted.org/packages/e7/73/a23a327237d9bb985298ce47702e196f995ce850224c12c70886bd66bb5c/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:062e891facce5ca296a1c37098e5e466780457f86413894b399f0cf22934f769", size = 2162560, upload-time = "2026-10-11T18:35:06.274Z" }, - { url = "https://files.pythonhosted.org/packages/df/b2/33b37b5e82408f402a5e82649a43e7c95cd5dab7beaeef2c35cedbfd18f2/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:49c2cbb2397fe4d0987e84606e691af6cb87bc0ee1bd3e7b737f7e10b4c142f9", size = 2075250, upload-time = "2026-10-11T18:35:08.455Z" }, - { url = "https://files.pythonhosted.org/packages/04/62/c7d5b9249466ccab90f3ce4790c2399dbfb8172ae9e74a7753dd295fe65a/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e4472072de0137ee0d8e72d6620e85939c271d2f90f6bbb4b15c24638b79f92", size = 2107891, upload-time = "2026-10-11T18:35:10.918Z" }, - { url = "https://files.pythonhosted.org/packages/d4/7e/28d29bc1657195933147f772dee0558d9e0f045bbc11db7f992f40c37bb5/pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ed4f3cef55164b026fefb41341b7754cc6b624c75dfe7142d2ecceb5ad21c87", size = 2268026, upload-time = "2026-10-11T18:35:13.336Z" }, - { url = "https://files.pythonhosted.org/packages/a5/09/1bcf160f3cd6333e2a76982fae5963e5032de0bcaaba38464223dc266bfe/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:76e2e83fa6ec8cdc972d438dafc2522b3a47bee4ec0ae668b29cfb1977ab5242", size = 2217070, upload-time = "2026-10-11T18:35:15.688Z" }, - { url = "https://files.pythonhosted.org/packages/3d/81/f02de95eec7794dfc7a5bc69a834f0e834b31b3009014ce6de903855f775/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:a51eee75939cf811ac09b278745a6cee7dc873ccfbc8b9af3cc88fe4b7ce25b5", size = 2039027, upload-time = "2026-10-11T18:35:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/4d/16/227746ed3771d9bf2304568b55134849ece34e13b38b1d76de763015c77f/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae28183297fb0d2b8dc46a1f01d51f5e45825fc5afe76a835a6cb7fb34821295", size = 2109009, upload-time = "2026-10-11T18:35:20.218Z" }, - { url = "https://files.pythonhosted.org/packages/e5/b9/7664d1592a0e5a74903f357cd5b28ceb7336f3473256c5a4e8c8432f1881/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88e492e8b9d0312e7dc13667c30222abf284dc3b79b5302b3607b41a5784ce61", size = 2269883, upload-time = "2026-10-11T18:35:22.48Z" }, - { url = "https://files.pythonhosted.org/packages/bd/35/002a378302ff91d2a7f149bc8d22363faf581ba40ac39d0123444315a32d/pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7456d699b13954e9c0164dcb267250a10ae0dfb03e6e26d6796ab0d46e189c84", size = 2154076, upload-time = "2026-10-11T18:35:24.743Z" }, - { url = "https://files.pythonhosted.org/packages/4b/5c/7a034330082c00f3c9795052bd9b161aaaf6e1951e897ac00a094823ef7e/pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0d955195bbbe489ad343fcc956eacea9357b79cb22192c66cacdefcbc14b32f", size = 2085850, upload-time = "2026-10-11T18:35:27.009Z" }, - { url = "https://files.pythonhosted.org/packages/57/fa/d5b44a7d3d4eceed6ef8713a0003af56fefde6ec75915513bcdd5d730cd9/pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2c634642694e6a0dad2ab1d375589fa671fd442edd5caf7d9737b8f6ca22906", size = 2259754, upload-time = "2026-10-11T18:35:29.763Z" }, - { url = "https://files.pythonhosted.org/packages/b6/88/e01dd37301710bd8b3b2daf34ec9e2a6e83a333130831c0d468b0292a48c/pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee6db2fbed51a7991302e8fac498cd67e336246026d0dfa84cf5166ce1412760", size = 2268712, upload-time = "2026-10-11T18:35:32.654Z" }, - { url = "https://files.pythonhosted.org/packages/3e/43/5bb80d4a4d2b2d84612a30205662cc521a20d209c94abc079ea48b4e0df2/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:79490e33c4c0fcb933bbbcfc3a62184d8803b99f535863dfbb925e1bcb6945ad", size = 2305049, upload-time = "2026-10-11T18:35:35.392Z" }, - { url = "https://files.pythonhosted.org/packages/e8/7b/e3ef76b269cfe4a5bd3bdcf5d7124cf05e5a8909d443b91639307116bdae/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:48569b0ade9edfbe065cad1d700175546592aebbb42f02adcebcc26e75b896fe", size = 2466001, upload-time = "2026-10-11T18:35:37.791Z" }, - { url = "https://files.pythonhosted.org/packages/8f/7a/ea0947aadc1d9f72d4be00d2e19939611ec17363bcb5e6eb9ec7d8221c34/pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5f3cae32fc46121f787cb2486de9cf95a8bf72aec5cc78f64c606fa1735a6ef5", size = 2481777, upload-time = "2026-10-11T18:35:40.287Z" }, - { url = "https://files.pythonhosted.org/packages/24/f3/d15bc0b1fb0c4f1e07b3326ffb7489f7ae70da2b56a0884d22641b0eb47c/pydantic_core-2.50.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7f476456ac2bb0d937f75191494a09c83a30765fea4f70f3b404942fe25f6cdf", size = 2336787, upload-time = "2026-10-11T18:35:42.558Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, + { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, + { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, + { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, + { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, + { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, + { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, + { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, ] [[package]] name = "pyflakes" -version = "4.0.3" +version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/1b/3ba8bd62723cfe1b651c4e4b89b33767fce7a08bb800491cf1d3dd3a7716/pyflakes-4.0.3.tar.gz", hash = "sha256:94762a3a5a343a79b28754f96c554bce057a592a4896907d73f0369fe824e053", size = 67126, upload-time = "2026-10-07T18:57:25.327Z" } +sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3d015808458391acbf9df40b1e54750ef175d39180b1/pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58", size = 64669, upload-time = "2025-06-20T18:45:27.834Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/b0/554d720d71083ccd24ba2f376c048544c073570e7bb18b34d769cef77f66/pyflakes-4.0.3-py2.py3-none-any.whl", hash = "sha256:330ba92b8c1db2eb0b8f4068f6c58674e2649a99e334769aa50e3e9c5b11c23a", size = 66250, upload-time = "2026-10-07T18:57:24.403Z" }, + { url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551, upload-time = "2025-06-20T18:45:26.937Z" }, ] [[package]] name = "pygments" -version = "2.21.0" +version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] [[package]] name = "pylint" -version = "3.3.9" +version = "3.3.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astroid" }, @@ -2103,9 +1619,9 @@ dependencies = [ { name = "platformdirs" }, { name = "tomlkit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/04/9d/81c84a312d1fa8133b0db0c76148542a98349298a01747ab122f9314b04e/pylint-3.3.9.tar.gz", hash = "sha256:d312737d7b25ccf6b01cc4ac629b5dcd14a0fcf3ec392735ac70f137a9d5f83a", size = 1525946, upload-time = "2025-10-05T18:41:43.786Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/e4/83e487d3ddd64ab27749b66137b26dc0c5b5c161be680e6beffdc99070b3/pylint-3.3.7.tar.gz", hash = "sha256:2b11de8bde49f9c5059452e0c310c079c746a0a8eeaa789e5aa966ecc23e4559", size = 1520709, upload-time = "2025-05-04T17:07:51.089Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/a7/69460c4a6af7575449e615144aa2205b89408dc2969b87bc3df2f262ad0b/pylint-3.3.9-py3-none-any.whl", hash = "sha256:01f9b0462c7730f94786c283f3e52a1fbdf0494bbe0971a78d7277ef46a751e7", size = 523465, upload-time = "2025-10-05T18:41:41.766Z" }, + { url = "https://files.pythonhosted.org/packages/e8/83/bff755d09e31b5d25cc7fdc4bf3915d1a404e181f1abf0359af376845c24/pylint-3.3.7-py3-none-any.whl", hash = "sha256:43860aafefce92fca4cf6b61fe199cdc5ae54ea28f9bf4cd49de267b5195803d", size = 522565, upload-time = "2025-05-04T17:07:48.714Z" }, ] [[package]] @@ -2125,16 +1641,16 @@ wheels = [ [[package]] name = "pytest-cov" -version = "6.3.0" +version = "6.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage" }, + { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/30/4c/f883ab8f0daad69f47efdf95f55a66b51a8b939c430dadce0611508d9e99/pytest_cov-6.3.0.tar.gz", hash = "sha256:35c580e7800f87ce892e687461166e1ac2bcb8fb9e13aea79032518d6e503ff2", size = 70398, upload-time = "2025-09-06T15:40:14.361Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/b4/bb7263e12aade3842b938bc5c6958cae79c5ee18992f9b9349019579da0f/pytest_cov-6.3.0-py3-none-any.whl", hash = "sha256:440db28156d2468cafc0415b4f8e50856a0d11faefa38f30906048fe490f1749", size = 25115, upload-time = "2025-09-06T15:40:12.44Z" }, + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, ] [[package]] @@ -2152,213 +1668,148 @@ wheels = [ [[package]] name = "python-dateutil" -version = "3.0.0" +version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, - { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/df/f15f80383f152452d8985b36d95cb8751f901a3e0ff4cd27f7e118f168e2/python_dateutil-3.0.0.tar.gz", hash = "sha256:7ebcb3c29a92f3ceafe79a7a48a5c45677e9e004bbeec5742ac0bbb00560b7a2", size = 271066, upload-time = "2026-10-21T23:41:45.075Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/17/cebee01d1c0c1441174cf0456ddc91b280d79acb65340c05e41d77866ee8/python_dateutil-3.0.0-py2.py3-none-any.whl", hash = "sha256:3c79630202e4152c6add678446984236efe4f57e84d8e892aab0637bab82e9fd", size = 94659, upload-time = "2026-10-21T23:41:43.431Z" }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] [[package]] name = "python-json-logger" -version = "4.2.0" +version = "3.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/25/5473e46b179f8e8b4ad3aeeb36773d1701b7770eaf5e5bc2025c7303b598/python_json_logger-4.2.0.tar.gz", hash = "sha256:e371ebe22ec01e289850102091a2b1f6fc9e655c7f1f5f29073936756c290afa", size = 18211, upload-time = "2026-08-15T11:36:38.232Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/55/6467fde553886cb293e41538f3a8b4e4fd4688c6df242cf982162d8367fb/python_json_logger-4.2.0-py3-none-any.whl", hash = "sha256:158a52126fcd6869e09574d2b66272666f3dc8f468c62637ef9a1fa883719cb9", size = 14988, upload-time = "2026-08-15T11:36:36.821Z" }, + { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, ] [[package]] -name = "pytokens" -version = "0.4.1" +name = "pytz" +version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/92/790ebe03f07b57e53b10884c329b9a1a308648fc083a6d4a39a10a28c8fc/pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", size = 160864, upload-time = "2026-01-30T01:02:57.882Z" }, - { url = "https://files.pythonhosted.org/packages/13/25/a4f555281d975bfdd1eba731450e2fe3a95870274da73fb12c40aeae7625/pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", size = 248565, upload-time = "2026-01-30T01:02:59.912Z" }, - { url = "https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", size = 260824, upload-time = "2026-01-30T01:03:01.471Z" }, - { url = "https://files.pythonhosted.org/packages/4e/54/3e04f9d92a4be4fc6c80016bc396b923d2a6933ae94b5f557c939c460ee0/pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", size = 264075, upload-time = "2026-01-30T01:03:04.143Z" }, - { url = "https://files.pythonhosted.org/packages/d1/1b/44b0326cb5470a4375f37988aea5d61b5cc52407143303015ebee94abfd6/pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", size = 103323, upload-time = "2026-01-30T01:03:05.412Z" }, - { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, - { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, - { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, - { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, - { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, - { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, - { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, - { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, - { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, - { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, - { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, - { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, - { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, - { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, - { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, - { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, - { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, ] [[package]] -name = "pytz" -version = "2026.5" +name = "pywin32" +version = "311" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/14/21/d83d6ef28c4c912c4bb4d1dcf591f7b8c6bde87b9c66f9f454677314e16d/pytz-2026.5.tar.gz", hash = "sha256:fa23724b9c486543b9ff54a327ee7569ac83ade54bb9afd0fc18676620401c86", size = 318572, upload-time = "2026-10-04T02:37:58.719Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/ef/c66110d46fb800dda0bf33164182dfadabe26a90e4476844d502a23dca8e/pytz-2026.5-py2.py3-none-any.whl", hash = "sha256:e658af3757f9e26a9d25dd2aff38335acd92bc9104f890a894b2c1ba28311b03", size = 506342, upload-time = "2026-10-04T02:37:56.814Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, ] [[package]] name = "pywinpty" -version = "3.1.0" +version = "2.0.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/73/6bc452ae57820feb8bb6d993ecd91e24643d8f9a05409e8f83c56c852f04/pywinpty-3.1.0.tar.gz", hash = "sha256:14595b68054d61f2f1e90cc2b30be47be201de200ae1851c433d8cded101bce0", size = 16224208, upload-time = "2026-10-15T17:31:05.352Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/7c/917f9c4681bb8d34bfbe0b79d36bbcd902651aeab48790df3d30ba0202fb/pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2", size = 29017, upload-time = "2025-02-03T21:53:23.265Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/49/d78b094428f10f3365dc9ef48c32e0bb336b2e03c8ab3f786ac5c2ccff99/pywinpty-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:7ed683c7e4f31d92084d062478bf4aa9066a983c92700cb6ac6e4d5ca218723c", size = 2108312, upload-time = "2026-10-15T17:32:12.202Z" }, - { url = "https://files.pythonhosted.org/packages/57/dd/fd3617b3af749ba66227d280e637474f49ce8acbceb87a7ee8e55858bd8b/pywinpty-3.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:6cf46443732493e78efb130ac525df117e49db493eee1fc98ba9db70be410c96", size = 832952, upload-time = "2026-10-15T17:35:01.463Z" }, - { url = "https://files.pythonhosted.org/packages/4f/89/ac7ce4b13b3131c1344c3af4053d70219e92d4c8e35b7182a9365432f7a3/pywinpty-3.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:df249a2d942cbeef71f736119e96d246ea968fe9723dd25e8e439ba81814f85e", size = 2105451, upload-time = "2026-10-15T17:32:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/9e/db/957d5f4d64239720d01839c86f1c9c52aab0dbd4c25767889904bcda7d63/pywinpty-3.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:31c9928935046abe20475392493b5074b3d966ea85c63cc83e939fb54cd9edfe", size = 830609, upload-time = "2026-10-15T17:31:39.836Z" }, - { url = "https://files.pythonhosted.org/packages/3e/0b/fc29cd8d1db4b17fb83074cb763568728a5f21a80e91a481a967e2482f67/pywinpty-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:cc51bc690f58a969eab7dcc8d070321187ed47d5f076edc3b4a56076b38831f3", size = 2104975, upload-time = "2026-10-15T17:32:02.183Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e8/c6146bf22daaf9a6457902a99caa5da386d1ba3e82622fa2acc8b2d4e921/pywinpty-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:3670cd05447e56836301620e92dfdd3ef40408cfb59f2ce6290c66c9986b53ef", size = 830306, upload-time = "2026-10-15T17:32:43.981Z" }, - { url = "https://files.pythonhosted.org/packages/87/6a/0c049de9e2d7d6b637aa36ee3825e643d5dba0a4890881652a6685bbaead/pywinpty-3.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:d01178e9391366bc3325b4c49068cfce95d10d416f6ade62140b274741bc11e0", size = 2104626, upload-time = "2026-10-15T17:33:11.188Z" }, - { url = "https://files.pythonhosted.org/packages/0e/6a/bafc3af2a864d9b681dc6dfcf46cf5de0b070276c9a0baec30c1201e88be/pywinpty-3.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:44918ef8bc408fbf52f54db9b8c33370aee0a59cee76b071a4b4f41ad5ed89c8", size = 830193, upload-time = "2026-10-15T17:32:03.924Z" }, - { url = "https://files.pythonhosted.org/packages/16/8c/e3a2921b39cbf9e27c67787996bdd99ba0acdf0d3f4c3a12b71e7e19a482/pywinpty-3.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:08afc428ec8765f2b8b9a9954727e1dafbefcb5912acc65952007779449650a1", size = 2104740, upload-time = "2026-10-15T17:32:31.808Z" }, - { url = "https://files.pythonhosted.org/packages/42/5a/4155005f0879ae4f348567abd175bd68902e8b036e39d86e50a025f7a5b9/pywinpty-3.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:98f00e50639e9edb740eb6eedd6c0ab82959f9633029db59363d06973d00ac0d", size = 830142, upload-time = "2026-10-15T17:31:49.185Z" }, - { url = "https://files.pythonhosted.org/packages/47/e8/26d10fc6c02628fc6052f820bad0a55531ba7d937f0952233bcbaaba85b9/pywinpty-3.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:188923081eea840c15f37c54a29ad6871b04fddf8fbf1c4acf317d0e27bd9cac", size = 2104930, upload-time = "2026-10-15T17:33:07.069Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f4/1b91263807eaf5a98b4c00b3c144576e3d4bd8e093d40e447013c3745334/pywinpty-3.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:714e8aa138bc61dcfd26c139d8cb8e7b954ea5c09c98bb014ab9b1f5741e289c", size = 830450, upload-time = "2026-10-15T17:32:55.051Z" }, - { url = "https://files.pythonhosted.org/packages/e9/4a/6d9048716dbf969b31ffacbf8a0a0ff944196807957826601cdc995b4afa/pywinpty-3.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:c08a2e5fa7a62f31b5965f0be1b92c67394cd5f75dc0a033d45fadc597f0640d", size = 2105086, upload-time = "2026-10-15T17:38:04.937Z" }, - { url = "https://files.pythonhosted.org/packages/a6/19/dece20a98f989c0eb8e35a2300e0357b98a1e8b5e3ea0149fad62ed16c12/pywinpty-3.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:751d0c727d0e81a246aba722cf0dcb2155fd6bc7b82574b1432f81256157ec73", size = 830443, upload-time = "2026-10-15T17:31:43.136Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ac/6884dcb7108af66ad53f73ef4dad096e768c9203a6e6ce5e6b0c4a46e238/pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca", size = 1405249, upload-time = "2025-02-03T21:55:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/88/e5/9714def18c3a411809771a3fbcec70bffa764b9675afb00048a620fca604/pywinpty-2.0.15-cp312-cp312-win_amd64.whl", hash = "sha256:83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc", size = 1405243, upload-time = "2025-02-03T21:56:52.476Z" }, + { url = "https://files.pythonhosted.org/packages/fb/16/2ab7b3b7f55f3c6929e5f629e1a68362981e4e5fed592a2ed1cb4b4914a5/pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408", size = 1405020, upload-time = "2025-02-03T21:56:04.753Z" }, + { url = "https://files.pythonhosted.org/packages/7c/16/edef3515dd2030db2795dbfbe392232c7a0f3dc41b98e92b38b42ba497c7/pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901", size = 1404151, upload-time = "2025-02-03T21:55:53.628Z" }, ] [[package]] name = "pyyaml" -version = "6.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, - { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, - { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, - { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, - { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, - { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, - { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, ] [[package]] name = "pyzmq" -version = "27.2.0" +version = "27.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e7/8d/5b3d5631c2f4b4b8862f64cd0c9eb777b5710eeb5125b4be8dd0a200a4c0/pyzmq-27.2.0.tar.gz", hash = "sha256:54d4259d1bfae24ecdb5ca79f7acc2eac6c286a02d6a0ae617797cb45f0726d3", size = 292316, upload-time = "2026-08-20T19:08:21.19Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/2e/8897afa4538707d86645f51cc50e66b2b84900edb1be9dc9af2c2fc04e5d/pyzmq-27.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9216132843d139a123f243c07fe70f7487dce5041093dd77040f9adb5dc91872", size = 1457109, upload-time = "2026-08-20T19:06:26.022Z" }, - { url = "https://files.pythonhosted.org/packages/d1/bc/dbce7bc1654fa25b1e68b9bad9e547906f581ce919c186a88ed951cb794c/pyzmq-27.2.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d41ebb260b69329b7d4a2936d44c872c86dd785355b51366c8b14e07ed7e9373", size = 985701, upload-time = "2026-08-20T19:06:27.481Z" }, - { url = "https://files.pythonhosted.org/packages/95/cf/6981738b57c83fef33f356141ad83bf51e92f2f70c9d5767affd1a699f07/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468139ddb2e494d06e586bd3a6835077e8b3764560c8db552fe685c5867fc24e", size = 714285, upload-time = "2026-08-20T19:06:28.962Z" }, - { url = "https://files.pythonhosted.org/packages/50/b5/13657961a845e29c28a4e7ac4202999ec90b3bba1890a5469ce2ae90359d/pyzmq-27.2.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39755dc4a923021bd0677990ffdbc21cff0e1ee1cf07fe3817acea153ef4cb67", size = 888465, upload-time = "2026-08-20T19:06:30.4Z" }, - { url = "https://files.pythonhosted.org/packages/58/5a/ca7ee7a767413d4ba858e93748b95e30b35b8c139849fba94de4433ea2e5/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:714f8cbd66c7e405338d668f79d2fe83fe923defe348e843be998603cf92eeff", size = 1705731, upload-time = "2026-08-20T19:06:31.819Z" }, - { url = "https://files.pythonhosted.org/packages/0b/8b/083f6184e4eba566c9a3cc9974b1b0fe327b7093788135ba8133edaa67a6/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1132805970045adb9f5f05dd57040978286a8e21a5475f2c2ddf1bc983b9a2c7", size = 2074243, upload-time = "2026-08-20T19:06:33.36Z" }, - { url = "https://files.pythonhosted.org/packages/57/f5/249362b664ae725d534c8843214fa9fd7fccd74532a19e24603954a88a7d/pyzmq-27.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b26f2d0493b79ce3c3112c8a12649418915582ba4707b8ed9f44febf2be71f42", size = 1926859, upload-time = "2026-08-20T19:06:34.796Z" }, - { url = "https://files.pythonhosted.org/packages/bf/cc/23c613c15f06d879f13364d14c17e5e4e8304049411e96c1410e6e56c3ea/pyzmq-27.2.0-cp311-cp311-win32.whl", hash = "sha256:44f261eca7dfb9904ea2b56428f59ab693bbe2715c0413a701f17b067ebf877c", size = 570747, upload-time = "2026-08-20T19:06:36.337Z" }, - { url = "https://files.pythonhosted.org/packages/dc/bc/bbbcf89003c93f18e33665c26e3c48d75e3915c3dd22887f3a7aea2c5e26/pyzmq-27.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b86e04f55af0f4d8cd8ecf14c0b8b81ebc8fd66fa20126b753514628ecadc7e", size = 644845, upload-time = "2026-08-20T19:06:37.711Z" }, - { url = "https://files.pythonhosted.org/packages/14/c5/4635d0ba2b8493edf6d5541fff0b07fa1d986fdfc29c596a53a21e20f9af/pyzmq-27.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:917d601e9540098f580d2723d0ce6402cdb6f02bc8dc2de74e0dca6e13bffd1b", size = 567495, upload-time = "2026-08-20T19:06:39.246Z" }, - { url = "https://files.pythonhosted.org/packages/57/8a/153532fa53db30e116118164f3af269a1f3966b3e2ba32c89b12fe864bd8/pyzmq-27.2.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:591c8de5851c5ea372194469fe97587b97c3b641e9a70f31bb3474acbfde0241", size = 1431074, upload-time = "2026-08-20T19:06:40.601Z" }, - { url = "https://files.pythonhosted.org/packages/c8/ef/c08b91248bb90a9efa81fa00ba81b69c157c74d0c5efbb2c319d91babb62/pyzmq-27.2.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:00e73942ef12cecbc7951c4a9104bb8ffaed742abb13af2da6833d90dd368cef", size = 973915, upload-time = "2026-08-20T19:06:42.037Z" }, - { url = "https://files.pythonhosted.org/packages/b4/78/a3a3a86c2b00fadb92ece1ca4f8f028d62b2ce9ac3526097239ab2d6fba9/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f8079d0521fe94bbb401fe9407578b28f3701627c8be2c9f7e0c5b77dcb0109", size = 697722, upload-time = "2026-08-20T19:06:43.325Z" }, - { url = "https://files.pythonhosted.org/packages/62/2c/d5828306f795e8d34676d266823b74e2101e0ad3760d12083de3e02abbb2/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dea74fd65f1fc5f7fe167916a473ebe6ed6174e5e5d9de11ea6583661be6cf43", size = 872258, upload-time = "2026-08-20T19:06:44.627Z" }, - { url = "https://files.pythonhosted.org/packages/09/52/51253b78fd8739293e283407eeecb14215c02c71b6519af21f6eed8e69cd/pyzmq-27.2.0-cp312-abi3-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dcc99ca132b667a4ed750afd42db4ea73288f18425a9b2e3c0af095665c491f5", size = 739591, upload-time = "2026-08-20T19:06:46.214Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3e/142c85b67a4c9678629b0cf6d5125b29663d75be69bfaa57a3cac344d780/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b8d5f66e4a8246cf77f7b8f7902af64f00553368fa0373c89d99b78f0ad79394", size = 1689031, upload-time = "2026-08-20T19:06:47.612Z" }, - { url = "https://files.pythonhosted.org/packages/0e/ee/0776fb0f98ed1eb74d77240087fef0ab045b6ad15cb09555c6c5134c98ad/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:d1526b42a2e725b84ed226f37becedc250c6347594e5ed304e4e9aff68c9aec3", size = 2059547, upload-time = "2026-08-20T19:06:49.064Z" }, - { url = "https://files.pythonhosted.org/packages/aa/0e/ec77f691a4aebe29ab6329f996fb0e0270c876a3016086e3ca6ef733bcae/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f707bcf2c1d007d14d70531d4dd7b41060881c73efa845580bf6faaf9ea24d42", size = 1910457, upload-time = "2026-08-20T19:06:50.783Z" }, - { url = "https://files.pythonhosted.org/packages/30/97/1f5530ff4fc271b4597048371d5af972c2baab51be132ba15874e0327a6a/pyzmq-27.2.0-cp312-abi3-win32.whl", hash = "sha256:fdaaa4ea3242f6ad298eb5177eb042aea5c73c30e76d20caee7b15af20d24ec2", size = 563450, upload-time = "2026-08-20T19:06:52.307Z" }, - { url = "https://files.pythonhosted.org/packages/02/8b/b83f7780dad22e0878e4c7bd9158ebd24ed12bc3d5e3a471cd0576f77ded/pyzmq-27.2.0-cp312-abi3-win_amd64.whl", hash = "sha256:2c218c6ab8bc447ba62054b581fd30209689d199c6ecb253f79615ca74a38e12", size = 628633, upload-time = "2026-08-20T19:06:53.809Z" }, - { url = "https://files.pythonhosted.org/packages/52/aa/3918b5ac7f9987bd9c421b065074fd7409ded88f856f2c704a24341877ec/pyzmq-27.2.0-cp312-abi3-win_arm64.whl", hash = "sha256:348d6fd3e4b81ae4580622ea8c2ea60224e84b2ac1b3be4482e6edc7de06e7a3", size = 556006, upload-time = "2026-08-20T19:06:55.242Z" }, - { url = "https://files.pythonhosted.org/packages/83/5e/d0541596b48c5a19f85dcbea83d6673d8e91681cdf853eb194c31fc9766e/pyzmq-27.2.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:c551b9e2f86dc625fcb1a032c0d68042678caf96a8dd7c28796766b673bd5b52", size = 1127193, upload-time = "2026-08-20T19:06:56.545Z" }, - { url = "https://files.pythonhosted.org/packages/50/9f/8c7411bb283982d46e6d56dca6a095678c87eb0398daead12776d9881ac2/pyzmq-27.2.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:288cc790da0e3064a14a38ddc56ba169dada8c8af4cb86518db2bcbd380eedbb", size = 1166833, upload-time = "2026-08-20T19:06:58.011Z" }, - { url = "https://files.pythonhosted.org/packages/f9/84/a849161ff88b2de9b991cc8ab332218824741122fdc4fdf222a5b822ac8c/pyzmq-27.2.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:3d45189c0c3c99f817b7fefff0d32eeef684cf33e1e3c0fc4281515357c54702", size = 1134452, upload-time = "2026-08-20T19:06:59.898Z" }, - { url = "https://files.pythonhosted.org/packages/3c/34/ff4aaff0cfba2a4d7ad1a16ffedc52c6deb89fcf673d455085446b23f215/pyzmq-27.2.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:d61910b52be5b2cd8b248dbcbe3a1b0275556a7d99fb613fc43323b546e273b8", size = 1167520, upload-time = "2026-08-20T19:07:01.283Z" }, - { url = "https://files.pythonhosted.org/packages/b6/07/42111e9dc1041d78b4443d6eb1b82b027f1a58178dc8a38385effbc72ad5/pyzmq-27.2.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3ab6eb88590e510ab16715c32dbba12000da9bee989fdadd9ee19a234c492eb7", size = 1466289, upload-time = "2026-08-20T19:07:02.738Z" }, - { url = "https://files.pythonhosted.org/packages/4b/b4/def7a478458da78665840564161772e7e938600c32a89f28e8b221b54d2d/pyzmq-27.2.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1ecbdd131b9669f62d3a45afee5527c7ae9f141e4301267f21714c90bd21725f", size = 975868, upload-time = "2026-08-20T19:07:04.155Z" }, - { url = "https://files.pythonhosted.org/packages/38/d5/e3e85f7fea37153097aaff49db9e33093909cc2a7b22c1ac4ebe546600fc/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3146385b94a760236c5eceff468a66a296a716ca98a2e0f9217b1518118466b1", size = 706054, upload-time = "2026-08-20T19:07:05.623Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ef/3b7d9449b223183222bf517245e1e53d5f1ab8c10be8b45f6a301b2f994a/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9846e881620dd62566ca76a53e384c3f37490faf4b9240aebc7498810dfca853", size = 878984, upload-time = "2026-08-20T19:07:07.153Z" }, - { url = "https://files.pythonhosted.org/packages/be/a5/8b49dbd494f6dcfda69dc4cade322a4b02706ef4e3d30cc366d4e369899f/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d9527e3dbaef1edaeeb2446fa7379446814a43ade8adc7c4a5ebe69437815ddd", size = 1697489, upload-time = "2026-08-20T19:07:08.945Z" }, - { url = "https://files.pythonhosted.org/packages/da/5a/4bb8280901130c26ea25f0cbb4a6d39d94250860c6b3dbd912f1cf48fca7/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:56b48fa9d478a3af7254f397697a62f5ad3e1bb677e200b2701f0c290d97e5af", size = 2064236, upload-time = "2026-08-20T19:07:10.384Z" }, - { url = "https://files.pythonhosted.org/packages/de/38/f433af66922554adb2b5f79e897018c8e19a90b9eaeb49c4814f8355ebe4/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bf0b6e4ce1bb089751c504c5493d6b0557eabd02dd21b76e9086cf964234b103", size = 1917424, upload-time = "2026-08-20T19:07:11.909Z" }, - { url = "https://files.pythonhosted.org/packages/36/81/ea1c1ae3f801d96ba2c269e056761ebcfe023476e651d3af2a7817962051/pyzmq-27.2.0-cp314-cp314t-win32.whl", hash = "sha256:fba8afcf265c6e9fbe1594cb045d4765c6c9a7d607653a8196067ef23566b843", size = 591103, upload-time = "2026-08-20T19:07:13.451Z" }, - { url = "https://files.pythonhosted.org/packages/8a/04/149a627707e780fa9f2c1ede3590c14fa6b18b5576d15744342622299a50/pyzmq-27.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d1bc1d380a91d954ed5fc9f12915dba014eed0978d2de05ee7ca688bdaac144a", size = 670215, upload-time = "2026-08-20T19:07:15.069Z" }, - { url = "https://files.pythonhosted.org/packages/30/ba/f9c3c1536c41ef3dbf765ea04218990e2056e558f98184ecd883767fc501/pyzmq-27.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:c7cfb75caa83f5153c687e9d2107f64b5ef0ef0d6edd260d3ff920baaaa69101", size = 582252, upload-time = "2026-08-20T19:07:16.582Z" }, - { url = "https://files.pythonhosted.org/packages/fa/00/78fe097a304a408275747ce43f20428789130b059c5649956277c20f30cf/pyzmq-27.2.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:c5129a8fe43ecc49b99eb75616603d483a3c2fcaef504988fafe8ea392aea98b", size = 1134295, upload-time = "2026-08-20T19:07:17.94Z" }, - { url = "https://files.pythonhosted.org/packages/f2/83/1c36270658d2ee56e23a3f9ef5fbcb94cbd2f9fe966a6641f2f38e697162/pyzmq-27.2.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:baa2ce3485145653194d6c8c5beedd1e9f0bf46a0919c9fa2fe2204fc35b74d9", size = 1167492, upload-time = "2026-08-20T19:07:19.476Z" }, - { url = "https://files.pythonhosted.org/packages/58/b2/f0ae223438d7faa991f6feefdc823815f11cc604f898738376b59fd96515/pyzmq-27.2.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e1ed46048d1920cabc96d952a0d5cfe4127ad8db572c335aae4e3c57b9278d7f", size = 1465992, upload-time = "2026-08-20T19:07:20.941Z" }, - { url = "https://files.pythonhosted.org/packages/59/46/fb56f3f37a6a0937b0e1d2885e808b5eedc171320bac85573cfae78fa9bc/pyzmq-27.2.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e0fa0bc6b1a184aee59b32efcd1b7f0e6d5b8f9387799e4c16a4cb66a86747d6", size = 976118, upload-time = "2026-08-20T19:07:22.577Z" }, - { url = "https://files.pythonhosted.org/packages/21/82/a2c9bfd7c4d34eea1278493cd041bc000d41acb4463c89ceaad29dc813b6/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4bd6743e8bf854c3bfce892dd6578a514aabf128e37a4b2eafcf01856f7e44", size = 705968, upload-time = "2026-08-20T19:07:24.019Z" }, - { url = "https://files.pythonhosted.org/packages/d6/12/b906b269116b6591dc15c0acc5d04c043957c8a531d336999731f4b1d899/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95369ed6626afcfe2ac89832fb1b917c077fbeb905fbbe5d918349ce0222b89b", size = 879011, upload-time = "2026-08-20T19:07:25.428Z" }, - { url = "https://files.pythonhosted.org/packages/12/13/f96359534bfb77651c15f1fbfc4bfdd7ec3489d23f434706d39598dd0dcd/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40124779c3a56ad5d91902df1ff89159cb414b6c1a0ee697abcc66cf5e6db62d", size = 1697496, upload-time = "2026-08-20T19:07:26.821Z" }, - { url = "https://files.pythonhosted.org/packages/21/b4/2c007ae5f2fe5eca86cbfbc874ed86b5135f2f7812615dfd78606d3c93f6/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:ec8a318dfc27c7d946651b3d9e8025d5734f30c168a822195601827207bac09b", size = 2064347, upload-time = "2026-08-20T19:07:28.315Z" }, - { url = "https://files.pythonhosted.org/packages/9b/88/767af3a6630c15215f3a66700ec79598a375edd1fdc9d75a3ad522178c01/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:88c0fac061bac269076edeb3a209acefc96cd6167c239daf1c2b404ac48d7012", size = 1917360, upload-time = "2026-08-20T19:07:29.693Z" }, - { url = "https://files.pythonhosted.org/packages/35/c1/80dd2d20d6e57bc68e1dce1e84bf3e76c9577c1bf728199985c8b4ea0fd1/pyzmq-27.2.0-cp315-cp315t-win32.whl", hash = "sha256:ac126d48cf18aa955daabef43bf0009ff76ad4deee437d09ecf15388214b5beb", size = 591073, upload-time = "2026-08-20T19:07:31.341Z" }, - { url = "https://files.pythonhosted.org/packages/f8/b5/33b781666f3f52ae834bc9c8e38f4f0483a826c5a91cccc993292007bf10/pyzmq-27.2.0-cp315-cp315t-win_amd64.whl", hash = "sha256:edce90a1e588ec63adbf612cc0ad582de4169cd216c7ae53c15f42a2ee902f35", size = 670701, upload-time = "2026-08-20T19:07:32.895Z" }, - { url = "https://files.pythonhosted.org/packages/6e/97/bc4f0edefb992df4fdebcf9f0cc40f631cd4ed277e1ed59ef2cd99a5c8c5/pyzmq-27.2.0-cp315-cp315t-win_arm64.whl", hash = "sha256:a843094b4d3d633bc3623e47a2ff50742d6af02bc1f7606aa2e67e971e21878d", size = 581985, upload-time = "2026-08-20T19:07:34.19Z" }, - { url = "https://files.pythonhosted.org/packages/93/22/7187a1f0bf2b8bf8dc6b91762438fb9b472f684f2dc4cb74a24bf8957943/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a7c1144dc61777938e932a2c9011b980b89fd8ff3733033b34c44c299187a6e1", size = 875015, upload-time = "2026-08-20T19:08:01.692Z" }, - { url = "https://files.pythonhosted.org/packages/92/71/09b71620ad52bad4eb68b1516978ecaf52ef623c3fa16e0732a03cf3274c/pyzmq-27.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:c218b816220d05acf6ab1bafca58926d95cbcc5fec5024724666030466308f0c", size = 774395, upload-time = "2026-08-20T19:08:03.108Z" }, - { url = "https://files.pythonhosted.org/packages/9c/cf/5c8eb9994a14ff5ee5b0cada339421748746c95aee0280c8b656741e8749/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ae6ebbc0bfe5a21ce21e32ba567bf73df2d93888109c65acbd42506cf9395759", size = 877994, upload-time = "2026-08-20T19:08:04.724Z" }, - { url = "https://files.pythonhosted.org/packages/97/64/e22094c5555e550b6450ecfcceb6a1205d893d9a18ae27764c8c45acfb16/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:679b5b1dde326a921ea2c9ec1f9ea3115bfe1b4735779bbc6eb0473a0ed93f71", size = 614492, upload-time = "2026-08-20T19:08:06.487Z" }, - { url = "https://files.pythonhosted.org/packages/d2/28/5b1042899caed18278c56d54a502f5254d463afe8aea1acbecc98e053391/pyzmq-27.2.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5c6d8744d10b5e1eadd90a7c58f8546acf6bf680ee463f7e6ada09ad6c9f802", size = 780574, upload-time = "2026-08-20T19:08:07.987Z" }, - { url = "https://files.pythonhosted.org/packages/77/a3/f134603a671c114c6b56eb912bba890f09e2d43b8a28d243be5a5507cf2f/pyzmq-27.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3ee8dd7031d5e23f632e0e7eee67183ca7d2536e0de35dc1e5d69f3471a791e8", size = 553961, upload-time = "2026-08-20T19:08:09.651Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f1/06/50a4e9648b3e8b992bef8eb632e457307553a89d294103213cfd47b3da69/pyzmq-27.0.0.tar.gz", hash = "sha256:b1f08eeb9ce1510e6939b6e5dcd46a17765e2333daae78ecf4606808442e52cf", size = 280478, upload-time = "2025-06-13T14:09:07.087Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/df/84c630654106d9bd9339cdb564aa941ed41b023a0264251d6743766bb50e/pyzmq-27.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:21457825249b2a53834fa969c69713f8b5a79583689387a5e7aed880963ac564", size = 1332718, upload-time = "2025-06-13T14:07:16.555Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8e/f6a5461a07654d9840d256476434ae0ff08340bba562a455f231969772cb/pyzmq-27.0.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1958947983fef513e6e98eff9cb487b60bf14f588dc0e6bf35fa13751d2c8251", size = 908248, upload-time = "2025-06-13T14:07:18.033Z" }, + { url = "https://files.pythonhosted.org/packages/7c/93/82863e8d695a9a3ae424b63662733ae204a295a2627d52af2f62c2cd8af9/pyzmq-27.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0dc628b5493f9a8cd9844b8bee9732ef587ab00002157c9329e4fc0ef4d3afa", size = 668647, upload-time = "2025-06-13T14:07:19.378Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/15278769b348121eacdbfcbd8c4d40f1102f32fa6af5be1ffc032ed684be/pyzmq-27.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7bbe9e1ed2c8d3da736a15694d87c12493e54cc9dc9790796f0321794bbc91f", size = 856600, upload-time = "2025-06-13T14:07:20.906Z" }, + { url = "https://files.pythonhosted.org/packages/d4/af/1c469b3d479bd095edb28e27f12eee10b8f00b356acbefa6aeb14dd295d1/pyzmq-27.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dc1091f59143b471d19eb64f54bae4f54bcf2a466ffb66fe45d94d8d734eb495", size = 1657748, upload-time = "2025-06-13T14:07:22.549Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f4/17f965d0ee6380b1d6326da842a50e4b8b9699745161207945f3745e8cb5/pyzmq-27.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7011ade88c8e535cf140f8d1a59428676fbbce7c6e54fefce58bf117aefb6667", size = 2034311, upload-time = "2025-06-13T14:07:23.966Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6e/7c391d81fa3149fd759de45d298003de6cfab343fb03e92c099821c448db/pyzmq-27.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2c386339d7e3f064213aede5d03d054b237937fbca6dd2197ac8cf3b25a6b14e", size = 1893630, upload-time = "2025-06-13T14:07:25.899Z" }, + { url = "https://files.pythonhosted.org/packages/0e/e0/eaffe7a86f60e556399e224229e7769b717f72fec0706b70ab2c03aa04cb/pyzmq-27.0.0-cp311-cp311-win32.whl", hash = "sha256:0546a720c1f407b2172cb04b6b094a78773491497e3644863cf5c96c42df8cff", size = 567706, upload-time = "2025-06-13T14:07:27.595Z" }, + { url = "https://files.pythonhosted.org/packages/c9/05/89354a8cffdcce6e547d48adaaf7be17007fc75572123ff4ca90a4ca04fc/pyzmq-27.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:15f39d50bd6c9091c67315ceb878a4f531957b121d2a05ebd077eb35ddc5efed", size = 630322, upload-time = "2025-06-13T14:07:28.938Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/4ab976d5e1e63976719389cc4f3bfd248a7f5f2bb2ebe727542363c61b5f/pyzmq-27.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c5817641eebb391a2268c27fecd4162448e03538387093cdbd8bf3510c316b38", size = 558435, upload-time = "2025-06-13T14:07:30.256Z" }, + { url = "https://files.pythonhosted.org/packages/93/a7/9ad68f55b8834ede477842214feba6a4c786d936c022a67625497aacf61d/pyzmq-27.0.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:cbabc59dcfaac66655c040dfcb8118f133fb5dde185e5fc152628354c1598e52", size = 1305438, upload-time = "2025-06-13T14:07:31.676Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ee/26aa0f98665a22bc90ebe12dced1de5f3eaca05363b717f6fb229b3421b3/pyzmq-27.0.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:cb0ac5179cba4b2f94f1aa208fbb77b62c4c9bf24dd446278b8b602cf85fcda3", size = 895095, upload-time = "2025-06-13T14:07:33.104Z" }, + { url = "https://files.pythonhosted.org/packages/cf/85/c57e7ab216ecd8aa4cc7e3b83b06cc4e9cf45c87b0afc095f10cd5ce87c1/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53a48f0228eab6cbf69fde3aa3c03cbe04e50e623ef92ae395fce47ef8a76152", size = 651826, upload-time = "2025-06-13T14:07:34.831Z" }, + { url = "https://files.pythonhosted.org/packages/69/9a/9ea7e230feda9400fb0ae0d61d7d6ddda635e718d941c44eeab22a179d34/pyzmq-27.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111db5f395e09f7e775f759d598f43cb815fc58e0147623c4816486e1a39dc22", size = 839750, upload-time = "2025-06-13T14:07:36.553Z" }, + { url = "https://files.pythonhosted.org/packages/08/66/4cebfbe71f3dfbd417011daca267539f62ed0fbc68105357b68bbb1a25b7/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c8878011653dcdc27cc2c57e04ff96f0471e797f5c19ac3d7813a245bcb24371", size = 1641357, upload-time = "2025-06-13T14:07:38.21Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f6/b0f62578c08d2471c791287149cb8c2aaea414ae98c6e995c7dbe008adfb/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:c0ed2c1f335ba55b5fdc964622254917d6b782311c50e138863eda409fbb3b6d", size = 2020281, upload-time = "2025-06-13T14:07:39.599Z" }, + { url = "https://files.pythonhosted.org/packages/37/b9/4f670b15c7498495da9159edc374ec09c88a86d9cd5a47d892f69df23450/pyzmq-27.0.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e918d70862d4cfd4b1c187310015646a14e1f5917922ab45b29f28f345eeb6be", size = 1877110, upload-time = "2025-06-13T14:07:41.027Z" }, + { url = "https://files.pythonhosted.org/packages/66/31/9dee25c226295b740609f0d46db2fe972b23b6f5cf786360980524a3ba92/pyzmq-27.0.0-cp312-abi3-win32.whl", hash = "sha256:88b4e43cab04c3c0f0d55df3b1eef62df2b629a1a369b5289a58f6fa8b07c4f4", size = 559297, upload-time = "2025-06-13T14:07:42.533Z" }, + { url = "https://files.pythonhosted.org/packages/9b/12/52da5509800f7ff2d287b2f2b4e636e7ea0f001181cba6964ff6c1537778/pyzmq-27.0.0-cp312-abi3-win_amd64.whl", hash = "sha256:dce4199bf5f648a902ce37e7b3afa286f305cd2ef7a8b6ec907470ccb6c8b371", size = 619203, upload-time = "2025-06-13T14:07:43.843Z" }, + { url = "https://files.pythonhosted.org/packages/93/6d/7f2e53b19d1edb1eb4f09ec7c3a1f945ca0aac272099eab757d15699202b/pyzmq-27.0.0-cp312-abi3-win_arm64.whl", hash = "sha256:56e46bbb85d52c1072b3f809cc1ce77251d560bc036d3a312b96db1afe76db2e", size = 551927, upload-time = "2025-06-13T14:07:45.51Z" }, + { url = "https://files.pythonhosted.org/packages/19/62/876b27c4ff777db4ceba1c69ea90d3c825bb4f8d5e7cd987ce5802e33c55/pyzmq-27.0.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c36ad534c0c29b4afa088dc53543c525b23c0797e01b69fef59b1a9c0e38b688", size = 1340826, upload-time = "2025-06-13T14:07:46.881Z" }, + { url = "https://files.pythonhosted.org/packages/43/69/58ef8f4f59d3bcd505260c73bee87b008850f45edca40ddaba54273c35f4/pyzmq-27.0.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:67855c14173aec36395d7777aaba3cc527b393821f30143fd20b98e1ff31fd38", size = 897283, upload-time = "2025-06-13T14:07:49.562Z" }, + { url = "https://files.pythonhosted.org/packages/43/15/93a0d0396700a60475ad3c5d42c5f1c308d3570bc94626b86c71ef9953e0/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8617c7d43cd8ccdb62aebe984bfed77ca8f036e6c3e46dd3dddda64b10f0ab7a", size = 660567, upload-time = "2025-06-13T14:07:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b3/fe055513e498ca32f64509abae19b9c9eb4d7c829e02bd8997dd51b029eb/pyzmq-27.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67bfbcbd0a04c575e8103a6061d03e393d9f80ffdb9beb3189261e9e9bc5d5e9", size = 847681, upload-time = "2025-06-13T14:07:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/b6/4f/ff15300b00b5b602191f3df06bbc8dd4164e805fdd65bb77ffbb9c5facdc/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5cd11d46d7b7e5958121b3eaf4cd8638eff3a720ec527692132f05a57f14341d", size = 1650148, upload-time = "2025-06-13T14:07:54.178Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/84bdfff2a224a6f26a24249a342e5906993c50b0761e311e81b39aef52a7/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b801c2e40c5aa6072c2f4876de8dccd100af6d9918d4d0d7aa54a1d982fd4f44", size = 2023768, upload-time = "2025-06-13T14:07:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/64/39/dc2db178c26a42228c5ac94a9cc595030458aa64c8d796a7727947afbf55/pyzmq-27.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:20d5cb29e8c5f76a127c75b6e7a77e846bc4b655c373baa098c26a61b7ecd0ef", size = 1885199, upload-time = "2025-06-13T14:07:57.166Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/dae7b06a1f8cdee5d8e7a63d99c5d129c401acc40410bef2cbf42025e26f/pyzmq-27.0.0-cp313-cp313t-win32.whl", hash = "sha256:a20528da85c7ac7a19b7384e8c3f8fa707841fd85afc4ed56eda59d93e3d98ad", size = 575439, upload-time = "2025-06-13T14:07:58.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/bc/1709dc55f0970cf4cb8259e435e6773f9946f41a045c2cb90e870b7072da/pyzmq-27.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d8229f2efece6a660ee211d74d91dbc2a76b95544d46c74c615e491900dc107f", size = 639933, upload-time = "2025-06-13T14:08:00.777Z" }, + { url = "https://files.pythonhosted.org/packages/98/a6/92394373b8dbc1edc9d53c951e8d3989d518185174ee54492ec27711779d/pyzmq-27.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd1dc59763effd1576f8368047c9c31468fce0af89d76b5067641137506792ae", size = 835948, upload-time = "2025-06-13T14:08:43.516Z" }, + { url = "https://files.pythonhosted.org/packages/56/f3/4dc38d75d9995bfc18773df3e41f2a2ca9b740b06f1a15dbf404077e7588/pyzmq-27.0.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:60e8cc82d968174650c1860d7b716366caab9973787a1c060cf8043130f7d0f7", size = 799874, upload-time = "2025-06-13T14:08:45.017Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ba/64af397e0f421453dc68e31d5e0784d554bf39013a2de0872056e96e58af/pyzmq-27.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:14fe7aaac86e4e93ea779a821967360c781d7ac5115b3f1a171ced77065a0174", size = 567400, upload-time = "2025-06-13T14:08:46.855Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/ec956cbe98809270b59a22891d5758edae147a258e658bf3024a8254c855/pyzmq-27.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ad0562d4e6abb785be3e4dd68599c41be821b521da38c402bc9ab2a8e7ebc7e", size = 747031, upload-time = "2025-06-13T14:08:48.419Z" }, + { url = "https://files.pythonhosted.org/packages/be/8a/4a3764a68abc02e2fbb0668d225b6fda5cd39586dd099cee8b2ed6ab0452/pyzmq-27.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:9df43a2459cd3a3563404c1456b2c4c69564daa7dbaf15724c09821a3329ce46", size = 544726, upload-time = "2025-06-13T14:08:49.903Z" }, ] [[package]] name = "ray" -version = "2.59.0" +version = "2.48.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -2371,41 +1822,39 @@ dependencies = [ { name = "requests" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/4b/c57f711b3d5a2492b39e25195075008d45edf4e045a08d8ece972b24fef6/ray-2.59.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cedce6af865d078d318bc3f691e41527331d532dca0017fb824191c884e59a22", size = 67431449, upload-time = "2026-10-02T07:02:24.125Z" }, - { url = "https://files.pythonhosted.org/packages/1a/e9/f40e48941d88c95fef0b074319af5f3f30e1046f624244f65480d196ca8c/ray-2.59.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:e59bbeed9fd3ae29e326bcf73a6dc6b957029004230e9f1e874670c4e390b147", size = 77814064, upload-time = "2026-10-02T07:02:29.239Z" }, - { url = "https://files.pythonhosted.org/packages/f6/63/fdacad6a6f5b0bf065efa9b9f083636feb15e1910bee3a865a0175294aea/ray-2.59.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:645f4676ef6ff2ca8154e83edf0b38583d225b6c6fb83b6050ca1681dc3a8688", size = 78796281, upload-time = "2026-10-02T07:02:52.435Z" }, - { url = "https://files.pythonhosted.org/packages/fb/1a/88915bc161c1a57cfcdea65849449a2e668052c103b80e30547ab461f68f/ray-2.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:b967405ba6fb9d36bb04883bb8c4c1048f2e305f30a40080b1c7570efa7188ff", size = 29078533, upload-time = "2026-10-02T07:03:01.16Z" }, - { url = "https://files.pythonhosted.org/packages/21/62/990cf9605814b8b29bdfefa5f009ae5c078b4746acbf39586030178ac8b6/ray-2.59.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:6a240b393819c0c8c03940d16faf952223003ab1d9736d5328cc5a5f71c95e1c", size = 67414852, upload-time = "2026-10-02T07:03:06.647Z" }, - { url = "https://files.pythonhosted.org/packages/15/dd/fd8d8e727241f809977c5f813ded0227c39cc59848b4a2db55c7db8cf310/ray-2.59.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:09e2dd8ba367f07f1829fc2e35f41e9c3fa9f6ec0babace13d70ebe14e8cf662", size = 77850115, upload-time = "2026-10-02T07:03:12.253Z" }, - { url = "https://files.pythonhosted.org/packages/47/09/914175e40868edbc2e5fddcb7ec9a85b755d2266a70d86ceee2effa09fa6/ray-2.59.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:4055a7a60293ffee41005ab9b3ed9933e0f9b5d8450b214f3c0a7b1de5503f0e", size = 78870190, upload-time = "2026-10-02T07:03:17.912Z" }, - { url = "https://files.pythonhosted.org/packages/68/73/1de47f6dba02a1f203e0c5697697003e95d4313836b52dbbd340de2906a5/ray-2.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:71a8ff087739044a0d596daeccde33da02afd6d0dacfecae962c395cb3e90d78", size = 29057753, upload-time = "2026-10-02T07:03:22.679Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b8/6a82f95c7987f6f660a35b73d5fdb28521cf2e3e3b680a777ef838c6b248/ray-2.59.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:843bf48f42722e0c143eba6846b5819716bb7e5e044b9e4779b1d3ac5933040b", size = 67360214, upload-time = "2026-10-02T07:03:27.329Z" }, - { url = "https://files.pythonhosted.org/packages/ef/d4/2b0dd44bd0c2e7f3350aad98731ab9aadb4d41f02819d872e058a75210a4/ray-2.59.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:583f26e1f1a04aefd230b908621dc3f3e1ca5e0d201ee09d5f040ca4b824e800", size = 77770538, upload-time = "2026-10-02T07:03:33.59Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e2/e737527a7f9b16f2c890cf6f6582542e5f6ddb1608fa2390ea485a50d0dd/ray-2.59.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:70fdc5bec47cc33a4f4e0d9b081f66505e119abd8a8bc6cb2c5d4926427fce6d", size = 78796343, upload-time = "2026-10-02T07:03:39.276Z" }, - { url = "https://files.pythonhosted.org/packages/5a/60/32259117d228f5a6e740e0103d3f7ce6e2f2122cf9e562d4785d22aeb4d3/ray-2.59.0-cp313-cp313-win_amd64.whl", hash = "sha256:65288d38b5107a76f36965be1e9d7830613356e0c32d675a44410c30c714f495", size = 29009537, upload-time = "2026-10-02T07:03:43.735Z" }, - { url = "https://files.pythonhosted.org/packages/74/eb/625f30893920995e4b72acf224c064be45765deef2685c701f479fa6bdc7/ray-2.59.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:af31158ee8fead4119c6e4b7b3e0cb3414416599df1da2e4c99e7c53fa5c5fb3", size = 67369542, upload-time = "2026-10-02T07:03:49.417Z" }, - { url = "https://files.pythonhosted.org/packages/39/27/7a698a08edff7d2c3cac2a92df0bafdb3203a400f41b4de8d5555781c2dc/ray-2.59.0-cp314-cp314-manylinux2014_aarch64.whl", hash = "sha256:6d60f9b7a94fc138ac47a07564182769fd6b6cefae0714aa7499a553bdda2949", size = 77759588, upload-time = "2026-10-02T07:03:54.951Z" }, - { url = "https://files.pythonhosted.org/packages/18/df/815ab1f99c99512cbf678bdb86ba1e1bd9d96fe7654b3a1fd8310359a275/ray-2.59.0-cp314-cp314-manylinux2014_x86_64.whl", hash = "sha256:050781099ce641b7d89896e7b0d79c820813529da86c9b5c65ecb7c89403e667", size = 78764177, upload-time = "2026-10-02T07:04:00.927Z" }, - { url = "https://files.pythonhosted.org/packages/69/3c/0919e6996d70daee39e25a405eb4181eae48ba27573dffb1b65f7f15045e/ray-2.59.0-cp314-cp314-win_amd64.whl", hash = "sha256:d3a119eac653c0a1b3bf4e25609de123e5fb994a33d4e1f270ed1ce5e304693d", size = 29593993, upload-time = "2026-10-02T07:04:06.257Z" }, + { url = "https://files.pythonhosted.org/packages/bc/79/cd0376eef04d5dabdf0de04c0ae7d71447797c6db4a09a3f71e746018cea/ray-2.48.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4b9b92ac29635f555ef341347d9a63dbf02b7d946347239af3c09e364bc45cf8", size = 67315928, upload-time = "2025-07-18T22:32:40.109Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b3/dc73b03bfa75b0668542f77a14d22bee3337754e09af64c7c5c22fdb6649/ray-2.48.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:b94500fe2d17e491fe2e9bd4a3bf62df217e21a8f2845033c353d4d2ea240f73", size = 69829631, upload-time = "2025-07-18T22:32:45.619Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ea/d1f44f5dde662eaf1a61fdfd80b2bac44438506de608c77965be82c2f572/ray-2.48.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:24a70f416ec0be14b975f160044805ccb48cc6bc50de632983eb8f0a8e16682b", size = 69128145, upload-time = "2025-07-18T22:32:51.506Z" }, + { url = "https://files.pythonhosted.org/packages/5c/46/b376189b9df6b41307754bbc8ed8fe191a86908a8a104b37a602897ec5f0/ray-2.48.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:46d4b42a58492dec79caad2d562344689a4f99a828aeea811a0cd2cd653553ef", size = 70079019, upload-time = "2025-07-18T22:32:57.136Z" }, + { url = "https://files.pythonhosted.org/packages/cb/93/98459098f43336ac09c6e5d688468d896f1a791948263727880e1accc7d0/ray-2.48.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfb48c10371c267fdcf7f4ae359cab706f068178b9c65317ead011972f2c0bf3", size = 26763615, upload-time = "2025-07-18T22:33:01.954Z" }, + { url = "https://files.pythonhosted.org/packages/41/53/0d105e1baa6c8c9582f90154ba3f0ca08d58129384ea2707b2e59449b03b/ray-2.48.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:8de799f3b0896f48d306d5e4a04fc6037a08c495d45f9c79935344e5693e3cf8", size = 67302857, upload-time = "2025-07-18T22:33:06.414Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/7de1e9d92a45b1805fe828dcbd18b4c5a1f35ab3cad9134efeb20a3ab3e5/ray-2.48.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:5a6f57126eac9dd3286289e07e91e87b054792f9698b6f7ccab88b624816b542", size = 69823198, upload-time = "2025-07-18T22:33:12.494Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a6/e7c969bd371c65b7c233d86f23610489e15164ee7eadb3eb78f9d55eda4d/ray-2.48.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:f1cf33d260316f92f77558185f1c36fc35506d76ee7fdfed9f5b70f9c4bdba7f", size = 69151702, upload-time = "2025-07-18T22:33:18.655Z" }, + { url = "https://files.pythonhosted.org/packages/61/02/1894be2ab930b599de0f1f77f785b86c78bda4873c6c2dd65d1de5b40837/ray-2.48.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:a42ed3b640f4b599a3fc8067c83ee60497c0f03d070d7a7df02a388fa17a546b", size = 70124265, upload-time = "2025-07-18T22:33:25.155Z" }, + { url = "https://files.pythonhosted.org/packages/79/8c/d3653d17337fc787af108411d9c9a38333c9fbdf247283ee56dd096d3360/ray-2.48.0-cp312-cp312-win_amd64.whl", hash = "sha256:e15fdffa6b60d5729f6025691396b8a01dc3461ba19dc92bba354ec1813ed6b1", size = 26745570, upload-time = "2025-07-18T22:33:31.328Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7f/0dc9f5464181ecad93ec2d6f106084d46e5c5ec9a8718c1ba60610ea65fe/ray-2.48.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a7a6d830d9dc5ae8bb156fcde9a1adab7f4edb004f03918a724d885eceb8264d", size = 67250116, upload-time = "2025-07-18T22:33:36.572Z" }, + { url = "https://files.pythonhosted.org/packages/22/ef/bf5dc762663475fc40680f44df716c553f5d619c6648c8b43ccde00f13ce/ray-2.48.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:5742b72a514afe5d60f41330200cd508376e16c650f6962e62337aa482d6a0c6", size = 69763475, upload-time = "2025-07-18T22:33:42.297Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7c/498ceb9684971cb5c9722a2c8400919cd886473b77416c23c23e4e7ddc67/ray-2.48.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:622e6bcdb78d98040d87bea94e65d0bb6ccc0ae1b43294c6bd69f542bf28e092", size = 69062026, upload-time = "2025-07-18T22:33:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/dd/4f/bb511598091f06cc7d781868caf833a0c3459b4f51c0b36cfb75dfaa7e4e/ray-2.48.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:25e4b79fcc8f849d72db1acc4f03f37008c5c0b745df63d8a30cd35676b6545e", size = 70039793, upload-time = "2025-07-18T22:33:54.072Z" }, ] [[package]] name = "referencing" -version = "0.37.0" +version = "0.36.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, ] [[package]] name = "requests" -version = "2.34.2" +version = "2.32.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -2413,9 +1862,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, ] [[package]] @@ -2466,146 +1915,121 @@ wheels = [ [[package]] name = "rpds-py" -version = "2026.9.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/42/68/3bd46b8a5e01d3c2ebdf9c5e9497912e3fe0cde02bac21a7130ca866e403/rpds_py-2026.9.1.tar.gz", hash = "sha256:4793ef7f78268b124b73fa933440f01d258bbae01de9fa53e9080c9ab0425a12", size = 63948, upload-time = "2026-10-04T16:32:36.469Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/6d/ddb8dfcf41892ba9c672d27988592c038d30db61708230313831b6780a1b/rpds_py-2026.9.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2711d29b653b3bce48a63d18b9c6b53274669e6d6c4094dddeb4d9a0e45128b2", size = 344947, upload-time = "2026-10-04T16:28:55.207Z" }, - { url = "https://files.pythonhosted.org/packages/9e/b2/632c3d034961149eff606e3e357547620a9ab37b849ae5815f67838753fd/rpds_py-2026.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3231c4c0e521dafa5be0c9f114ee2c2ad46650836f2d72caa86801950c3e7044", size = 346770, upload-time = "2026-10-04T16:28:56.884Z" }, - { url = "https://files.pythonhosted.org/packages/6d/45/4df346410bb873d03ec60c3b891d1fceb8cabde1971d29844bbb625cc296/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e01b3c878c8641913e688edd1b3f08658c6783d29cf6b826bd3c0d1ae7a1ffaa", size = 377795, upload-time = "2026-10-04T16:28:58.193Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b8/a70f302207e4f29f873c01a986fcac5def49b9c8224328cef1ad7da6b7a9/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e524c7874ac72884d28e16dd5b8d839fd09e0fe76b020d3fbca23212a7b8c52", size = 383137, upload-time = "2026-10-04T16:28:59.411Z" }, - { url = "https://files.pythonhosted.org/packages/13/e3/3aa28a48a01169d0e20728bf0e5ebbea3ae2774285b40853ae49b3ef332a/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:761fdae6728ceb99ab182fad2f0cc1e262f610834dc891aea1d1a2a2e634776f", size = 496789, upload-time = "2026-10-04T16:29:01.011Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a7/414e8d088602d66ad6f47c65bf07fe5090992a8574cdd4571c1a83b647ed/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b723eb406dec5bc9ec516c73ab9c3239a3284e017f7eb89ee2b3258bd504fb7", size = 395929, upload-time = "2026-10-04T16:29:02.465Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5c/aac3b960fd55d37b49f77c0eebbe043eaf36762ebd48e7b46951e59c1c05/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:136a1c3fe4402b7008bc81cb62ee538481795b61a7e83df88dff3b3f02b726ff", size = 375426, upload-time = "2026-10-04T16:29:03.944Z" }, - { url = "https://files.pythonhosted.org/packages/d3/80/77987a41c40be7202a78d9aed4a650bfb05792237cfd3b9e22638d990fe5/rpds_py-2026.9.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:839dde845559254f34885267c6878f60d61d5205180226d976fe488d45fa128e", size = 381497, upload-time = "2026-10-04T16:29:05.308Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d0/640b02eb1ecd71a913c1178b6235287b31006266bca9a26862e80e497b54/rpds_py-2026.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56cd8b3f77d7b6812f533b662186a1f28316931166ddc00fb893b1b0db7e9888", size = 405740, upload-time = "2026-10-04T16:29:06.578Z" }, - { url = "https://files.pythonhosted.org/packages/3e/8c/d034195d45d215625a23f2ae85dbbdb86a49a93a51272061c97c80b9d316/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:074a4d198bc34d9a8ea425114fc3ded6d11ec01f6a314a8db67454a5152d8834", size = 555850, upload-time = "2026-10-04T16:29:08.115Z" }, - { url = "https://files.pythonhosted.org/packages/de/f8/532f1addfc86207bc3cf23749638bb0d457bce891595012ed8a08d0543b8/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6beb738155fe8ab8091afdfa5a3226b21c2b1593f1e50ebb90eb25b44dbc0391", size = 618661, upload-time = "2026-10-04T16:29:09.554Z" }, - { url = "https://files.pythonhosted.org/packages/50/5b/b0f2c9833a36a5b1f6ac5cb0e635fabacf713266f46ceefba2102da0bf51/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57492a550a1d88d29d003247e5f78dd8cf04a701fac0e4c8db8745a6d2504e0a", size = 583530, upload-time = "2026-10-04T16:29:11.072Z" }, - { url = "https://files.pythonhosted.org/packages/bf/20/464ed4b98d3c8c6a334f3b5e24d3886de04b05658a95fc40a37e0e6e4775/rpds_py-2026.9.1-cp311-cp311-win32.whl", hash = "sha256:d95a354e02393eada6d7351184671aced9d4cce109dabf927cb7aa99624352a1", size = 208125, upload-time = "2026-10-04T16:29:12.408Z" }, - { url = "https://files.pythonhosted.org/packages/df/c9/384a9b62f8cd89c8e3e609b8c9052c140e8c01d807261e0517c904b8bf29/rpds_py-2026.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4d4f52e2a4324396caddbd45a97d8d7be5f42edd25d2355282a9c34f9b2f7f", size = 226045, upload-time = "2026-10-04T16:29:13.751Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3b/0a691f0dcb2301fa9c736346da2d0d4991778373283301c5c12b8f952f3d/rpds_py-2026.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:fdcd198979b4ecffcc1beba366a7fbcf4eb41243691a82fe52ceb0b902f09c12", size = 222636, upload-time = "2026-10-04T16:29:14.989Z" }, - { url = "https://files.pythonhosted.org/packages/5d/34/a828586ea3329fbb50895b50e9cf98ca3d924a9f41a0b26d443bff1b3794/rpds_py-2026.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:50906f5aea24b5a865cbd0a589698288631d9f3a54c3a937c83aefa95a0d14af", size = 346822, upload-time = "2026-10-04T16:29:16.258Z" }, - { url = "https://files.pythonhosted.org/packages/90/81/ac6a0d064982251856ce009c9e1dd51a34110b3c055aa7d1aad18b4899a3/rpds_py-2026.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e21c1429e205828ea886a2293a4a2c8e01f4c25d9893ca330e97a6cf73f52e7b", size = 341380, upload-time = "2026-10-04T16:29:17.706Z" }, - { url = "https://files.pythonhosted.org/packages/42/ff/bf7d54f362748fd6a49277b9d6531c394074110fedf50ad791ec59133fbb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693b2728bbcc48d09a981a356954b0c47c53ff25b545856f28a889ea619f69a", size = 373053, upload-time = "2026-10-04T16:29:19.063Z" }, - { url = "https://files.pythonhosted.org/packages/60/de/74b0ccdbbd28687b9b5fdb34c1cabed88352182facaced9d6f5486b8b9ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8601470267d938bcb7f3ab1a336100af51a4fd5b6ed030ef52461bb3ef5e7e07", size = 377742, upload-time = "2026-10-04T16:29:20.543Z" }, - { url = "https://files.pythonhosted.org/packages/c2/6d/b979775a3057b2a5c26d75ecbff60a20a24ef081db6dd76836fca3f20247/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3890a6aa36e6baa53d5258a2a25d3ef8b37ad165a6ab27a892d7c3e3a432cd69", size = 487289, upload-time = "2026-10-04T16:29:21.958Z" }, - { url = "https://files.pythonhosted.org/packages/1d/5d/7c34734ce3ece943d9d6ee0122a74a21bbc75b47acb5b7053c83f6efb1ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b5b393eda5ea42cca1c1a6665f2a4882b4fd5d1777e41ce0545a107fb008c9d", size = 390710, upload-time = "2026-10-04T16:29:23.378Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6d/b26eb1e75395925b3a142ed351cbed2ec8212f5c9d937aee3df32c701baa/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addeda51556dac7c1a2f14cda62db8b621cd12afba3091d03a96c72932387eab", size = 371261, upload-time = "2026-10-04T16:29:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/7c/98/b2fdfe10301a9e27af21e634337fbba7baac0bc17fe44619a17c26bba2cb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d9edf30457d74eebfd76b045535e36f1cd89062566a128a0db2145ca042d787e", size = 376075, upload-time = "2026-10-04T16:29:26.748Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b1/c4b8d954e49c3c69cf8063c0c9e0919c99f3d2cecc46311606a1cbe835dc/rpds_py-2026.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815d26356930846a40c7bc1366e7b1b0320ab8a063e66c11298a208bed0fd237", size = 399358, upload-time = "2026-10-04T16:29:28.282Z" }, - { url = "https://files.pythonhosted.org/packages/b3/59/9559a7293c97dff0cbb293efffbd36644103883ecc27741af8ef90c84ca8/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b5a6f40f0a1486b4b36c888123afc67acdbd9f33235927acf5ff295429a0ba3", size = 550267, upload-time = "2026-10-04T16:29:29.851Z" }, - { url = "https://files.pythonhosted.org/packages/6c/9d/6dc60e49511de4c8b00e74f9c1d43aed4d27f712cdb1ade92f2c199cbf64/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5b8b0753718d258fd454283fbd57e14545d3b40583fa672e27cb4f987626bcc", size = 614018, upload-time = "2026-10-04T16:29:31.54Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bc/92a4ecf27301b886232a413360f6b348a81d55ffef654f2ebda5970ebc3d/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:46d80bc76b51a6c24f9944368c28d38b8bcbcea1da4f2f8d3ebc31a67e8c6ec6", size = 578509, upload-time = "2026-10-04T16:29:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/08/53/efb97f2e6589b7ab8394385a73870e0b2ab2a195281c117b21fd6d7d4855/rpds_py-2026.9.1-cp312-cp312-win32.whl", hash = "sha256:befc2d6a953e563f8a7bfd87a42c22ebf8a3e980dcb7b6a4d17b70b0e914e8a3", size = 205401, upload-time = "2026-10-04T16:29:34.451Z" }, - { url = "https://files.pythonhosted.org/packages/1c/84/1700cc748d0eaa747486e4e82882d2575224e6e9a3148df583058850c629/rpds_py-2026.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ce8943f79c2210f7abcc28e86367b03b28d95027fd01c46d2472373ae70c86f", size = 222923, upload-time = "2026-10-04T16:29:35.709Z" }, - { url = "https://files.pythonhosted.org/packages/c3/89/0302215373c2f8b4408b0fdfee955368cc378a98ff59508d47a7e0dc2dbf/rpds_py-2026.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:501909f2e4a1e2dee528ef766fe3c469060ebc17e54a8383d404ba07a81a6f02", size = 218415, upload-time = "2026-10-04T16:29:37.263Z" }, - { url = "https://files.pythonhosted.org/packages/83/ea/ee88fd9e756ff93fb6b1182a47ec09504a242620e33ce1d20679efefe841/rpds_py-2026.9.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a36b70596407634ca82d4b989a3729074a008537a0522e4c8046a67c729103e9", size = 346229, upload-time = "2026-10-04T16:29:38.82Z" }, - { url = "https://files.pythonhosted.org/packages/57/71/a097d6552f837500fc36e6b23d09cfb9890c3cc47531f9ca64e149799615/rpds_py-2026.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eba5d173f7d5708b22a93815017a4611873ed54db9f268077c0dd1ed99cfc858", size = 340514, upload-time = "2026-10-04T16:29:40.405Z" }, - { url = "https://files.pythonhosted.org/packages/bd/b7/497e85768bf4e0d8ddbaa096a4cac31d1509251dee2728a8490aa367e0b5/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:457866b85daf5034296666168b84a69e0b2e89dc4f1af102b46f6448a60b9063", size = 372611, upload-time = "2026-10-04T16:29:41.778Z" }, - { url = "https://files.pythonhosted.org/packages/52/4b/74ab4108916250b6e198e0d3af05bc6835eb046315f22f7a0ceb49667c5a/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3a52a3ba86436ab3aef510fbe21512abc2ddd1993005dfe50514bd2284ef025", size = 377712, upload-time = "2026-10-04T16:29:43.242Z" }, - { url = "https://files.pythonhosted.org/packages/0c/8e/067e77d9d7b3cc793c9d909b7e97e7aadbbb1fb094093b6876902cc96d38/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7841166b7fa64c9c56404617ae4341448847482d45933b13135d26c130519e5", size = 488106, upload-time = "2026-10-04T16:29:44.692Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b4/c5aae6c2dde269bf955f6b7d35065c655a57e47750d9668052ad67e74dda/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:926bdd3e3b5998ddf70cc64bc8cf57209571f9044542913afb673799fec77dd0", size = 390795, upload-time = "2026-10-04T16:29:46.129Z" }, - { url = "https://files.pythonhosted.org/packages/a0/36/76fab39973ee11e7f9f357c55138197bb01c86f6502cb76487e3b4f42db0/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b85224291c6cb6759f9b5adb9745f486d226f62b16a614dd5a2a5ab2b35b", size = 370794, upload-time = "2026-10-04T16:29:47.603Z" }, - { url = "https://files.pythonhosted.org/packages/3d/fe/cd2a80e6d7b871937a60e935c5d507aa390d143f4ff3636f640b9733d5df/rpds_py-2026.9.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3cd182d7291d29b92c521a0069d9c01ba6193628a9a105531d11b40a6d731a33", size = 375673, upload-time = "2026-10-04T16:29:49.223Z" }, - { url = "https://files.pythonhosted.org/packages/6c/18/7464a9953724e55a3b3206062fa0ffdeaa519584c6aabf65d3956d94f131/rpds_py-2026.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ea1cda8d8c688278430e4268a42f5e5da3bdd74578dfadc0820c3f1766ce83", size = 398758, upload-time = "2026-10-04T16:29:50.601Z" }, - { url = "https://files.pythonhosted.org/packages/c0/86/1534b436700fd49ff411063b7c4d7e938adfabf90895b6cf1622d5a7d1f6/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5943980471829f6de242a20b109de3111ba6b77e3af0ffc587028ac854b05e6c", size = 550370, upload-time = "2026-10-04T16:29:52.002Z" }, - { url = "https://files.pythonhosted.org/packages/57/1c/e1fa82a8a01e3c5820f3ba98a8b2673f642128eb368fa88871b01dd2c909/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:76d3af9732d2dab69f28179b40ba2d87e2f1d5824b4a694780aa787d685e8f36", size = 613106, upload-time = "2026-10-04T16:29:53.655Z" }, - { url = "https://files.pythonhosted.org/packages/29/55/b20b8c4c3dde8755bfcd5b08492a02d0cd2e26929aedf6199ca2a377d42a/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:78326f4cb4427a56ba4996c0762b63be45f06b85f086526420d2b3a66e40f84d", size = 578235, upload-time = "2026-10-04T16:29:55.157Z" }, - { url = "https://files.pythonhosted.org/packages/55/42/df3f7bbc3f7ab37a8a9db8d6c2ff2c985422899f1f7926afbf7ec3c0b8b4/rpds_py-2026.9.1-cp313-cp313-win32.whl", hash = "sha256:172e47169583f46ce118cbec68e6795d0da0f4606b488b6434f8276bca0a058c", size = 205293, upload-time = "2026-10-04T16:29:56.669Z" }, - { url = "https://files.pythonhosted.org/packages/31/9c/ba5a9569d719bfdd6ce863df4133ac6a1658cf1b07cc3534c31db729fbbc/rpds_py-2026.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:3e93b2cd69a9830be33e03945cd7cda940a0a8bfcfbff41d6144f0cb0d3d8bd9", size = 222409, upload-time = "2026-10-04T16:29:58.049Z" }, - { url = "https://files.pythonhosted.org/packages/35/72/f28ca566f6c23c35bbf7445f65eb0364577b25a026305995e24f78b83d94/rpds_py-2026.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:d151e148117294133bf8af7eeace085e7e87432db15ab6adf640330298a47f6f", size = 217681, upload-time = "2026-10-04T16:29:59.449Z" }, - { url = "https://files.pythonhosted.org/packages/8a/f2/67b94be1532767803415c1c5a1fd88ea487643d74a673cec1ba140af77bb/rpds_py-2026.9.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c9d1aca01f49170fdcf5c92761b1fafe97f554b721ca4570c5949fff778f0d4b", size = 347178, upload-time = "2026-10-04T16:30:00.865Z" }, - { url = "https://files.pythonhosted.org/packages/04/37/b751de2b59b0197a1d92a5dd491de88e8a5e928c2e6562581974f1e85263/rpds_py-2026.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3f0e9ac28fc067d4d34b88ae43c48e9489455c97fee9633d851f7eeed5a05d35", size = 341878, upload-time = "2026-10-04T16:30:02.564Z" }, - { url = "https://files.pythonhosted.org/packages/72/e2/5873bc4643c250db9e05d48dc0c93763d4aa68bc3b81164cb1af3b45b284/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07deecbfce94c78473018bc7d10b337cc651d12df87a1eb2cb3e4024bc9c33d0", size = 373963, upload-time = "2026-10-04T16:30:04.026Z" }, - { url = "https://files.pythonhosted.org/packages/51/03/5acf7632158247f3f6386ff0af3a1ee48167d575037e8d0920594b76d92b/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:821b2755db9194409254012f429c56643416fb96ef9be090be82ec8826b7f477", size = 377975, upload-time = "2026-10-04T16:30:05.555Z" }, - { url = "https://files.pythonhosted.org/packages/e6/00/63fda451b8bffa5808fc8bb311ee7c073b340974b09f273c7b2a145d3d62/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c91c210ae7645626c608400e3519b4a642f837cce09ca830db3beb2e9f274d4", size = 490347, upload-time = "2026-10-04T16:30:07.156Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ae/c093ffd070ba0fb02f76c565d06fecc65ad6e4afdbae78f7031076d3cdac/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54ac2158a6f96cfbabff0b2eedaf94b90c5ec7ca8317fcadc61e1c2b2e0ff6ef", size = 392962, upload-time = "2026-10-04T16:30:08.77Z" }, - { url = "https://files.pythonhosted.org/packages/22/9d/d08a1128ab199b2f0cf25bfeb0639bd05119fff4b7c47bec24ef9a8ec23f/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac2f5dbafd585dfe31f86a23ebf0d3ba480a9d49ebc87947267b5608d4ea0cd", size = 371623, upload-time = "2026-10-04T16:30:10.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/c7/4758ddcbb75609414bbccfcb11d612436f9b3ee821bd2f33f0f1604ee648/rpds_py-2026.9.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:8aa5dda18d39b6143eb24809d158f9252c88f402749b6f1b62a506cc7d96cc35", size = 376997, upload-time = "2026-10-04T16:30:12.124Z" }, - { url = "https://files.pythonhosted.org/packages/87/e4/947bd7f608ff60faf46dc9d389c3dffd0e3d767d78a0be19978448ef0ce7/rpds_py-2026.9.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c90e7fa02e8f5de0d10c17595c568ada48c5302e749462c0ea1a4c362111a86", size = 400169, upload-time = "2026-10-04T16:30:13.804Z" }, - { url = "https://files.pythonhosted.org/packages/4b/35/fe93e020a0543b5670472c18d7e6af3197c08da571240ce1965c84f85c0f/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6d198bad4e49dd6732fbd636e2fc5c082f45c8cad0b4acb756b00c82c76072e", size = 551615, upload-time = "2026-10-04T16:30:15.332Z" }, - { url = "https://files.pythonhosted.org/packages/0d/4f/5d2a0136bb03b2a56a39dc6ff92d58a6e3e53a2e17079238b86228882f16/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:96beca19ec79de272e8668585380ff9092c47077c1d7a1e098e00bbd921f4785", size = 614655, upload-time = "2026-10-04T16:30:16.92Z" }, - { url = "https://files.pythonhosted.org/packages/09/1c/3f1025aaf70d9bf7272cc41f8b64ee76b48bf01726248138430e16f23b38/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5cf77eb04f20b720be95265a3e00eb2a14814074255cc27069c551b2db53118", size = 579602, upload-time = "2026-10-04T16:30:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/53/0d/5c72e6204f76610608706da32b6b7e11ef7e10317558a7bb15a122e008dc/rpds_py-2026.9.1-cp314-cp314-win32.whl", hash = "sha256:a03d57b86d2a51d0a66c92177e2be154ad015f357791d306e714569999cdb4cc", size = 206315, upload-time = "2026-10-04T16:30:20.05Z" }, - { url = "https://files.pythonhosted.org/packages/a4/0b/489d48abbcc7d70cf3fbf662d9d22abf1f4650761c0a9ae05260800800d3/rpds_py-2026.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:837c6b305e26fe0f75b15c92cf3b2ba29e0ae19dc40b1c557b026cb426347d0c", size = 222852, upload-time = "2026-10-04T16:30:21.604Z" }, - { url = "https://files.pythonhosted.org/packages/91/16/bbb05a7e6a10cf79ba639be7f799d770ee15f64175cc61d081b218dd402a/rpds_py-2026.9.1-cp314-cp314-win_arm64.whl", hash = "sha256:fce4b85234a0cbad67bf8e6e1201ee815d172c9aebad75f25645bc4d834f8e31", size = 218709, upload-time = "2026-10-04T16:30:23.036Z" }, - { url = "https://files.pythonhosted.org/packages/22/ac/ac507a0a4ec478ca470440a09583db4be5259ba7670aeba0620822f1e57a/rpds_py-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:3a72c11530d71abfb66c8d7696a2f86c43e63fca8b948f1a784ac490f4ec688e", size = 349596, upload-time = "2026-10-04T16:30:24.558Z" }, - { url = "https://files.pythonhosted.org/packages/e9/f2/817a46b658d5070f477f722c298ee9a24525b0e4017347964146ef5fdd0e/rpds_py-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:068c37bba854ec2fe42f7365c640af11dd9895890ccbf2df5070d0c059bd7f96", size = 343114, upload-time = "2026-10-04T16:30:26.048Z" }, - { url = "https://files.pythonhosted.org/packages/6c/42/6ade976b13ac1b4cb3bf2eb603f1be2fe74df19a29988d4c2b386be59d6f/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fca4eb6df565e2a928f1c7dad92d27db8f9df0f449e76423ed5d7e713ed445", size = 374197, upload-time = "2026-10-04T16:30:27.699Z" }, - { url = "https://files.pythonhosted.org/packages/d9/70/77cdf1d3f1a07faabe936016ae623aec7981f73108a8fe7a203ed2e21998/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c933c6678c6f116ff8af47a4c6db0868b8ace74af0343016c0ef00f00272ea69", size = 378025, upload-time = "2026-10-04T16:30:29.451Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6b/18a44a3beaa9b7931acb04af7bd9539836477c630a794452d4826d6185d4/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028ad274ea951dac64491b5d1e65712a4aeabfdbdb9fccf797b57bd899b0c495", size = 491969, upload-time = "2026-10-04T16:30:30.995Z" }, - { url = "https://files.pythonhosted.org/packages/73/27/fb39cfd6bddaf741b024f813890374578ff8ac1f1adc473659c048b03b05/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d0a99cf9de0b17a3943388e9294a59becf75e7c43421f387bd3c7a9901f7c", size = 393905, upload-time = "2026-10-04T16:30:32.628Z" }, - { url = "https://files.pythonhosted.org/packages/ed/71/0fa7bb77b57af0d710273964180d11b503f62b8a5c358eb2d8c3f62feff6/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0da298fb372dc192610a4b9ecbc68a0cd8b675bbbd1fc519d01b41cfd658333e", size = 374569, upload-time = "2026-10-04T16:30:34.257Z" }, - { url = "https://files.pythonhosted.org/packages/54/22/f41cfac269af3b449513ef1bc3d7f32fde52abbbd2d01c7e76b47743acd9/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:eb61be926bb81567c1f48bdc8aa22b9855048dc2efd53871f9f7e6e9a5632346", size = 377482, upload-time = "2026-10-04T16:30:35.997Z" }, - { url = "https://files.pythonhosted.org/packages/b4/fc/312b49006e7f8f9ca5f96647577b8aa6f3df30519c46bd448f5c425af0b2/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:42e75466f83cd43f6026c81eab74246efb2bdadafb307b85700632d06c68f299", size = 400040, upload-time = "2026-10-04T16:30:37.76Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a6/18cca7a878dc7fa95165a83343fd4d7b65643fd22e54e47340a451121d5c/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:617f59cde379b4f648a09797b7f683d04b90a46344cddab85639da5aff0f5531", size = 551849, upload-time = "2026-10-04T16:30:39.443Z" }, - { url = "https://files.pythonhosted.org/packages/e4/6d/1f5685e20f39604691bdc3c05aaa6b8bd2f954e9e996477adf2376768e33/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3edae8c5ddfdb6985d49ae9d150516e5076888879022f91a26c2de9276ce0bdb", size = 614842, upload-time = "2026-10-04T16:30:41.231Z" }, - { url = "https://files.pythonhosted.org/packages/c6/25/98652109fd9f7e10268dd4571aa52b81987001b806f37ef1a18260de714a/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0f045bb053c9057720d72c56dffe30dffdc05997b2897a827b9325f0ab6623fa", size = 582606, upload-time = "2026-10-04T16:30:43.345Z" }, - { url = "https://files.pythonhosted.org/packages/19/03/11ca09099bab5f53373a80a334c424ec917c13d050760a59499d2af5171e/rpds_py-2026.9.1-cp314-cp314t-win32.whl", hash = "sha256:bf35d0568abda97233239ce32896d3ad53fccc537832c104e30c94aa5fb93569", size = 203341, upload-time = "2026-10-04T16:30:44.954Z" }, - { url = "https://files.pythonhosted.org/packages/6f/8a/88909e3ffd9f47f5b58211473875d8c3c09079f0058c46fb72c55a702a26/rpds_py-2026.9.1-cp314-cp314t-win_amd64.whl", hash = "sha256:1e8d4d79d828299bf44a55db22a9388ab967b49d17132c88eab0f4360b48da8e", size = 222843, upload-time = "2026-10-04T16:30:46.486Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b7/a662f367d4896dd0a10cef2fc91f10b7f08af1c10858e287e019563f338d/rpds_py-2026.9.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:1d77b649e6f7cdf12ca5c2a98dad0ad37f9ea9b6f960408a92f0cb12bb3d04d9", size = 347463, upload-time = "2026-10-04T16:30:48.203Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3f/ad45d03df4f84ebae5439577ee81f3999d182711e82235c8037b6528890e/rpds_py-2026.9.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:00ba2d8c7dd4ee537978ddf4b3fbd712bef2d8751603f7f3146b3f4287768e25", size = 342051, upload-time = "2026-10-04T16:30:49.872Z" }, - { url = "https://files.pythonhosted.org/packages/7e/31/3dcd68c13d4bcc59c1f7eb33ac8e80698f06f3eb0d8a1e06419836071c20/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec450527cbf485e13c8d3602a54f428ab0432fdade0ede75efd74b735421c871", size = 374143, upload-time = "2026-10-04T16:30:51.508Z" }, - { url = "https://files.pythonhosted.org/packages/cf/0d/68c1f058a250fbd1380ebda9fc227cbf50117adf8ffe8161ef383ea79f68/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:306ee1850d8105b5baf977e78d45fcadd12c1a54678d614c9baf217708446e91", size = 378604, upload-time = "2026-10-04T16:30:53.206Z" }, - { url = "https://files.pythonhosted.org/packages/d7/d6/2d4c59b85397cb4800594fadf692688ccf5ce556adc930e7a5bf21061a5e/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef6b65b03247c54692ad4fd9ee97cb772781927db72e3cb05e70b3db6d1ff14f", size = 490790, upload-time = "2026-10-04T16:30:54.925Z" }, - { url = "https://files.pythonhosted.org/packages/da/04/7e05dc3aebaf52f4e026766bd668fdd09a9d0e23f64a14686b36b3501892/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a575404ebc9cf2e91edd32eaf570ec1430eb900d4f56724ba7dd4bc1fc9c176d", size = 393146, upload-time = "2026-10-04T16:30:56.625Z" }, - { url = "https://files.pythonhosted.org/packages/57/ca/e2e9a0a46a74ed51a0498ba1fe10f4ea6b2d9a155f372a2f91e51f18cf10/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c16ab111bc27c646ba8aa005d0527754edc538ebb636f0b1bf8e244b48d1945", size = 372022, upload-time = "2026-10-04T16:30:58.295Z" }, - { url = "https://files.pythonhosted.org/packages/ba/cb/8f8774df5134e23424372838bcc5c7ed4127d723e1ff52f7bebd4dcb2563/rpds_py-2026.9.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:7664419f27db41d4f1c43a78dccda7dd6e8ef2428df3ee01d0c2a07a6b071297", size = 377092, upload-time = "2026-10-04T16:30:59.984Z" }, - { url = "https://files.pythonhosted.org/packages/90/02/8d7095d73bf9114219be40230baa5df00611e0a82ed9517779ff9c19f82b/rpds_py-2026.9.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b26b03d9d2658ee2fa234f8f4f19f38a09773fe5261028025032e26d4d35af0", size = 400830, upload-time = "2026-10-04T16:31:01.721Z" }, - { url = "https://files.pythonhosted.org/packages/ec/02/8206856f8f363cd042a8315dc86b3912f5dcb6d3c66bbb24b69c2bfb0775/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:be3e47e2d91aa3942ff9bf4077a505226005abfc39b6f7554a91c1b9393986b9", size = 551478, upload-time = "2026-10-04T16:31:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/41/6b/36211f1bb1f0b0313f496d92f5905b74ea107f27cb16fa3355a82f04575e/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:6307a0da524939decb8ca4a3933b8ab62525794411d6984fca6726e732804af6", size = 615173, upload-time = "2026-10-04T16:31:05.281Z" }, - { url = "https://files.pythonhosted.org/packages/35/77/cda0c4a6f055446b692f0ed5692f73707cafd3dff82672ede31b1a9b59de/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:159a7aab5c5e8b112c8830f54717ce56da1252ebdbb526f5be2df2309280b9e7", size = 579653, upload-time = "2026-10-04T16:31:07.065Z" }, - { url = "https://files.pythonhosted.org/packages/74/ec/d8385f446240aed643b9e92a5055cff3015cc04a13c61f73b2883c478ed5/rpds_py-2026.9.1-cp315-cp315-win32.whl", hash = "sha256:dbc2673f9223d420c91145599b3ba45a8a50c207d1976908e5fb5ddb0c9b9429", size = 206498, upload-time = "2026-10-04T16:31:08.989Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a5/71b5cd00e0521e3b6b81828baea368c62b6b700ebdd9554cd7d41ddf12fa/rpds_py-2026.9.1-cp315-cp315-win_amd64.whl", hash = "sha256:75c38c50ab9aca840225d9a9a3810bf11d04bd5c1f186cabbb8aee56db3e9b15", size = 223121, upload-time = "2026-10-04T16:31:10.84Z" }, - { url = "https://files.pythonhosted.org/packages/33/58/dba857c3bc8221b31b62eb170a3080f4f191de79f047200389b7ed1b06a7/rpds_py-2026.9.1-cp315-cp315-win_arm64.whl", hash = "sha256:a431156bb41865fc14cd5d79bb9d7bbed83110b0159e34e62ae30951f96c0009", size = 218741, upload-time = "2026-10-04T16:31:12.592Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d0/320ab28ccc1415eeb509d68682b0014fb74690cd49f1c2d29a232475af50/rpds_py-2026.9.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ef0d8c843e2827d6c120ab4687e9423fb1d893db1df27b7c1506615bcb9734a0", size = 349719, upload-time = "2026-10-04T16:31:14.48Z" }, - { url = "https://files.pythonhosted.org/packages/56/88/f5b12f1358f443c08b7ce3cc8391d82d335f4872580e2e097847fd36087a/rpds_py-2026.9.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:45bc6bccf78b20fd834237d18db64965d7ee68ba7f60440a26c7ab71e7b8d51a", size = 343267, upload-time = "2026-10-04T16:31:16.827Z" }, - { url = "https://files.pythonhosted.org/packages/f7/0c/c765b0059d532acb3b9c45d781ccc22f15a96dbe443d00903f643ba9df10/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d55198263bb51f557550c6ed2e6d1cb6a6fed6eb5c9120b741c5926bef8a45d", size = 374555, upload-time = "2026-10-04T16:31:18.931Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8a/cafddfda77564a10cd21184640c3bffda6a2b8d20972fb5dedd5e0166328/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8763f20692da7df39b0afdd1ba3042b004c50a45994f76c2d9a25641f7673db", size = 378346, upload-time = "2026-10-04T16:31:20.75Z" }, - { url = "https://files.pythonhosted.org/packages/b9/01/5e626016eff72c183bf6c96539240cace15d402468647a453ec08415b2fc/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e43d4a1f673e8a1cbd8533e809e02b4bf9d4f2280269bb640436556312121250", size = 492373, upload-time = "2026-10-04T16:31:22.614Z" }, - { url = "https://files.pythonhosted.org/packages/3b/9c/15a2469e9389242f46896b3f0a01d68caea8a5a35c011fcb05ef333aae73/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea394a937f17a54c51239348bdbe2e3518124c8d4a8951ba04a311d3095bd18f", size = 394371, upload-time = "2026-10-04T16:31:24.768Z" }, - { url = "https://files.pythonhosted.org/packages/63/f5/c100ff77e1e6366e947c75969c258fdfc4b7bc5bbfe7351e62ffbf2a1228/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdeaa99ce822dca76cfb1b993e9120c5ea212f2eb66d48950ad63c349668a018", size = 375132, upload-time = "2026-10-04T16:31:26.588Z" }, - { url = "https://files.pythonhosted.org/packages/dd/f4/fe0269c9de253e99c81cabc12b8971a5feaa083debdaff1221e06264d9e3/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:b4f062343e7ad3fa94f2c66e5ae667dee47ee74dd41a9057c4fbe163236a123d", size = 377642, upload-time = "2026-10-04T16:31:28.677Z" }, - { url = "https://files.pythonhosted.org/packages/05/65/b34a7b257baccff8f4a24a722933166d4941d5ebdc9c3f4bc4ffcd5ce4f4/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22ffd29a63d71fb1b81552c21f2c2b734949b7ac751a9be70675a939a900839b", size = 400855, upload-time = "2026-10-04T16:31:30.802Z" }, - { url = "https://files.pythonhosted.org/packages/98/32/844e54176b6071b90b38a564e6940bc6eb8f97b2890dc709c19db9dec0f4/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:08dae4a4095150a7c4545a1fb40b98e1ab1744fbc2770d92c977b9dadaa49ab6", size = 552573, upload-time = "2026-10-04T16:31:32.709Z" }, - { url = "https://files.pythonhosted.org/packages/17/73/6041d20729dffbfdf155c02d65be58bc225a1c1fb548fd87c23ef306138f/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:9a0460d43603d1fd9ef59c30278531e15d78581721ddb538fa560aa7817ea4ad", size = 615840, upload-time = "2026-10-04T16:31:34.565Z" }, - { url = "https://files.pythonhosted.org/packages/af/9e/418094adaee6b056ce199051b255448ed872829051e341b2294c80da0977/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:1c2d1f6da5128eabf34e963d7163a818846075a52568250d006c4c953b40f903", size = 582764, upload-time = "2026-10-04T16:31:36.665Z" }, - { url = "https://files.pythonhosted.org/packages/3d/9b/1698ebf6b840ddfe8b472198abbed6ace35c6e398faeecd6c47dae742a4e/rpds_py-2026.9.1-cp315-cp315t-win32.whl", hash = "sha256:5c6ee90dee3e85e055ddfd502d611643d9b0fd94c818220bda84ec3dacd9b27b", size = 203795, upload-time = "2026-10-04T16:31:38.53Z" }, - { url = "https://files.pythonhosted.org/packages/8a/e2/91f70d804c61f8eac39a417e82aa1024f655ab9e8bdd7393b196242bc41b/rpds_py-2026.9.1-cp315-cp315t-win_amd64.whl", hash = "sha256:fe5ad0664ec772b02c45859041aa17655709cced7a31005817fbbbd988c25567", size = 223037, upload-time = "2026-10-04T16:31:40.468Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ad/f0eba548e297987964ef8088403db875b333963bf8189f3f563b6936b20e/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c0d2cb595a420b34d5086db0add011e26e2c09d6a024afbac4228bf8f863a30", size = 384112, upload-time = "2026-10-04T16:31:42.643Z" }, - { url = "https://files.pythonhosted.org/packages/33/89/891fa4d81f1eae7fe262ecd0aba2c51de94a116c7f3ccfb034fa75f4c537/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3d6ed6a98cfd19155996605474982cc470d7601746a6439078f1a5a3fa8b050", size = 389662, upload-time = "2026-10-04T16:31:44.642Z" }, - { url = "https://files.pythonhosted.org/packages/4f/46/912cf623b2263f9c9c2d04e8508fc38dbe89983faeba5fb36ca4558ae550/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8171b44a054e5c67fd748ada04187f1250bf35b95f85e52ab64bcf3331a923bb", size = 504637, upload-time = "2026-10-04T16:31:46.667Z" }, - { url = "https://files.pythonhosted.org/packages/9b/5c/7f3cfa7c5f01765c9f47c8398210ed0c1eb686c0e99c223cb1c6776d3fb9/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fda1d96e542c37b6c804547dbf489c129fe7c97183a76a5ec275909ba1a063df", size = 402607, upload-time = "2026-10-04T16:31:49.068Z" }, - { url = "https://files.pythonhosted.org/packages/f0/76/2e915d4115ee453c33e6af17bc1df7e22ddc52974e178eeeb92a78c09983/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:270bdcdaac5d5b6f73c5e22e7e135c7f2a50e789f71d9e241d5be8d90026e19a", size = 382762, upload-time = "2026-10-04T16:31:51.24Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e5/844382925d7b84a4074ad79fc2b9d05eb6231ea243b34f247e68e519b606/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:84a6ecc0c940169190d2c23bd969debd48c94dbc855acd60188a68d71d421608", size = 389563, upload-time = "2026-10-04T16:31:53.549Z" }, - { url = "https://files.pythonhosted.org/packages/81/82/d6e3951602dc2e24790ef9d299aa24bf5e2493df5043f2c6da00480cc447/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab4b2fda7c2b542f7f9d886cc6a838c5079d2b76f72e6081411faba11adde2c9", size = 416842, upload-time = "2026-10-04T16:31:55.76Z" }, - { url = "https://files.pythonhosted.org/packages/ea/1c/8d248e4ea671d525ab7daa0703ad81cc2175076fa0ccd7ef088facbd2b01/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:44b32a7c4f0da3d28af31c259e38ddcff096f855e205ed0671d02fcf44f1ea1c", size = 562434, upload-time = "2026-10-04T16:31:57.874Z" }, - { url = "https://files.pythonhosted.org/packages/ad/38/e7ac0db898120d15dea25e3661b1242a40cb3b23d1f4db86c15a01fe0ba1/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:a3dbc5ed9514908d5046107d7b1346bde71eea61de6e0e4919c19354f97e769f", size = 627909, upload-time = "2026-10-04T16:31:59.977Z" }, - { url = "https://files.pythonhosted.org/packages/03/c8/37e555514932cb1ee36c75349187aa882a98dee5d5654c761699ed8a0d27/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6eae33003518fd4cb4f83a218d5371469dd3001aa3b87128c005b07762f7fe5e", size = 593658, upload-time = "2026-10-04T16:32:02.14Z" }, - { url = "https://files.pythonhosted.org/packages/12/5c/5f69a91add94a8a33acea68a2b034a464946a654ff7296af9d957ef0d6a5/rpds_py-2026.9.1-pp311-pypy311_pp80-macosx_10_12_x86_64.whl", hash = "sha256:0483515261947e4e8b8e1375bf7463e7eb6ccfb3d86e7b554d90cd5285f20f32", size = 351769, upload-time = "2026-10-04T16:32:04.675Z" }, - { url = "https://files.pythonhosted.org/packages/41/22/35ea8bf3b2682b90ab687c74e4828418ff12298a5b0b0a0c033f61c86a30/rpds_py-2026.9.1-pp311-pypy311_pp80-macosx_11_0_arm64.whl", hash = "sha256:4cfaf02209061880210819934de2f4f6aa83dc04dafe6770276acc240a56da31", size = 351719, upload-time = "2026-10-04T16:32:06.834Z" }, - { url = "https://files.pythonhosted.org/packages/a3/90/a9ba81408369d34c1aca73319c15adc91ed45c1d21e9e8ee4832ffb7fe0b/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdc537c8633d7fd92a82e2e0d2ab74320a3f63d5e59fb9cf08711e08fe151c4", size = 381109, upload-time = "2026-10-04T16:32:08.994Z" }, - { url = "https://files.pythonhosted.org/packages/b3/44/5192a0bed94cec86bd2a5e1cc5a1bb8f7eec3aec907eacd2deb13e87e326/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10e208f2425d973938afcd56e28a7c4be32e27b6a60b5d381f49fb9d8acf9759", size = 388222, upload-time = "2026-10-04T16:32:11.321Z" }, - { url = "https://files.pythonhosted.org/packages/92/cd/5356549711448f18b52f7a11ffbe90f1228774996fbf3c6cd1b18d22abaf/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c0dbbcc19735fe5f8b0a54c07659d154a9e69f47e15d0a6ab7299215daf62cb", size = 500384, upload-time = "2026-10-04T16:32:13.478Z" }, - { url = "https://files.pythonhosted.org/packages/7a/88/ddda9d28adfe33119c75b2e733d4ba7e326f41d7e1b1093951771768ca48/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684fd492fff4fead00587544e059be2bbcb6f93454f21fa2a91b66fc7508be82", size = 401661, upload-time = "2026-10-04T16:32:15.653Z" }, - { url = "https://files.pythonhosted.org/packages/32/c3/bb59ba16a6b4a57995d15b8c04c00f28df3b938c4dcdde48fbe0f73edb0c/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1028417bb44037eb3069c1009bd7b7277212876cda22fbe565b0bca9fab6d2c", size = 380748, upload-time = "2026-10-04T16:32:17.727Z" }, - { url = "https://files.pythonhosted.org/packages/f5/b8/0580faa1c5a32ddc160130dd7ae54d2d007272a89a40a6b5db3e50f9f585/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:492e5e428cbe126221611f47e068f01660352feec4ad18bc0f5ea9b2ae88fb14", size = 385731, upload-time = "2026-10-04T16:32:19.855Z" }, - { url = "https://files.pythonhosted.org/packages/bf/70/f73564642bbe3322c7eeef2c2f258cf040b71c41a430b532e59d04a1b838/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88b5268892fde430d5531f95bc560b6efbbd67c929662c586afd729a96e7461c", size = 412131, upload-time = "2026-10-04T16:32:22.285Z" }, - { url = "https://files.pythonhosted.org/packages/8c/5d/17fff2e1f8f68721a2afb5cb48f7e442c751bb6b4883157c5abaf618cd08/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:01445c8d194aa032a08e944f16567672da1c62dbdbefd8b6d0693032e290cf68", size = 558193, upload-time = "2026-10-04T16:32:24.4Z" }, - { url = "https://files.pythonhosted.org/packages/2a/d0/869ab6fb08531f97aae4a780b4d61b4190d8aef48fe054ee28bcf7114466/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_i686.whl", hash = "sha256:eef6a03b0b6d08d0835ccfa8ec8d1bc70525e3801387567137b50c557695e6da", size = 622448, upload-time = "2026-10-04T16:32:26.844Z" }, - { url = "https://files.pythonhosted.org/packages/ba/a5/9672e532fe02cd3b92c78cfd8743abca939d96853006c63835009a1ecb6f/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6b9bf3135b4ad5981df9a73d71a35272d650a2985ae9c2746357b24d59de2448", size = 591126, upload-time = "2026-10-04T16:32:29.274Z" }, - { url = "https://files.pythonhosted.org/packages/80/ef/3a9f8e4279c7920af561deed4cb7ebebed2794a8f608cf404d5eef14a105/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_10_12_x86_64.whl", hash = "sha256:56c6952a9b15047466d0c2347c446a761d4527f89976156341e68f0ce5cc08b0", size = 357108, upload-time = "2026-10-04T16:32:31.641Z" }, - { url = "https://files.pythonhosted.org/packages/b7/55/4b2fa381a583760aea5c92841e4e928a358e1c6511b129219e9c2826a226/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_11_0_arm64.whl", hash = "sha256:b242c27c8f836305a4a72df9cdd564386ac57b807bd252a063223331c9316b37", size = 346877, upload-time = "2026-10-04T16:32:34.061Z" }, +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload-time = "2025-07-01T15:57:13.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/4c/4ee8f7e512030ff79fda1df3243c88d70fc874634e2dbe5df13ba4210078/rpds_py-0.26.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed", size = 372610, upload-time = "2025-07-01T15:53:58.844Z" }, + { url = "https://files.pythonhosted.org/packages/fa/9d/3dc16be00f14fc1f03c71b1d67c8df98263ab2710a2fbd65a6193214a527/rpds_py-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0", size = 358032, upload-time = "2025-07-01T15:53:59.985Z" }, + { url = "https://files.pythonhosted.org/packages/e7/5a/7f1bf8f045da2866324a08ae80af63e64e7bfaf83bd31f865a7b91a58601/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1", size = 381525, upload-time = "2025-07-01T15:54:01.162Z" }, + { url = "https://files.pythonhosted.org/packages/45/8a/04479398c755a066ace10e3d158866beb600867cacae194c50ffa783abd0/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7", size = 397089, upload-time = "2025-07-01T15:54:02.319Z" }, + { url = "https://files.pythonhosted.org/packages/72/88/9203f47268db488a1b6d469d69c12201ede776bb728b9d9f29dbfd7df406/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6", size = 514255, upload-time = "2025-07-01T15:54:03.38Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b4/01ce5d1e853ddf81fbbd4311ab1eff0b3cf162d559288d10fd127e2588b5/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e", size = 402283, upload-time = "2025-07-01T15:54:04.923Z" }, + { url = "https://files.pythonhosted.org/packages/34/a2/004c99936997bfc644d590a9defd9e9c93f8286568f9c16cdaf3e14429a7/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d", size = 383881, upload-time = "2025-07-01T15:54:06.482Z" }, + { url = "https://files.pythonhosted.org/packages/05/1b/ef5fba4a8f81ce04c427bfd96223f92f05e6cd72291ce9d7523db3b03a6c/rpds_py-0.26.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3", size = 415822, upload-time = "2025-07-01T15:54:07.605Z" }, + { url = "https://files.pythonhosted.org/packages/16/80/5c54195aec456b292f7bd8aa61741c8232964063fd8a75fdde9c1e982328/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107", size = 558347, upload-time = "2025-07-01T15:54:08.591Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1c/1845c1b1fd6d827187c43afe1841d91678d7241cbdb5420a4c6de180a538/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a", size = 587956, upload-time = "2025-07-01T15:54:09.963Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ff/9e979329dd131aa73a438c077252ddabd7df6d1a7ad7b9aacf6261f10faa/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318", size = 554363, upload-time = "2025-07-01T15:54:11.073Z" }, + { url = "https://files.pythonhosted.org/packages/00/8b/d78cfe034b71ffbe72873a136e71acc7a831a03e37771cfe59f33f6de8a2/rpds_py-0.26.0-cp311-cp311-win32.whl", hash = "sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a", size = 220123, upload-time = "2025-07-01T15:54:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/94/c1/3c8c94c7dd3905dbfde768381ce98778500a80db9924731d87ddcdb117e9/rpds_py-0.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03", size = 231732, upload-time = "2025-07-01T15:54:13.434Z" }, + { url = "https://files.pythonhosted.org/packages/67/93/e936fbed1b734eabf36ccb5d93c6a2e9246fbb13c1da011624b7286fae3e/rpds_py-0.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41", size = 221917, upload-time = "2025-07-01T15:54:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload-time = "2025-07-01T15:54:15.734Z" }, + { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload-time = "2025-07-01T15:54:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload-time = "2025-07-01T15:54:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload-time = "2025-07-01T15:54:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload-time = "2025-07-01T15:54:20.858Z" }, + { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload-time = "2025-07-01T15:54:22.508Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload-time = "2025-07-01T15:54:23.987Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload-time = "2025-07-01T15:54:25.073Z" }, + { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload-time = "2025-07-01T15:54:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload-time = "2025-07-01T15:54:27.424Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload-time = "2025-07-01T15:54:29.93Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload-time = "2025-07-01T15:54:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload-time = "2025-07-01T15:54:32.195Z" }, + { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload-time = "2025-07-01T15:54:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload-time = "2025-07-01T15:54:34.755Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload-time = "2025-07-01T15:54:36.292Z" }, + { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload-time = "2025-07-01T15:54:37.469Z" }, + { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload-time = "2025-07-01T15:54:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload-time = "2025-07-01T15:54:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload-time = "2025-07-01T15:54:43.025Z" }, + { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload-time = "2025-07-01T15:54:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload-time = "2025-07-01T15:54:46.043Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload-time = "2025-07-01T15:54:47.64Z" }, + { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload-time = "2025-07-01T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload-time = "2025-07-01T15:54:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload-time = "2025-07-01T15:54:52.023Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload-time = "2025-07-01T15:54:53.692Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload-time = "2025-07-01T15:54:54.822Z" }, + { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload-time = "2025-07-01T15:54:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload-time = "2025-07-01T15:54:58.561Z" }, + { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload-time = "2025-07-01T15:54:59.751Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload-time = "2025-07-01T15:55:00.898Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload-time = "2025-07-01T15:55:02.201Z" }, + { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload-time = "2025-07-01T15:55:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload-time = "2025-07-01T15:55:05.398Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload-time = "2025-07-01T15:55:08.316Z" }, + { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload-time = "2025-07-01T15:55:09.52Z" }, + { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload-time = "2025-07-01T15:55:11.216Z" }, + { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload-time = "2025-07-01T15:55:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload-time = "2025-07-01T15:55:14.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload-time = "2025-07-01T15:55:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload-time = "2025-07-01T15:55:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload-time = "2025-07-01T15:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload-time = "2025-07-01T15:55:20.399Z" }, + { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload-time = "2025-07-01T15:55:21.729Z" }, + { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload-time = "2025-07-01T15:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload-time = "2025-07-01T15:55:24.207Z" }, + { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload-time = "2025-07-01T15:55:25.554Z" }, + { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload-time = "2025-07-01T15:55:27.798Z" }, + { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload-time = "2025-07-01T15:55:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload-time = "2025-07-01T15:55:30.719Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload-time = "2025-07-01T15:55:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload-time = "2025-07-01T15:55:33.312Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload-time = "2025-07-01T15:55:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload-time = "2025-07-01T15:55:36.202Z" }, + { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload-time = "2025-07-01T15:55:37.483Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload-time = "2025-07-01T15:55:38.828Z" }, + { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload-time = "2025-07-01T15:55:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload-time = "2025-07-01T15:55:42.015Z" }, + { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload-time = "2025-07-01T15:55:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload-time = "2025-07-01T15:55:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload-time = "2025-07-01T15:55:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload-time = "2025-07-01T15:55:48.412Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload-time = "2025-07-01T15:55:49.816Z" }, + { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload-time = "2025-07-01T15:55:51.192Z" }, + { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload-time = "2025-07-01T15:55:52.541Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload-time = "2025-07-01T15:55:53.874Z" }, + { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload-time = "2025-07-01T15:55:55.167Z" }, + { url = "https://files.pythonhosted.org/packages/51/f2/b5c85b758a00c513bb0389f8fc8e61eb5423050c91c958cdd21843faa3e6/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674", size = 373505, upload-time = "2025-07-01T15:56:34.716Z" }, + { url = "https://files.pythonhosted.org/packages/23/e0/25db45e391251118e915e541995bb5f5ac5691a3b98fb233020ba53afc9b/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696", size = 359468, upload-time = "2025-07-01T15:56:36.219Z" }, + { url = "https://files.pythonhosted.org/packages/0b/73/dd5ee6075bb6491be3a646b301dfd814f9486d924137a5098e61f0487e16/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb", size = 382680, upload-time = "2025-07-01T15:56:37.644Z" }, + { url = "https://files.pythonhosted.org/packages/2f/10/84b522ff58763a5c443f5bcedc1820240e454ce4e620e88520f04589e2ea/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88", size = 397035, upload-time = "2025-07-01T15:56:39.241Z" }, + { url = "https://files.pythonhosted.org/packages/06/ea/8667604229a10a520fcbf78b30ccc278977dcc0627beb7ea2c96b3becef0/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8", size = 514922, upload-time = "2025-07-01T15:56:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/24/e6/9ed5b625c0661c4882fc8cdf302bf8e96c73c40de99c31e0b95ed37d508c/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5", size = 402822, upload-time = "2025-07-01T15:56:42.137Z" }, + { url = "https://files.pythonhosted.org/packages/8a/58/212c7b6fd51946047fb45d3733da27e2fa8f7384a13457c874186af691b1/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7", size = 384336, upload-time = "2025-07-01T15:56:44.239Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f5/a40ba78748ae8ebf4934d4b88e77b98497378bc2c24ba55ebe87a4e87057/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b", size = 416871, upload-time = "2025-07-01T15:56:46.284Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a6/33b1fc0c9f7dcfcfc4a4353daa6308b3ece22496ceece348b3e7a7559a09/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb", size = 559439, upload-time = "2025-07-01T15:56:48.549Z" }, + { url = "https://files.pythonhosted.org/packages/71/2d/ceb3f9c12f8cfa56d34995097f6cd99da1325642c60d1b6680dd9df03ed8/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0", size = 588380, upload-time = "2025-07-01T15:56:50.086Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/9de62c2150ca8e2e5858acf3f4f4d0d180a38feef9fdab4078bea63d8dba/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c", size = 555334, upload-time = "2025-07-01T15:56:51.703Z" }, ] [[package]] name = "send2trash" -version = "2.1.0" +version = "1.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394, upload-time = "2024-04-07T00:01:09.267Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072, upload-time = "2024-04-07T00:01:07.438Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c5/f0/184b4b5f8d00f2a92cf96eec8967a3d550b52cf94362dad1100df9e48d57/send2trash-2.1.0.tar.gz", hash = "sha256:1c72b39f09457db3c05ce1d19158c2cbef4c32b8bedd02c155e49282b7ea7459", size = 17255, upload-time = "2026-01-14T06:27:36.056Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/78/504fdd027da3b84ff1aecd9f6957e65f35134534ccc6da8628eb71e76d3f/send2trash-2.1.0-py3-none-any.whl", hash = "sha256:0da2f112e6d6bb22de6aa6daa7e144831a4febf2a87261451c4ad849fe9a873c", size = 17610, upload-time = "2026-01-14T06:27:35.218Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, ] [[package]] @@ -2627,29 +2051,21 @@ wheels = [ ] [[package]] -name = "soupsieve" -version = "2.10" +name = "sniffio" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11.5'", -] -sdist = { url = "https://files.pythonhosted.org/packages/71/c3/1b817965ac12dc002d7c9cd7dfffdd7d4fbf9b45763ef2ffe7b86ee94670/soupsieve-2.10.tar.gz", hash = "sha256:49e9380d7d2905463583bafe285e818c7366a9ed7b3aee221c1ac79c905d8bc0", size = 124337, upload-time = "2026-09-24T02:36:35.048Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/87/5ed59e1d0290564e2027ed066c52b059892c4637741337fc0967183c8d4d/soupsieve-2.10-py3-none-any.whl", hash = "sha256:8596eb8967d744174820280fa62b4542a2e955bfaccca73ed8a13c6eb8e9b502", size = 38019, upload-time = "2026-09-24T02:36:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, ] [[package]] name = "soupsieve" -version = "3.0.4" +version = "2.7" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version >= '3.12' and python_full_version < '3.14'", - "python_full_version >= '3.11.5' and python_full_version < '3.12'", -] -sdist = { url = "https://files.pythonhosted.org/packages/19/63/0b6bae54546aed98d72f12d09df57b19a287f01c84d22047fa2e23772ab9/soupsieve-3.0.4.tar.gz", hash = "sha256:924fab84ae21604c19e175e1f39815eb6fa83ba23836e09e9de180925e5bc4c0", size = 119017, upload-time = "2026-10-22T00:45:26.362Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/66/473f7ca0be0b06e38ee8c85ee2db184e3981bd769fac2e7c19c8a8865211/soupsieve-3.0.4-py3-none-any.whl", hash = "sha256:8412826614f9c632227067d0985aeb9f584bd15efc852955430e097a9fe7afbf", size = 42458, upload-time = "2026-10-22T00:45:24.843Z" }, + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, ] [[package]] @@ -2682,14 +2098,14 @@ wheels = [ [[package]] name = "tinycss2" -version = "1.5.1" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, ] [[package]] @@ -2701,72 +2117,80 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, ] +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, +] + [[package]] name = "tomlkit" -version = "0.15.2" +version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/08/72/fc01563df95c189a9f65850096bdc205bc2fe37da6c740cd64afaf18d07e/tomlkit-0.15.2.tar.gz", hash = "sha256:83e32755ba1d20d9340bd069ee97e9f6232ba2346b63ffcba425de01f7e327a6", size = 190522, upload-time = "2026-10-16T04:07:08.166Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/46/7d84138a60a8bd796825b2d38ebe92d0d16501ca57d501b7c5d677401bbc/tomlkit-0.15.2-py3-none-any.whl", hash = "sha256:05562412163a3037b94497385fb7f9204c637bc605af7a48199e41cf2272f437", size = 52225, upload-time = "2026-10-16T04:07:09.216Z" }, + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, ] [[package]] name = "tornado" -version = "6.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/02/5f549b1ad5da6267ed1e1fac2eef69257b1979cc812497002499b7895ff9/tornado-6.6.tar.gz", hash = "sha256:34c4aa916d7f2b2d5cadee2c6850f5a4a7f3d688cbf58399ea9bd3057af4abd5", size = 617998, upload-time = "2026-10-21T15:31:04.733Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/f5/d3e6f76b945f9812842db742d0708a3b6287e850e81be3ca10e290c103c6/tornado-6.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:01abf15429d64f04ccfafc238b191cc2c177108b7a331f4461707ad77198c8c2", size = 528326, upload-time = "2026-10-21T15:30:05.528Z" }, - { url = "https://files.pythonhosted.org/packages/30/69/b20cf3a8bf641ec792a5a6050aa153e8f120604f9c23471142de535113e5/tornado-6.6-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:11bb97c00981eb8254e55bd6a5ad960c983ae343fef8ae3ae5584cd1fb70236a", size = 529544, upload-time = "2026-10-21T15:30:07.126Z" }, - { url = "https://files.pythonhosted.org/packages/0f/f4/d9d8d3ac345aa9df3a132ad03bd443160c2ab24ad4003b4e8d6d5af06371/tornado-6.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e152a3b2d3eae113b836d979823f7bb2320f7e334a84449729964921f374a4c", size = 530523, upload-time = "2026-10-21T15:30:08.478Z" }, - { url = "https://files.pythonhosted.org/packages/ad/82/1296ade1c14dee5a4906e5ca092997622ece7c4dc768c68ed9caaf895d1b/tornado-6.6-cp311-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e912d4c4babd04db6f34b25b748174a4a176debe86c8610beedf1815f9af7fdd", size = 530739, upload-time = "2026-10-21T15:30:09.98Z" }, - { url = "https://files.pythonhosted.org/packages/66/30/6ac1eab66c81af46dafd93c9b24bd311f82e199d9d7b8ce2a64a91b6a200/tornado-6.6-cp311-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33aabe8a03d426cef4e0fe5669f0643cadd983b54957f1a7ac2789ec326e9644", size = 529738, upload-time = "2026-10-21T15:30:11.498Z" }, - { url = "https://files.pythonhosted.org/packages/24/b4/6c1f6aa1fd148e4d0f500a10cd0c9949e7bf385e161ff497c81de5b3ae4f/tornado-6.6-cp311-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9aaf0e1c2fb9f046f30e2036b8d2060666399e8464d0a72769e43c754089567b", size = 527908, upload-time = "2026-10-21T15:30:13.298Z" }, - { url = "https://files.pythonhosted.org/packages/54/5b/67d3d452b1179bc9e265cebd381a56ab4cf2d7b2a54607aedd8d6e1ebc2e/tornado-6.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61fc5513cea97720ab9bf54b04827ac0f4500c63f0b072b963d6145c798b4661", size = 530367, upload-time = "2026-10-21T15:30:15.183Z" }, - { url = "https://files.pythonhosted.org/packages/74/14/4e8e9a14f77bcafb2408634b2d4c8c676ad7a43bf8dac4ee2d48370698f9/tornado-6.6-cp311-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:31e1a0d5cd704d2fe8a008c1cc27a0e2b67269ca263630a27985dddc160b5537", size = 530456, upload-time = "2026-10-21T15:30:16.741Z" }, - { url = "https://files.pythonhosted.org/packages/56/12/e3ddef99a2089ccfc86f32bd3f39caaad87bee4868be1bacbf213a0b07a2/tornado-6.6-cp311-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:74416e41e9bdf70fbc2fb242f6fbbc7a58ec11e59d39f15fc5a421ecb6845118", size = 529610, upload-time = "2026-10-21T15:30:18.031Z" }, - { url = "https://files.pythonhosted.org/packages/35/3d/62a692343d46b37e852e5078e0f6513534d925f70a04580072e3c127b129/tornado-6.6-cp311-abi3-musllinux_1_2_s390x.whl", hash = "sha256:8cdd69104ae9d705b3f04d2563aa96e357043e267a455802daae9a1e633a37c8", size = 529803, upload-time = "2026-10-21T15:30:19.326Z" }, - { url = "https://files.pythonhosted.org/packages/49/04/6c59a9413adfe4810f648a4dd9fdf476f13b0495f9cc25ef856b71f9ce1e/tornado-6.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:fc7c8a3263501fbe97518cd699101bc3c5f499a7dd4f75fc6cbb3bd9ee1db1f1", size = 529751, upload-time = "2026-10-21T15:30:20.826Z" }, - { url = "https://files.pythonhosted.org/packages/31/36/a1b3b84cd347ae43f982d3bf95628de6c6365668dba2543af47c6a1c888e/tornado-6.6-cp311-abi3-win32.whl", hash = "sha256:b54ca69ff93d0374efb083a12a1e9ec2dd2036e8496d197e0e8ef77b8d9135c3", size = 530643, upload-time = "2026-10-21T15:30:22.428Z" }, - { url = "https://files.pythonhosted.org/packages/b7/50/dc813fe35a672e14ee8bed8b5c634eeb343a05c98eb455318a169de24567/tornado-6.6-cp311-abi3-win_amd64.whl", hash = "sha256:48f26ed9d7beb64e5f06adc864524e581ab6d62ba8ff46eaaa1ac2d0e6d753fd", size = 530886, upload-time = "2026-10-21T15:30:23.975Z" }, - { url = "https://files.pythonhosted.org/packages/0d/71/62a9b9e980026d38874740d0a7c162f53eb0563f6a441e3aff84c48db7e8/tornado-6.6-cp311-abi3-win_arm64.whl", hash = "sha256:29114ffd4e4de869d390393df9e9a0f191065aae1a96f38a58d35e464c04a867", size = 530899, upload-time = "2026-10-21T15:30:25.264Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4c/633e3568eb574df555d6ddd2dac44b7793a5c26cd63b444e653fcfb1d6ec/tornado-6.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:63fc8d243b52fd8dd9ed4ad02d0df08f2024f9aea632a433a8a6c91075076d44", size = 528432, upload-time = "2026-10-21T15:30:26.578Z" }, - { url = "https://files.pythonhosted.org/packages/37/eb/b525d1870ad28a56f47b664dd8fd3fab4f7ddd237c87c14e97248bf4762f/tornado-6.6-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8d4b85cac795bfc6a7f20ba81871abb8c2ae8fba019061b8a9ae1c2f97e29637", size = 532586, upload-time = "2026-10-21T15:30:28.027Z" }, - { url = "https://files.pythonhosted.org/packages/b7/35/909a33c253352346ca081a27ca66b45c1398468adf784b767597ca773c28/tornado-6.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e035c065edadfa696529d05eebcbeb25154c129b5aee6dbfb697a6abf5d4f697", size = 533641, upload-time = "2026-10-21T15:30:29.318Z" }, - { url = "https://files.pythonhosted.org/packages/6f/64/100202666d6e3d96288ab184827762415456c139798a15c962547f9fabf9/tornado-6.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b94e589ab855090c448b5c0937b3a75f1c1a604b7b36207e8236d209f720b9c", size = 533869, upload-time = "2026-10-21T15:30:30.882Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e0/af3ed62bc15830d60328d5b4a1a9076b35ea0ba142cb17b1c1772cb15c59/tornado-6.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1a394c8c9db9137f2a2b42869d9f7b91398fcf19da120d0dde4c4546172710f7", size = 532767, upload-time = "2026-10-21T15:30:32.273Z" }, - { url = "https://files.pythonhosted.org/packages/24/d7/1e2e1a6932eb62d63324b64dba2f62e6eaf79ad883dd209352c297b7848c/tornado-6.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0215d1df6e4b5e736ddad5adf0af4138cf7437fdd39c77c5e69768e37850a632", size = 530956, upload-time = "2026-10-21T15:30:33.746Z" }, - { url = "https://files.pythonhosted.org/packages/70/65/3b9a0e53d7a4c39f2ebe95486540fa8eeb67bfb6e8c437d603c00d35b128/tornado-6.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4d711790e0a9576ad924d942c4607e4e401d697588ea6f30f6662824008a7add", size = 533372, upload-time = "2026-10-21T15:30:35.085Z" }, - { url = "https://files.pythonhosted.org/packages/44/48/90979cbfaa3ff941324a2605eb794af0f087c670cd99f18a69ab40498073/tornado-6.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:034a66bae0f55421d007803e2385d2a59707d8829b2f026373d42f08256e9922", size = 533425, upload-time = "2026-10-21T15:30:36.425Z" }, - { url = "https://files.pythonhosted.org/packages/bb/c4/ce743a86d91f85c255b77a4282eb5b2716b61e74430eb9d1df8578a539d2/tornado-6.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5cb38483b077129056a94dd415a71d29ab4e42b46da894fee8b4657003f10b21", size = 532545, upload-time = "2026-10-21T15:30:37.789Z" }, - { url = "https://files.pythonhosted.org/packages/02/5e/a82131e35778540fc19139229d02aa8cf2453a8022e202be50c88f0f8ac3/tornado-6.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:46bbbd107efa37777ac4b83601866d19b4dbd5b770a7a9123582633d95959ad3", size = 532700, upload-time = "2026-10-21T15:30:39.336Z" }, - { url = "https://files.pythonhosted.org/packages/3a/09/6dac8c2c677c65d60b3d7dae94176dbfe392f314e7c8e2d709623edd6a26/tornado-6.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b85e9d0263cdbc027b95947c8b873a7bc7fd6a08d16bfb4f5047350b0808e464", size = 532712, upload-time = "2026-10-21T15:30:40.698Z" }, - { url = "https://files.pythonhosted.org/packages/b2/ac/71e5776cbcdc3264e81aa6db28c69717ba50607a9eb8d5b766f11a4b020e/tornado-6.6-cp314-cp314t-win32.whl", hash = "sha256:4276eef0880e5fe4488e6799c2842f59af3b06637e9313ab4fb506f9c9c2d6cb", size = 530491, upload-time = "2026-10-21T15:30:42.115Z" }, - { url = "https://files.pythonhosted.org/packages/d8/0f/0b6a6908a5b5aa8320009dfdb84434b1cf160b577a00456e59ab9e6ea598/tornado-6.6-cp314-cp314t-win_amd64.whl", hash = "sha256:10d4af98c6df09f8429b1340ccaea3a72887b86f695dfb8056bda517c8115a00", size = 530780, upload-time = "2026-10-21T15:30:43.414Z" }, - { url = "https://files.pythonhosted.org/packages/3c/39/c152e1cc5371f75f5f9f0a4f44bf2dc9396be9407d384de7428446fb4651/tornado-6.6-cp314-cp314t-win_arm64.whl", hash = "sha256:b1f0ef20a5278854f5fdac31637bafadb055405df28b7fc945e54add12b172e3", size = 530781, upload-time = "2026-10-21T15:30:44.741Z" }, - { url = "https://files.pythonhosted.org/packages/0c/c5/f96c7d7a8895745bb37dfb6e6107e1ee40ad02a4b162d7d6c143644455ab/tornado-6.6-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:8f8e382da30fe042f27f27a871e21aefc2613870e5a41648de18446c72d6ea59", size = 528446, upload-time = "2026-10-21T15:30:46.112Z" }, - { url = "https://files.pythonhosted.org/packages/c0/dd/ab8f6500d274b9c55b025798eb54e92591bcff27515799bec443bd54e35a/tornado-6.6-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8c7a8a328396c2195454a2ecd9499512441bbce99505544a717e6a87d16ff6f9", size = 532774, upload-time = "2026-10-21T15:30:47.393Z" }, - { url = "https://files.pythonhosted.org/packages/87/23/b78e7d1bf329160b8157284005395421ea941864c16c7f04c3e48c98bcf9/tornado-6.6-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca025bb0da81c294aef26f27427316df1525220820315f4bf32dc1e84a4d2232", size = 533872, upload-time = "2026-10-21T15:30:48.884Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4f/ab66b614ad0bc9a219484be6bc2c002c8de9916a7b6c7b27fe6273838e5c/tornado-6.6-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:59c22ebc905ac2a267f8d9d8a878f86afbcbbde329d75c485f1422fc45a81b83", size = 534027, upload-time = "2026-10-21T15:30:50.157Z" }, - { url = "https://files.pythonhosted.org/packages/da/63/501fa15a36bace2f4b9158228cf922d606403261bf71c960c433ec3ca0a4/tornado-6.6-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f89802bc0bcd15f988d9325b4e6d2171bb04ea68d188732556335e10d3fd00bd", size = 532936, upload-time = "2026-10-21T15:30:51.45Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b7/82d643f635f0300bda98613ca2660b4f3134b6fb594c6fddfa4de706806c/tornado-6.6-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:70043256d5958f9c655066153d23d60ea3e29bf9854f7fb75850e223c477758a", size = 531254, upload-time = "2026-10-21T15:30:52.865Z" }, - { url = "https://files.pythonhosted.org/packages/d4/53/92c40891a94750bc09257310af964bf25c59e3531d6199736c318baa864f/tornado-6.6-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:82b49495e3849d644b841ef33b35491160055997deaa93720ff647ef019421db", size = 533566, upload-time = "2026-10-21T15:30:54.15Z" }, - { url = "https://files.pythonhosted.org/packages/7e/88/b82f5c5efde731b88d839ad99cb6ace2a521f03bb6d7346d2de089c76da8/tornado-6.6-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:07b2bcaa4bf447bdbfb664e4c28344226540db3f0ebccd74886528338a240765", size = 533567, upload-time = "2026-10-21T15:30:55.451Z" }, - { url = "https://files.pythonhosted.org/packages/02/2c/e9a7f5d0fca0bdbcd48b2d9c7884dd0b32669c9945d98bc6d303a80ecfea/tornado-6.6-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:c36b921374c302e54909bae17d9f354061d80e7ae7d8c94f73abbcc217866460", size = 532849, upload-time = "2026-10-21T15:30:56.729Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f5/4ade737340ca6ce9c677ea0c2843591c8ad065d07f0913c28d922c7e078e/tornado-6.6-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:7412d9e37aa9f7048e4b591f520a95f7a097278ffab15f1ddf3f5c2320cf6648", size = 532873, upload-time = "2026-10-21T15:30:58.067Z" }, - { url = "https://files.pythonhosted.org/packages/8e/04/6acdc937d0bb6189ddb34ceded517d7bd1c7b3bded5d4e1b3442160e6b6f/tornado-6.6-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:15bc95112b2d24b0bfaee9a004e3f974da929e33b4244a7f695a22f45b08a5e5", size = 532883, upload-time = "2026-10-21T15:30:59.395Z" }, - { url = "https://files.pythonhosted.org/packages/ab/27/0a766fac6b1cc629d96346329a0485287fd2857c51a887a3a154f2a69938/tornado-6.6-cp315-cp315t-win32.whl", hash = "sha256:f661c21117b875d612371f3eb243d0c69f56d9bdd6aee38b7c24453419dfe554", size = 530488, upload-time = "2026-10-21T15:31:00.77Z" }, - { url = "https://files.pythonhosted.org/packages/5c/80/3e4142570883da27b3f60ae82c638ac96e60997eac684740613557519c96/tornado-6.6-cp315-cp315t-win_amd64.whl", hash = "sha256:ee8853ab35da510dc952879ebd9995c82bc10ffb7925fd87930dc0d6916f4b39", size = 530777, upload-time = "2026-10-21T15:31:02.087Z" }, - { url = "https://files.pythonhosted.org/packages/17/57/4a85c617b6349962320b4afbe1386d5b05fd57218ee8ad6e82e0110ec9ee/tornado-6.6-cp315-cp315t-win_arm64.whl", hash = "sha256:7de62e2dfdf559fd7154d2b9aa58ff3d9cff8304ae0519341feb082618bc2a33", size = 530780, upload-time = "2026-10-21T15:31:03.425Z" }, +version = "6.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload-time = "2025-05-22T18:15:38.788Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload-time = "2025-05-22T18:15:20.862Z" }, + { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload-time = "2025-05-22T18:15:22.591Z" }, + { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload-time = "2025-05-22T18:15:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload-time = "2025-05-22T18:15:25.735Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload-time = "2025-05-22T18:15:27.499Z" }, + { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload-time = "2025-05-22T18:15:29.299Z" }, + { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload-time = "2025-05-22T18:15:31.038Z" }, + { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload-time = "2025-05-22T18:15:32.426Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload-time = "2025-05-22T18:15:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload-time = "2025-05-22T18:15:36.1Z" }, + { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload-time = "2025-05-22T18:15:37.433Z" }, ] [[package]] name = "traitlets" -version = "5.16.1" +version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/2e/a7fbfe268c8a3b32546930c0297c101d65a4a14c304ad5790a9f478f0e4e/traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1", size = 166137, upload-time = "2026-08-03T08:32:36.848Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/66/0d785f0bc5e4315a96c989bb476d0fc07ea4f85132550c7b156ca2035d52/traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b", size = 86211, upload-time = "2026-08-03T08:32:34.48Z" }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] [[package]] @@ -2845,47 +2269,47 @@ wheels = [ [[package]] name = "typer" -version = "0.27.3" +version = "0.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-doc" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "click" }, { name = "rich" }, { name = "shellingham" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/51/d33db42cc72ffd8c30777547b42d01f0cbf9d95a770457698d0174b3ed71/typer-0.27.3.tar.gz", hash = "sha256:d0396f770a560ab1b0a8504e13b5f254b728cedb05c61cf0359e944e50ce8901", size = 205303, upload-time = "2026-10-06T17:24:16.61Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/8c/7d682431efca5fd290017663ea4588bf6f2c6aad085c7f108c5dbc316e70/typer-0.16.0.tar.gz", hash = "sha256:af377ffaee1dbe37ae9440cb4e8f11686ea5ce4e9bae01b84ae7c63b87f1dd3b", size = 102625, upload-time = "2025-05-26T14:30:31.824Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/ea/2e31b67051e91a133189e9c000c222502ddc6969856416de0d095de4c0b0/typer-0.27.3-py3-none-any.whl", hash = "sha256:e50022f28b82a86313e54501317a1db64bf8f8d036ff8cfe5ca7e47675454aff", size = 123312, upload-time = "2026-10-06T17:24:15.054Z" }, + { url = "https://files.pythonhosted.org/packages/76/42/3efaf858001d2c2913de7f354563e3a3a2f0decae3efe98427125a8f441e/typer-0.16.0-py3-none-any.whl", hash = "sha256:1f79bed11d4d02d4310e3c1b7ba594183bcedb0ac73b27a9e5f28f6fb5b98855", size = 46317, upload-time = "2025-05-26T14:30:30.523Z" }, ] [[package]] -name = "typing-extensions" -version = "4.16.0" +name = "types-python-dateutil" +version = "2.9.0.20250708" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/95/6bdde7607da2e1e99ec1c1672a759d42f26644bbacf939916e086db34870/types_python_dateutil-2.9.0.20250708.tar.gz", hash = "sha256:ccdbd75dab2d6c9696c350579f34cffe2c281e4c5f27a585b2a2438dd1d5c8ab", size = 15834, upload-time = "2025-07-08T03:14:03.382Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, + { url = "https://files.pythonhosted.org/packages/72/52/43e70a8e57fefb172c22a21000b03ebcc15e47e97f5cb8495b9c2832efb4/types_python_dateutil-2.9.0.20250708-py3-none-any.whl", hash = "sha256:4d6d0cc1cc4d24a2dc3816024e502564094497b713f7befda4d5bc7a8e3fd21f", size = 17724, upload-time = "2025-07-08T03:14:02.593Z" }, ] [[package]] -name = "typing-inspection" -version = "0.4.4" +name = "typing-extensions" +version = "4.14.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, ] [[package]] -name = "tzdata" -version = "2026.5" +name = "typing-inspection" +version = "0.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d9/68/f1b440335057bfce71b6e50a9d09445aa2ecbd08359a337976627b8409e7/tzdata-2026.5.tar.gz", hash = "sha256:8cc73c0a0bfca7dbfa59235d60b2eff82231dee33f53d206db1acd9173cfc0a7", size = 200404, upload-time = "2026-10-03T09:23:14.143Z" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/21/1e5995a1c920cce14e4bffae20c665ec10e7ed03ab25e006cd741092b718/tzdata-2026.5-py2.py3-none-any.whl", hash = "sha256:b683bd1b6659ddcd810ff02ad09ba821d4bf1065072805063eb35c49617905ac", size = 347996, upload-time = "2026-10-03T09:23:12.535Z" }, + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, ] [[package]] @@ -2899,100 +2323,73 @@ wheels = [ [[package]] name = "urllib3" -version = "2.8.0" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, ] [[package]] name = "uv" -version = "0.13.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/f0/7565e80415f841c3500ed69d86516c7676e3b24470a218ab61b1f43071a2/uv-0.13.5.tar.gz", hash = "sha256:979409b8c9a78df140ffb19c53f511b7a73526da8d1d5e36558833055e371c6c", size = 7513309, upload-time = "2026-10-22T01:32:33.909Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/24/ff/e30478710f53cf388c892e27e90662aa2acac7a7998bdb18023c595213c1/uv-0.13.5-py3-none-linux_armv6l.whl", hash = "sha256:8d092d07d2389909027c2ed4965ade1bd46bbcecceb26686ff40927684f8c457", size = 18325046, upload-time = "2026-10-22T01:31:37.115Z" }, - { url = "https://files.pythonhosted.org/packages/e3/2a/dcae794203261e49564bb9ff7c4b64a093f69ac73476cc8ce54c1deed3a1/uv-0.13.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:337a14829bb499e114989df4f908f134ff37f1fb6c33497541cfb05b28080e39", size = 17335724, upload-time = "2026-10-22T01:31:40.889Z" }, - { url = "https://files.pythonhosted.org/packages/d2/26/9ac45211123244ea68be852775093af487a64debc13621a2de239f8ebe73/uv-0.13.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a42c85fa8156e1e5e2cecdbc77bb818ea1dcf5f78b8e2a8f84c7fe4f16f0702e", size = 14470685, upload-time = "2026-10-22T01:31:43.897Z" }, - { url = "https://files.pythonhosted.org/packages/e8/2e/5bf9acf9d11fb790420e258a875e13bba36bc890858350642aca185efe0e/uv-0.13.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:2386c2dc9b59fc1d39b1c500e4319d71d3268232eb3b38e29cd6775d6269e8d4", size = 17784583, upload-time = "2026-10-22T01:31:46.95Z" }, - { url = "https://files.pythonhosted.org/packages/f3/70/b02fdcbae77346e3ec1310e7de9dde541252e709f6641db3fbd32cd4da79/uv-0.13.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:4f62680fe58c5a83fd539e38f1956c2b577b1f5939c9020aa4c7f0addda2f4ad", size = 17866408, upload-time = "2026-10-22T01:31:50.352Z" }, - { url = "https://files.pythonhosted.org/packages/fd/b9/6663095851e0943e05e47318d7600e567bc172a1e7a26b21b8e6608e8491/uv-0.13.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e03f5717bdaaf5ab4e2df361d2395e36b515946f56ef4bed88801aeb9959fb0", size = 17753574, upload-time = "2026-10-22T01:31:53.502Z" }, - { url = "https://files.pythonhosted.org/packages/e5/84/1bb89a94486b813bbeaa1b8b491e69a25fa864626711944127b186f903de/uv-0.13.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f867c5ec24c563afaae730a13e46cdf74a1a0b64c134286ff99762a96e2abf40", size = 18502087, upload-time = "2026-10-22T01:31:56.748Z" }, - { url = "https://files.pythonhosted.org/packages/a4/a1/b0b0c7247f3bb0f307eae8a28679ecd0d4b0e2757fcf6c87dea6f679a099/uv-0.13.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3fd5db55c20feb672ea457361aba29ab68b9ae69a14d98ad6c138b5f86dcca4", size = 19927049, upload-time = "2026-10-22T01:31:59.831Z" }, - { url = "https://files.pythonhosted.org/packages/b4/44/6bf11de78ce18869849a14178534b900dbe4e310270b2f60df6503c03137/uv-0.13.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e01481ae5212e45ee7c85fad5fc67f06b0ee0329a7c3c289dc529da884b03881", size = 19662743, upload-time = "2026-10-22T01:32:03.258Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ad/3c2a81d66d1839063662e5b6c0002ec31f8ee987dbc5295747627ca6160a/uv-0.13.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa8d26e08e34c29c0c4e820cf3181757086d547240b4f4d31ff1d8bd810ca946", size = 17211825, upload-time = "2026-10-22T01:32:06.393Z" }, - { url = "https://files.pythonhosted.org/packages/4c/92/d83d019c63c1ccc6ff17df2bfe76270412f9766e7e71aa4d4ccbf018683f/uv-0.13.5-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:91e58e304b63b6c91bac5561459ab0c3ea24f17bc01ea9359d69fed72142978f", size = 16654136, upload-time = "2026-10-22T01:32:10.086Z" }, - { url = "https://files.pythonhosted.org/packages/b8/5a/d42f9d93b322ad36647eb3bf516cc528847c240f630f6df213b6221c5262/uv-0.13.5-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:309a74d3c488bfaa3ba7bff759da73193d8781729c0a01274f4940fd32bb5712", size = 17921105, upload-time = "2026-10-22T01:32:13.174Z" }, - { url = "https://files.pythonhosted.org/packages/97/79/c5c2c39c78cf7a1dd6e041b3f7aa2cc4258d351d42dea06f6fee0bde5daa/uv-0.13.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:469cca66de1b17c75b9b9de806a64cffb57cba5e42b1e30d0bba6fa72a146f58", size = 18103266, upload-time = "2026-10-22T01:32:16.302Z" }, - { url = "https://files.pythonhosted.org/packages/01/2f/e5c70a05013077e5ecadb804418ddbab33f7279f96d052f79f565369b2a7/uv-0.13.5-py3-none-musllinux_1_1_i686.whl", hash = "sha256:2386e8dbfe110ff2f8ec8bd344dd18bf39eb9eb54e1edeeb87c3b85c34229cd3", size = 17842061, upload-time = "2026-10-22T01:32:19.208Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b0/7dba2cb636d7f58e0d74e948ad1afc6b7923e84e82de025e9951a68055db/uv-0.13.5-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:d162669e3a7811c584b03690eaa11e796ad1d309aa8229d5dfe3cbcd68a90400", size = 18963145, upload-time = "2026-10-22T01:32:22.362Z" }, - { url = "https://files.pythonhosted.org/packages/00/7c/e38b312abaae1bd59ff5886126f48e9e223fbb9a8edf9e236ede976f67cb/uv-0.13.5-py3-none-win32.whl", hash = "sha256:f4e55a6e2a1089fe74ed50fbdf2df0f6f336ee148ad232b05932db5deee8007e", size = 16240919, upload-time = "2026-10-22T01:32:25.329Z" }, - { url = "https://files.pythonhosted.org/packages/32/ea/771744a784b16aa21d195cb5d5d5a2878d72fa00fc26f11ea3f9646994fe/uv-0.13.5-py3-none-win_amd64.whl", hash = "sha256:1fb29fc46ba12033e2ef95a95ac79d649e71bbb1358419bbbcbd19d86026ef2f", size = 15358650, upload-time = "2026-10-22T01:32:28.22Z" }, - { url = "https://files.pythonhosted.org/packages/52/67/1f31243f75ece410f2db1afdfc9a9f9722fdee2385e4a347c3ca1dee6d13/uv-0.13.5-py3-none-win_arm64.whl", hash = "sha256:0548460d46c8667488b1f089e936f29f0edfb1cc753f9152ffbd8bc84a46aa20", size = 15533668, upload-time = "2026-10-22T01:32:31.335Z" }, +version = "0.11.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/8e/2777bf40df3c634f2a522baaa2995d2bd5901461fc5d8730c04c39fa6c75/uv-0.11.25.tar.gz", hash = "sha256:458e731778e7b5cc870710397859c23e766703e7bc0695f23b3eb15080745ba6", size = 4329198, upload-time = "2026-06-27T00:49:00.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/a7/dc836daca0db76178cfe4e40ee95fa2c5f96a3d7b3cda0bdde5291aef8b8/uv-0.11.25-py3-none-linux_armv6l.whl", hash = "sha256:d6f965a79fc7539a12139ce981caa0cbf7d9d3bd4ea3daadaf174ab4d7fb6e42", size = 25153689, upload-time = "2026-06-27T00:48:10.708Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/d60eabb616db232ed0e682c55d858d0980175a92336429c4e0ee82a160e6/uv-0.11.25-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:610650cbaa0a9b18015da39d2c28d736d287a5a124e49296d8fdef5e4022e980", size = 24149272, upload-time = "2026-06-27T00:48:13.917Z" }, + { url = "https://files.pythonhosted.org/packages/ab/fd/9f72373e340c6abcd3eb9257d69b442434b65e90e1f7f53f333abdac11b2/uv-0.11.25-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f7a78fc8d0c5e764e9fa39c99066db47a0bc465b023feed90812e3c0a6b5eb0d", size = 22885453, upload-time = "2026-06-27T00:48:16.641Z" }, + { url = "https://files.pythonhosted.org/packages/ee/c1/7cbb3f6b4a021ce7c1c453d1412d3b4b68d7d7585d15d91a57e9ab0a317e/uv-0.11.25-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:e3480640983e0b8e509eeb67882837e620bdd820f8776948a5f13ebbb4481d04", size = 24935172, upload-time = "2026-06-27T00:48:19.495Z" }, + { url = "https://files.pythonhosted.org/packages/df/d4/862a534ab4aae28ad2c9145ea5af3021eefe225e4e1c983278bb34b53b9e/uv-0.11.25-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:b180b12237b4e04692491fc6796584a9a8bdf4c7332bd2a769caf096b97885d0", size = 24665125, upload-time = "2026-06-27T00:48:22.408Z" }, + { url = "https://files.pythonhosted.org/packages/91/2a/70ef2f2a212d89d23f90e1c8017c080fae93bec21cd9f14795498a6e6f89/uv-0.11.25-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:69d14ffd0a4b050f8a70f64aacb09b8dfdfb1cb30a6351fb17b48f273f95c58c", size = 24653836, upload-time = "2026-06-27T00:48:24.858Z" }, + { url = "https://files.pythonhosted.org/packages/44/2b/a7beea057778f092daa5aeda7aeb3f8bfa78f4a0622245adb449fdbb3d20/uv-0.11.25-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ef11d9967a38109e6e8e3d20d1f743fa08033c32bce274d6ccd9a9abb5d305", size = 26069304, upload-time = "2026-06-27T00:48:28.05Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e8/bb8ab595a27035b565cedd5d601ae2b85cf6aba6f68cd6a97eae88dd7250/uv-0.11.25-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3febca65ec5bc336ddaf7e4f724704f2c894c16839723df14865ee00b4acf38d", size = 26992784, upload-time = "2026-06-27T00:48:30.584Z" }, + { url = "https://files.pythonhosted.org/packages/17/90/bbfa0653e992877e5ea78ab3186fb6a5a122ebef5913b6809ef6d06fcf9b/uv-0.11.25-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:850ba0018ff170c3a9baaf9b5fe8b23393b6b77ee4ea6b2e2315fdb8d7c388f7", size = 26151002, upload-time = "2026-06-27T00:48:33.739Z" }, + { url = "https://files.pythonhosted.org/packages/91/01/f5a01fd777ce501cc59eb71775f3bbacac258a65a64939f07804c2279c98/uv-0.11.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2bc05e17ae3e1f232abf93e7dcfb3b68702dfcde34a00c29cbce7e07d1ecbfb", size = 26334122, upload-time = "2026-06-27T00:48:36.247Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c4/f8b3b6b1bb48a452d98c02909e229f7ae317300618d6dc334c883742339e/uv-0.11.25-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:57fbd47e924242fd347d0c209d95711d8ea61db8d8780962d0f30ccde2c854a3", size = 25055505, upload-time = "2026-06-27T00:48:39.418Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7d/aece221faba22804d8b4f913903358dc2d45193babf2a44a49f79eadd25b/uv-0.11.25-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:f42de9e7d63a28a4fe76a522077813656de38b5acda20b4db63857d260c1ff13", size = 25660097, upload-time = "2026-06-27T00:48:42.398Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7d/b835ed56eab281054efbfbcbbe1249621908c6e4c721a878904cbed2f418/uv-0.11.25-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2c1cfe97dce56c997dfa3214bdb8955b7b34cceea7505520185e22ad99c0eb6b", size = 25759374, upload-time = "2026-06-27T00:48:45.069Z" }, + { url = "https://files.pythonhosted.org/packages/c2/fd/28c990fd18330aa01383bae738be113f4ac5d9d414f92790947326c6781c/uv-0.11.25-py3-none-musllinux_1_1_i686.whl", hash = "sha256:fbff70ae9fa4da9fb6823ae4fdaf77a65c9520e13b6d1d0241ba56e4b121b7aa", size = 25329343, upload-time = "2026-06-27T00:48:47.718Z" }, + { url = "https://files.pythonhosted.org/packages/70/48/16ff9dbe5f308cb547e227971cbcaf3c905797da12a4116b620e2acc09cb/uv-0.11.25-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:41b37e724f41eb4c3794bbdd82ddeebb4b5850d4ada8cccb2906ef9e5aa0f83b", size = 26477125, upload-time = "2026-06-27T00:48:50.251Z" }, + { url = "https://files.pythonhosted.org/packages/f6/8b/4146a55d3ee6b2b67c3dece3ef6be220c443abafc2dc56baa2f74d6b36a8/uv-0.11.25-py3-none-win32.whl", hash = "sha256:86d4759fec9b46f61944d6e9ef1f5eaa2c5fbe2db5ddb59492d9174b08fcf39c", size = 23896598, upload-time = "2026-06-27T00:48:53.01Z" }, + { url = "https://files.pythonhosted.org/packages/64/66/784f9fb457b640dbb96cdd175f4902235b42ffe740dbaee9ea5fc649d8b2/uv-0.11.25-py3-none-win_amd64.whl", hash = "sha256:560b0fbaa6356af533923a349658c21d4f410d16e835787d8a05da451d4ee859", size = 26862205, upload-time = "2026-06-27T00:48:55.667Z" }, + { url = "https://files.pythonhosted.org/packages/85/cb/d7bb121261db0b829f38b1e86b80d8103afd050b8a5c5c9fe4a988d2f1fc/uv-0.11.25-py3-none-win_arm64.whl", hash = "sha256:79f166cd1b84f855e9d2768221d59b403869648289fd884d58ad4299edfb4d9e", size = 25153588, upload-time = "2026-06-27T00:48:58.495Z" }, ] [[package]] name = "wcwidth" -version = "0.9.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ea/01/e5ac23733628a6bbb91913a765fcf55ee8070d8d991bc88fdaaf805052c7/wcwidth-0.9.4.tar.gz", hash = "sha256:fd8d57d3cdfe570e3265c8fab1885c24e34ef40889c0759c0c304a19e9835954", size = 970051, upload-time = "2026-10-24T18:11:44.954Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/b8/d251589a100250b71a7b8e83fedfcabfd8bd60e78cd1e3329372f63bcc93/wcwidth-0.9.4-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b7969c9aa258d536df54c8ac8af5cad0c74a6268c9972e1fb60a5f29feffb66d", size = 612952, upload-time = "2026-10-24T18:10:55.925Z" }, - { url = "https://files.pythonhosted.org/packages/04/e9/dfdca30ca36c472de3e260406dee29fc108499ec590c63b3fe279887ee9d/wcwidth-0.9.4-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:f279f32c8e206a9092fa350e53ca0c2bd8072e45b1c9fd31bb6d476b59b591c4", size = 618904, upload-time = "2026-10-24T18:11:02.008Z" }, - { url = "https://files.pythonhosted.org/packages/5d/b6/d7416f38054a107d2fb17c2b73b68723c6c334f69c4e29545fb9e6df81eb/wcwidth-0.9.4-cp310-abi3-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:a1526cd25c6420e5153bb7d764c7509e692215ee3ad9b725db1ad665d47eae09", size = 778780, upload-time = "2026-10-24T18:11:17.299Z" }, - { url = "https://files.pythonhosted.org/packages/7d/5b/42bdf9a4b0e4f9126584af2ec73642de495f3bd8add907430f13c3bb98d2/wcwidth-0.9.4-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:093469e01d881bff3db93ff3f56c364dc87c441ea01f9f41c22de0c0bdf5c6ef", size = 789012, upload-time = "2026-10-24T18:11:07.829Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e8/0485850748dfdba9443f4151c7b2442cfa4987ba6cd871038eb5d6b8eca9/wcwidth-0.9.4-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b185c8b927b23af2721be1783499d1cfa5c028b098b0858951b4ae224477f1c2", size = 785946, upload-time = "2026-10-24T18:11:18.748Z" }, - { url = "https://files.pythonhosted.org/packages/e9/11/dd3d0379c6094524df6585b76ae3d9727161ff29c003177e3661c36437c1/wcwidth-0.9.4-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:17619066f95c10f44d7ae08ee456602456bc66cc9d5e91966ec73d799acebc5f", size = 795348, upload-time = "2026-10-24T18:11:09.931Z" }, - { url = "https://files.pythonhosted.org/packages/3c/48/1b5299983d9ec084be897162b7cc6014622dfe62847224fa3272b6d79ea5/wcwidth-0.9.4-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:b52f265a694dda6b3ad9050c8bd89158ad519109ef7c5eb110b906cc49f25763", size = 793420, upload-time = "2026-10-24T18:11:20.551Z" }, - { url = "https://files.pythonhosted.org/packages/7a/be/e3097d859b075344a7be57774a58d468eafb0ca88e02aad93eb31d69f6ba/wcwidth-0.9.4-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d8905f1390d828d745fdd1904374c90386d902d3cfa9ee88e9875099f75a4e17", size = 796192, upload-time = "2026-10-24T18:11:22.552Z" }, - { url = "https://files.pythonhosted.org/packages/5e/cd/739710c8cf0de461239db5bb6ee678c9a33d30aaa22beff55cc356781818/wcwidth-0.9.4-cp310-abi3-win32.whl", hash = "sha256:4831662c396dd4c59a016ec53c0ac96738006d653a00482777d9a2e2ea323d62", size = 593229, upload-time = "2026-10-24T18:11:35.609Z" }, - { url = "https://files.pythonhosted.org/packages/d6/f1/c123f902bc2ff9e9c2ab66241b8872204df87cbb18ecdf035e120860fedc/wcwidth-0.9.4-cp310-abi3-win_amd64.whl", hash = "sha256:f28d77153303450ee13ebbe888297e75cf532c754555b6cabafc9bdda16c421c", size = 597780, upload-time = "2026-10-24T18:11:36.952Z" }, - { url = "https://files.pythonhosted.org/packages/4b/88/1cb5ddaf5510b918e01aa95fc4b68df91dead784b63e4931037c5673e85f/wcwidth-0.9.4-cp310-abi3-win_arm64.whl", hash = "sha256:2b58fc8cf2de1bf9cdb68b8beaa5be198742414a7c8cd97aa51ec039783ffa49", size = 598786, upload-time = "2026-10-24T18:11:30.886Z" }, - { url = "https://files.pythonhosted.org/packages/b0/cc/46a31c12b4cdad04f546a3c0aca5d000d77aa5069ae88b4db24525cc29c4/wcwidth-0.9.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:87e4101789415a6cf55ec4c53eceeb4782c2654c88692941cb588f19dca1959f", size = 613805, upload-time = "2026-10-24T18:10:58.887Z" }, - { url = "https://files.pythonhosted.org/packages/18/f6/5a8327af9a65153ea9823d6a12fc182f325264050aa25c05a5deadc189c9/wcwidth-0.9.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ab1e5190fb82476e75fbf963e9d59b4fb1c1e1f4ced82069a0c989016aa959f7", size = 619936, upload-time = "2026-10-24T18:11:04.073Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d3/bb8a7f4aa9b915e56e09841b07636ba49c82ec987ad3d2022e1696c038d9/wcwidth-0.9.4-cp314-cp314t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:8f892713ab5795d3abae181e9c02db0eb24de4084f9ee080535369d3d98d7bb5", size = 794563, upload-time = "2026-10-24T18:11:24.4Z" }, - { url = "https://files.pythonhosted.org/packages/12/0c/986acadef534688a57502d484a40e0f30bdca2d39514fe0a311f7d575f70/wcwidth-0.9.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:befbf46467100e43fd8c8cc0c031a0105f13f5418c3be95fdcf0c47214487967", size = 806565, upload-time = "2026-10-24T18:11:14.297Z" }, - { url = "https://files.pythonhosted.org/packages/9b/1d/66a94b9ac07037d7cf2c1f1288867c9932215d467893eaa5ec8d548c7f2f/wcwidth-0.9.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c4b0dd04cca520792100f6110d10be262c94b285a281d1759c551f159214633", size = 802372, upload-time = "2026-10-24T18:11:26.275Z" }, - { url = "https://files.pythonhosted.org/packages/d1/00/1d50b8e8b45a8330b582695bf8196081a609317928a3718cf21b3d14a899/wcwidth-0.9.4-cp314-cp314t-win32.whl", hash = "sha256:14410eb73178cc492aa9bf22f7c12e3bf930e5470b7220cf6f530efbfa2e03f3", size = 598917, upload-time = "2026-10-24T18:11:38.369Z" }, - { url = "https://files.pythonhosted.org/packages/b4/fc/3e39a33fc8f5c4e07611578710275039c9d4a6655e2be7cf3459401a30cc/wcwidth-0.9.4-cp314-cp314t-win_amd64.whl", hash = "sha256:c36954849aafae1092d6f9de9548c5280c1d6841637a27ca288b2241c802c4ab", size = 603536, upload-time = "2026-10-24T18:11:39.922Z" }, - { url = "https://files.pythonhosted.org/packages/e1/8c/b1f399fd2f8449e42978192967ab6df441d7cf894b10117983c36c062b18/wcwidth-0.9.4-cp314-cp314t-win_arm64.whl", hash = "sha256:79e09e9824c88f5e275ca99e921685567a5c5c1bb6165c16e27ddd1adab33a95", size = 605127, upload-time = "2026-10-24T18:11:32.367Z" }, - { url = "https://files.pythonhosted.org/packages/04/46/839780e772e9068580619d4d691348b7a5f9c4fa5ffe501e522eefeb27cc/wcwidth-0.9.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:a8c9ce14c6b4a499e61de6de7e9e456de11be8bc991554e2ab2ed4feb40b9664", size = 613850, upload-time = "2026-10-24T18:11:00.725Z" }, - { url = "https://files.pythonhosted.org/packages/d2/66/b2559c7012bbd4268f5b5c0288cb793c78235d354e306871a55893aa9d1a/wcwidth-0.9.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:d68f09093c9bec9226a52edc47487042ed4f64c5df91d06f00419495071c0279", size = 620207, upload-time = "2026-10-24T18:11:05.975Z" }, - { url = "https://files.pythonhosted.org/packages/d1/fe/7d2c39e28924b2430b20099e36276f14e00e75c7bbe4ba5b1ed44d1d465a/wcwidth-0.9.4-cp315-cp315t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:d76b7c715c5ca0103b28915f699f1020ae21f06f1d22cdd85a7a97f7b1536eed", size = 797056, upload-time = "2026-10-24T18:11:27.911Z" }, - { url = "https://files.pythonhosted.org/packages/2b/d7/f4f9967a411e02b89b74df2f49f44977c4badccf29738f3ae6941619e27c/wcwidth-0.9.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:29c0685f5f5f8815b88308fdcbe2cd12a92996a21a5b1e18352d165174ef7a6d", size = 806169, upload-time = "2026-10-24T18:11:15.724Z" }, - { url = "https://files.pythonhosted.org/packages/ac/bb/e2b40c6522f3aa1222558487dda3551d297e07e245761b4816f6caeebc29/wcwidth-0.9.4-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e05458491759aa42b7b85f36345b3e6df082d6d2d9bf616299668fd598e0209d", size = 803462, upload-time = "2026-10-24T18:11:29.269Z" }, - { url = "https://files.pythonhosted.org/packages/a8/f2/ab69009f2dd0d3772d3e07f025fa046b33c60c195e4f2e5f000297d23547/wcwidth-0.9.4-cp315-cp315t-win32.whl", hash = "sha256:9e5090d253f5df99659cddfd3ed90dd21f6ff51989b0421331a63fb2681cbe27", size = 598931, upload-time = "2026-10-24T18:11:41.659Z" }, - { url = "https://files.pythonhosted.org/packages/63/6f/b321f10c2298e7d16cffc1a5f05f3d7e5231b45f9e68af5ee378e23bb2e5/wcwidth-0.9.4-cp315-cp315t-win_amd64.whl", hash = "sha256:12786620375dc83fabf4b2b2aa52416fef2bc6094522ea29c8a53c75b0dfe9b6", size = 603485, upload-time = "2026-10-24T18:11:43.052Z" }, - { url = "https://files.pythonhosted.org/packages/4e/cc/7eeb28059186cae72a770df79e744f232ef068192a5a588b718473e35bb4/wcwidth-0.9.4-cp315-cp315t-win_arm64.whl", hash = "sha256:2cca7b5d0b9d0ae49068d3ce806e965326a987f555b62eaa322223396e10d01b", size = 605198, upload-time = "2026-10-24T18:11:33.75Z" }, - { url = "https://files.pythonhosted.org/packages/6f/0c/309b1813b230d1dbbd6f2c2ab2bb21ef68992358977605d9ef289bbfedcc/wcwidth-0.9.4-py3-none-any.whl", hash = "sha256:901eace6d2dd25ebb917d0ce5db18e5c537e1504c905cf32f0d006c12098b05d", size = 301806, upload-time = "2026-10-24T18:10:52.651Z" }, +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, ] [[package]] name = "webcolors" -version = "25.10.0" +version = "24.11.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491, upload-time = "2025-10-31T07:51:03.977Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905, upload-time = "2025-10-31T07:51:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, ] [[package]] name = "webencodings" -version = "0.6.1" +version = "0.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/a0/8fd707bcb776a7be556bad06a2ea5fb9bd519df78ef8e26f70ccf0f38bff/webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910", size = 15001, upload-time = "2026-08-15T14:22:57.549Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/c6/040cbc72480d789a5f40d63fb484d3106554c4dfa2d2b70ad5022057750f/webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b", size = 8745, upload-time = "2026-08-15T14:22:56.31Z" }, + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, ] [[package]] name = "websocket-client" -version = "1.9.2" +version = "1.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/cb/a5abcc2891249f393827c650c6296660ce40374ac22d99ab9aea41f9d2a2/websocket_client-1.9.2.tar.gz", hash = "sha256:0fcb57545848be86992e128218fd96dd87a6769ffdb1a968dff79632b85604d0", size = 84110, upload-time = "2026-08-31T14:08:40.964Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/d2/cc4dc1271e464942db7ee278baae2daa99ee77cb2af744025c04da585a3e/websocket_client-1.9.2-py3-none-any.whl", hash = "sha256:e1a673830a9c7bfa47b1cd3d5e4178f4c9651d80a4eab02c9c23a1c3ec6250ce", size = 95786, upload-time = "2026-08-31T14:08:39.899Z" }, + { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" }, ] [[package]] @@ -3003,9 +2400,9 @@ sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b9 [[package]] name = "widgetsnbextension" -version = "4.0.16" +version = "4.0.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/60/bc7a980fc78837d6ef8f5940cca4cadc433364503a4c4d42e2a7a0de3231/widgetsnbextension-4.0.16.tar.gz", hash = "sha256:adeea0ae78f0856ee4945f413299801b82a0a01416303301f39a704282a37b73", size = 1111094, upload-time = "2026-08-18T08:52:55.859Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428, upload-time = "2025-04-10T13:01:25.628Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/95/40e17e20046b7bc820d29d09ae84ec157ec8dd6e6f6cd722626292c31b2e/widgetsnbextension-4.0.16-py3-none-any.whl", hash = "sha256:a31a8774885b96fe825462f5d6496166f0c7cae111195b6465c801d230eb5a4e", size = 2225148, upload-time = "2026-08-18T08:52:53.736Z" }, + { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload-time = "2025-04-10T13:01:23.086Z" }, ]